簡體   English   中英

MySQL語法錯誤:不存在的地方

[英]MySQL syntax error : where not exists

我一直在嘗試在數據庫中插入一條不存在的記錄,這是查詢:

insert into evt(e_id, t_id)
values( '1597',  '4')
where not exists( select id from evt where e_id = '4' and t_id = '1597');

該查詢返回以下錯誤:

錯誤1064(42000):您的SQL語法有錯誤; 檢查與您的MySQL服務器版本相對應的手冊以獲取正確的語法,以在“不存在的地方附近使用(在第1行的evt中選擇id,其中e_id ='4'和t_id ='

我不明白為什么它不起作用

嘗試這個 :

    INSERT INTO evt(e_id, t_id)
SELECT * FROM (SELECT '4', '1597') AS tmp
WHERE NOT EXISTS (
    SELECT e_id FROM evt WHERE e_id = '4' and t_id = '1597'
) LIMIT 1;

MySQL INSERT語法不支持WHERE條件

 insert into evt(e_id, t_id) values( '1597',  '4') 

可能是您需要更新

  update evt
  set e_id = '1597',
  t_id  = 4
  where id  not in ( select id from evt where e_id = '4' and t_id = '1597');

或插入選擇

 insert into evt(e_id, t_id) 
 select  '1597',  '4'
 from evt
 where not exists( select id from evt where e_id = '4' and t_id = '1597');

如果要防止數據庫中出現重復項,請讓數據庫完成工作。 使用唯一約束或索引:

create unique index unq_evt_eid_tid on evt(e_id, t_id);

這將確保數據完整性,無論如何插入或更新值。 數據庫為您完成工作。

然后,可以通過使用on duplicate key update來防止插入時出錯:

insert into evt(e_id, t_id)
     values (1597,  4) 
     on duplicate key update e_id = values(e_id);

on duplicate key可以防止代碼生成錯誤。

我還從值中刪除了單引號。 編號通常是數字。 如果它們確實是字符串,請添加引號。

嘗試這個:

 insert into evt(e_id, t_id) values( '1597',  '4') where not in( select id from evt where e_id = '4' and t_id = '1597');

INSERT語句不支持WHERE子句。

您有多種選擇。 首先進行選擇,如果條件為真,則插入或使用ON DUPLICATE KEY

INSERT INTO evt
    SET e_id = '1597', t_id = '4'
ON DUPLICATE KEY UPDATE
    e_id = '1597', t_id = '4'

這需要您的字段成為索引(主索引或唯一索引)

注意:插入數字時,您不應該使用引號,因為mysql將其視為字符串,並嘗試進行轉換,並逐漸減慢您的項目速度。 同樣,插入沒有引號的數字更安全

我解決了所有問題,添加了一個像這樣的獨特對:

ALTER IGNORE TABLE mytable ADD UNIQUE (field1,field2)

我認為您正在尋找UPDATE而不是插入?

UPDATE `evt` SET `e_id`='1597', `t_id`='4' 
       WHERE `e_id` NOT in ('4') and `t_id` not in('1597');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM