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

) ENGINE = MYISAM

MYSQL ,