我有一個表batch1只有一列id這是主鍵。MySQL插入唯一且僅當條件爲真
我可以用下面的查詢插入數據。
INSERT INTO batch1 VALUES(NULL);
現在我需要爲此表的記錄設置限制,以便它只能插入所需的行數。例如說,如果限制設置爲,上面的表格不能在上面插入更多的記錄並給出錯誤。
我在其他表中存儲限制。除LOCKS之外,我還有什麼選擇?
我有一個表batch1只有一列id這是主鍵。MySQL插入唯一且僅當條件爲真
我可以用下面的查詢插入數據。
INSERT INTO batch1 VALUES(NULL);
現在我需要爲此表的記錄設置限制,以便它只能插入所需的行數。例如說,如果限制設置爲,上面的表格不能在上面插入更多的記錄並給出錯誤。
我在其他表中存儲限制。除LOCKS之外,我還有什麼選擇?
大廈Andomar的答案,它拋出一個語法錯誤對於我的MySQL版本:
insert into batch1 (id)
select null
from (
select count(*) as num
from batch1
) as counted
where counted.num < 1000;
This從派生表中選擇,使用結果從外部選擇返回一個或零個行。
這會確保ID始終是唯一的嗎? – Neutralizer 2012-08-14 19:24:38
MySQL的主鍵處理強制唯一性。這個查詢只是插入NULL作爲id,就像你的示例查詢一樣。爲了使其工作(不止一次,無論如何),該列需要設置爲AUTO_INCREMENT。在某些情況下,AUTO_INCREMENT列可以重新使用之前從表中刪除的值,但不會插入當前存在的值。 – eswald 2012-08-14 19:30:14
明白了。如果我想獲取最後插入的ID,該怎麼辦?我可以使用LAST_INSERT_ID(),但在INSERT不起作用時也會返回。 – Neutralizer 2012-08-14 19:31:12
你可以使用一個where
條款,以防止不必要的更新:
insert into batch1
select null
where (
select count(*)
from batch1
) < 1000
您可以row_count測試更新是否打通:
select row_count() as InsertedRecords;
這顯然不起作用。我已經嘗試過了。 – Neutralizer 2012-08-14 17:21:45
寫一個觸發器? http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html – MatBailie 2012-08-14 16:55:46