MySQL數(shù)據(jù)庫(kù)經(jīng)典錯(cuò)誤 七 truncate 刪除數(shù)據(jù),導(dǎo)致自動(dòng)清空自增 ID,前端返回報(bào)錯(cuò) not found
2018-11-08 20:19:44
11278
truncate 刪除數(shù)據(jù),導(dǎo)致自動(dòng)清空自增 ID,前端返回報(bào)錯(cuò) not found
這個(gè)問(wèn)題的出現(xiàn),就要考慮下 truncate 和 delete 的區(qū)別了,看下實(shí)驗(yàn)演練:
首先先創(chuàng)建一張表:
CREATE TABLE `t` (
`a` int(11) NOT NULL AUTO_INCREMENT,
`b` varchar(20) DEFAULT NULL,
PRIMARY KEY (`a`),
KEY `b` (`b`)
) ENGINE=InnoDB AUTO_INCREMENT=300 DEFAULT CHARSET=utf8
插入三條數(shù)據(jù):
mysql> insert into t (b) values (‘a(chǎn)a’);
Query OK, 1 row affected (0.00 sec)
mysql> insert into t (b) values (‘bb’);
Query OK, 1 row affected (0.00 sec)
mysql> insert into t (b) values (‘cc’);
Query OK, 1 row affected (0.00 sec)
mysql> select * from t;
+—–+——+
| a | b |
+—–+——+
| 300 | aa |
| 301 | bb |
| 302 | cc |
+—–+——+
3 rows in set (0.00 sec)
先用 delete 進(jìn)行刪除全表信息,再插入新值。
結(jié)果發(fā)現(xiàn) truncate 把自增初始值重置了,自增屬性從 1 開(kāi)始記錄了。當(dāng)前端用主鍵 id 進(jìn)行查詢(xún)時(shí),就會(huì)報(bào)沒(méi)有這條數(shù)據(jù)的錯(cuò)誤。
個(gè)人建議不要使用 truncate 對(duì)表進(jìn)行刪除操作,雖然可以回收表空間,但是會(huì)涉及自增屬性問(wèn)題。這些坑,我們不要輕易鉆進(jìn)去。