我不希望主鍵增加,即使它遇到重複的輸入錯誤!在MySQL中,當出現「重複條目」錯誤時,如何防止主鍵自動遞增?
-1
A
回答
1
你可以使用一個表和觸發器來實現諸如序列的預言:
drop table if exists users_seq;
create table users_seq
(
next_val int unsigned not null default 0
)
engine=innodb;
drop table if exists users;
create table users
(
user_id int unsigned not null,
username varchar(32) unique not null
)
engine=innodb;
delimiter #
create trigger users_before_ins_trig before insert on users
for each row
begin
declare v_id int unsigned default 0;
select next_val + 1 into v_id from users_seq;
set new.user_id = v_id;
update users_seq set next_val = v_id;
end#
delimiter ;
insert into users_seq values (0);
insert into users (username) values ('alpha'),('beta');
Query OK, 2 rows affected, 1 warning (0.03 sec)
select * from users_seq;
+----------+
| next_val |
+----------+
| 2 |
+----------+
1 row in set (0.00 sec)
select * from users;
+---------+----------+
| user_id | username |
+---------+----------+
| 1 | alpha |
| 2 | beta |
+---------+----------+
2 rows in set (0.00 sec)
insert into users (username) values ('alpha');
ERROR 1062 (23000): Duplicate entry 'alpha' for key 'username'
select * from users_seq;
+----------+
| next_val |
+----------+
| 2 |
+----------+
1 row in set (0.00 sec)
select * from users;
+---------+----------+
| user_id | username |
+---------+----------+
| 1 | alpha |
| 2 | beta |
+---------+----------+
2 rows in set (0.00 sec)
insert into users (username) values ('gamma');
Query OK, 1 row affected, 1 warning (0.03 sec)
select * from users_seq;
+----------+
| next_val |
+----------+
| 3 |
+----------+
1 row in set (0.00 sec)
select * from users;
+---------+----------+
| user_id | username |
+---------+----------+
| 1 | alpha |
| 2 | beta |
| 3 | gamma |
+---------+----------+
3 rows in set (0.00 sec)
希望它能幫助:)
1
答案包含在你的問題中:根本不要讓它自動增加列。相反,你自己找出正確的值並處理重複的關鍵錯誤。
0
只需將字段設置爲PRIMARY而不帶AUTO_INCREMENT,那麼您可以控制它的值。
0
跨越這個「錯誤」剛剛來到。不要喜歡這種行爲,因爲它會使我的應用程序中的任何UNIQUE列的使用失效。
所以我的解決方案是:檢查是否存在唯一密鑰(與選擇)之前添加它,並從唯一鍵退出。
相關問題
- 1. 防止重複條目自動增加
- 2. Mysql:與主鍵自動增量重複鍵錯誤
- 3. 如何防止sqlite主鍵在更新時自動增量?
- 4. php/mysql防止在多列上出現重複條目
- 5. 重複條目在MySQL的關鍵 「主」
- 6. 在主鍵mysql上的重複條目
- 7. mySQL自動增量問題:重複條目'4294967295'爲鍵1
- 8. 重複鍵主鍵自動增量
- 9. 防止重複條目的mysql
- 10. 錯誤1062:添加主鍵時,鍵'PRIMARY'重複條目'0'
- 11. MySQL:多個主鍵和自動遞增
- 12. mysql自動遞增主鍵耗盡
- 13. 使用MySQL的正常主鍵自動遞增或複合鍵
- 14. 在MySQL中刪除和插入時出現重複鍵錯誤
- 15. 當我在VB.net中調用form.Show()時出現重複鍵錯誤
- 16. 當主鍵自動增量時,在MySql中插入忽略
- 17. 在MySQL中選擇變量時防止出現重複內容
- 18. 防止重複條目parse.com
- 19. 防止重複條目
- 20. 的MySQL:重複條目鍵 '主要'
- 21. 自動遞增列主鍵
- 22. 如何防止ItemCount出現重複?
- 23. 使用saveToCassandra時自動遞增主鍵()
- 24. MySQL的自動防止重複插入
- 25. 當主鍵沒有主鍵時,mysql主鍵重複輸入
- 26. 防止滾動條出現
- 27. 複合主鍵與自動遞增主鍵
- 28. 在使用SqlBulkCopy時如何防止重複條目?
- 29. 如何在刷新時防止重複條目?
- 30. 如何調用自動遞增的MySQL的主鍵Java變量
爲什麼要防止增量?如果你擔心數字上的差距,那麼你就錯了。 – 2012-01-16 15:36:18
TIMEX你有很好的評價,請你能提供一些關於這個問題的背景知識,否則我認爲你會得到很多不符合你需要的答案。 – 2012-01-16 15:42:45