Portál AbcLinuxu, 10. listopadu 2025 17:05
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.