Portál AbcLinuxu, 12. května 2025 13:15
mysql> SHOW TABLE STATUS LIKE 'hotel'\G *************************** 1. row *************************** Name: hotel Engine: InnoDB Version: 10 Row_format: Compact Rows: 36 Avg_row_length: 455 Data_length: 16384 Max_data_length: 0 Index_length: 0 Data_free: 11534336 Auto_increment: 62 Create_time: 2011-04-03 11:32:13 Update_time: NULL Check_time: NULL Collation: utf8_czech_ci Checksum: NULL Create_options: Comment: seznam hotelů 1 row in set (0.00 sec) mysql> SHOW TABLE STATUS LIKE 'hotel'\G ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 1 Current database: test21 *************************** 1. row *************************** Name: hotel Engine: InnoDB Version: 10 Row_format: Compact Rows: 36 Avg_row_length: 455 Data_length: 16384 Max_data_length: 0 Index_length: 0 Data_free: 11534336 Auto_increment: 60 Create_time: 2011-04-03 11:32:13 Update_time: NULL Check_time: NULL Collation: utf8_czech_ci Checksum: NULL Create_options: Comment: seznam hotelů 1 row in set (0.03 sec)Prvni status ukazuje stav pred restartem a ma dle ocekavani
Auto_increment: 62
. Pak je videt ztratu spojeni po restartu databaze a vypis dalsiho statusu na stejne tabulce. Kupodivu je Auto_increment: 60
.
DROP TABLE IF EXISTS `hotel`; CREATE TABLE `hotel` ( `id_hotel` int(11) NOT NULL AUTO_INCREMENT COMMENT 'identifikátor hotelu', ... PRIMARY KEY (`id_hotel`) ) ENGINE=InnoDB AUTO_INCREMENT=60 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci COMMENT='seznam hotelů';
INSERT
vlozil mezi:
START TRANSACTION; INSERT INTO `hotel` ... COMMIT;a vysledek je stejny, tedy po vymazu naposledy vlozeneho hotelu a naslednem restartu databaze se to vrati na 60.
ALTER TABLE hotel ENGINE=MyISAM;a znovu vyzkousel. Nyni se id prideluji dle meho ocekavani, tedy stale kupredu, bez ohledu na restarty databaze. A tak to ma byt. Nejsem si jist zda u engine InnoDB jde o vlastnost ci bug ...
auto_increment
pod ruznymi enginy chova jinak...
SELECT MAX(auto_increment_column) FROM table
a na to nastaví hodnotu. Jakože InnoDB si nedrží mezi restarty údaj o dosažené hodnotě auto_increment-u. Ale každopádně by vám neměly vzniknou dva záznamy ze stejnou hodnotou. Asi nebyl poslední záznam před restartem zapsán COMMIT-nut (nebo auto_commit-nut).
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.