Database – test auto_increment
September 28th, 2010
CREATE TABLE `test` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY
) ENGINE = MYISAM
今次 測試insert情況,
INSERT INTO `test2` VALUES (0)
在測試所見, 如果id 是零, 它會在最後insert
第2次INSERT 我嘗試 -1
INSERT INTO `test2` VALUES (-1)
結果是順利INSERT -1
第3次INSERT我再嘗試零
INSERT INTO `test2` VALUES (0)
結果也一樣, 在最後出現
(雖然這個測試好似好淺, 但這個是非常重要..)
Important: 在傳送資料(在一個舊table資料傳送一個新table), 如果有id 是零是非常嚴重
例如:
CREATE TABLE `test`.`test2` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`data` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL) ENGINE = MYISAM
CREATE TABLE `test`.`test3` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`data` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL) ENGINE = MYISAM
舊table
id | data |
0 | abc |
1 | def |
2 | ghi |
INSERT IGNORE INTO test3
SELECT *
FROM test2
當資料傳送後, 新table的情況,
id | data |
1 | abc |
2 | ghi |
在測試時, 其實insert不一定是跟id 去insert
有可能insert的次序是有機會亂(也可能是 1, 0,2)
如果id是 fk 那資料就全錯了
CREATE TABLE `test`.`test2` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`data` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL
`data` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL
) ENGINE = MYISAM