是否有一個查詢將只檢查記錄,如果不存在insert?我不想重複更新或替換。尋找一個查詢解決方案,看看其他答案,但不是真正希望的。mysql條件插入 - 如果不存在insert
表:
name|value|id
------------------
phill|person|12345
僞查詢:
IF NOT EXISTS(name='phill', value='person', id=12345) INSERT INTO table_name
是否有一個查詢將只檢查記錄,如果不存在insert?我不想重複更新或替換。尋找一個查詢解決方案,看看其他答案,但不是真正希望的。mysql條件插入 - 如果不存在insert
表:
name|value|id
------------------
phill|person|12345
僞查詢:
IF NOT EXISTS(name='phill', value='person', id=12345) INSERT INTO table_name
使用REPLACE
- 工程酷似INSERT,不同之處在於,如果一個老行的表具有相同的值作爲一個新行PRIMARY KEY或UNIQUE索引,舊行在插入新行之前被刪除。
http://dev.mysql.com/doc/refman/5.0/en/replace.html
-- For your example query
REPLACE INTO table_name(name, value, id) VALUES
('phill', 'person', 12345)
編輯:既然你不能使用取代另一種選擇是:爲表數據集約束索引(主鍵,唯一性),並使用INSERT忽略
INSERT IGNORE INTO table_name
SET name = 'phill',
value = 'person',
id = 12345;
是的,我瞭解功能,但我的用戶只能訪問SELECT,INSERT,UPDATE。但是我試圖遠離UPDATE,並且我不知道我是否具有REPLACE功能的許可權 – 2010-02-08 17:22:28
嘗試INSERT IGNORE – Yada 2010-02-08 17:24:42
INSERT IGNORE是否刪除並再次添加記錄?或者它只是如果找到並跳過它,如果找不到,插入? – 2010-02-08 19:17:54
如果從具有子查詢的select查詢執行插入操作,以便只在該行尚不存在時才返回行,那麼該怎麼辦?
僞代碼:
INSERT INTO TABLE_FOO (...)
SELECT @VAR1, VAR2 ...
FROM DUMMYTABLE -- THIS TABLE SHOULD CONTAIN 1 RECORD OF ANYTHING
-- IN CASE THE FROM IS REQUIRED
WHERE (SELECT COUNT(*) FROM TABLE_FOO WHERE COLUMN1 = @VAR1) = 0
這種模式應該工作,你只需要得到正確的語法爲MySQL。
當處理不使用鍵或唯一鍵的行時,這非常有用。 – zigg 2013-02-11 17:31:52
你能澄清一下這個問題嗎? id是唯一唯一的字段嗎? (以一種快速且骯髒的方式,您可以使用唯一的索引,如果您嘗試插入具有重複值的行,它將會失敗)。 名稱和價值是否也必須獨一無二? – 2010-02-08 17:07:30
所有三個值都是唯一的,不能爲空。 ID有一個索引,名稱和值應該不同,但ID是必須的 – 2010-02-08 17:13:05