1. 一個表的ID是個自增序列。sql
2. 這個表上有一個插入數據的函數(存儲過程)。業務中,ID可能會傳入參數,也可能沒有傳入參數。函數
問題來了 :當用戶Insert一條ID=2(傳入參數ID的值)的數據後,序列的值卻仍是1。
當用戶下一次不傳ID時再insert,第一次沒有問題,ID自動取序列值爲1,第2次Insert就會拋錯,衝突了嘛。這種case若是不解決,放到項目中,一言不合就拋這樣的錯,是否是很鬱悶。code
解決辦法:
從存儲過程入手,若是用戶傳入ID=2時,Insert完成後把序列的當前值改爲用戶指定的值2。下一次Insert時不傳ID也沒關係,從3開始了嘛。class
貼上一句關鍵SQL代碼數據
PERFORM SETVAL(sequenceName, ID);