2012-08-14 26 views
1

我有一個表batch1只有一列id這是主鍵。MySQL插入唯一且僅當條件爲真

我可以用下面的查詢插入數據。

INSERT INTO batch1 VALUES(NULL); 

現在我需要爲此表的記錄設置限制,以便它只能插入所需的行數。例如說,如果限制設置爲,上面的表格不能在上面插入更多的記錄並給出錯誤。

我在其他表中存儲限制。除LOCKS之外,我還有什麼選擇?

+0

寫一個觸發器? http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html – MatBailie 2012-08-14 16:55:46

回答

2

大廈Andomar的答案,它拋出一個語法錯誤對於我的MySQL版本:

insert into batch1 (id) 
select null 
from (
     select count(*) as num 
     from batch1 
     ) as counted 
where counted.num < 1000; 

This從派生表中選擇,使用結果從外部選擇返回一個或零個行。

+0

這會確保ID始終是唯一的嗎? – Neutralizer 2012-08-14 19:24:38

+0

MySQL的主鍵處理強制唯一性。這個查詢只是插入NULL作爲id,就像你的示例查詢一樣。爲了使其工作(不止一次,無論如何),該列需要設置爲AUTO_INCREMENT。在某些情況下,AUTO_INCREMENT列可以重新使用之前從表中刪除的值,但不會插入當前存在的值。 – eswald 2012-08-14 19:30:14

+0

明白了。如果我想獲取最後插入的ID,該怎麼辦?我可以使用LAST_INSERT_ID(),但在INSERT不起作用時也會返回。 – Neutralizer 2012-08-14 19:31:12

0

你可以使用一個where條款,以防止不必要的更新:

insert into batch1 
select null 
where (
     select count(*) 
     from batch1 
     ) < 1000 

您可以row_count測試更新是否打通:

select row_count() as InsertedRecords; 
+0

這顯然不起作用。我已經嘗試過了。 – Neutralizer 2012-08-14 17:21:45