mysql auto_increment of serial
Posted by Paul Verreth Fri, 19 Jan 2007 13:37:00 GMT
Sinds de recentse versies van mysql kan je een auto_increment aanmaken met serial en hoeft BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE dus niet meer.
create table probeer ( id serial, een char(50), twee char(50));
Dat geeft dus:
describe probeer; +-------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+---------------------+------+-----+---------+----------------+ | id | bigint(20) unsigned | NO | PRI | NULL | auto_increment | | een | char(50) | YES | | NULL | | | twee | char(50) | YES | | NULL | | +-------+---------------------+------+-----+---------+----------------+
De waarde van de laatste kan je opvragen na een insert.
insert into probeer (een,twee) values ('azerty','qwerty');
...
insert into probeer (een,twee) values ('azerty','qwerty');
select last_insert_id();
Maar opgelet, last_insert_id() geeft enkel de waarde voor de insert statement die er net aan vooraf gaat. Op deze manier is het dus niet mogelijk om de waarde voor een specifieke tabel te weten te komen.
table status
Hiervoor heb je show table status nodig.
show table status like 'probeer';
Hier zal de auto_increment kolom de waarde geven voor de volgende insert.
auto_increment waarde zetten
Je kan de auto_increment waarde ook expliciet zetten, bij het aanmaken van de tabel, maar ook met alter table:
alter table probeer auto_increment = 100
Maar opgelet, je kan ze niet kleiner zetten dan de hoogste waarde. Er zal geen foutmelding komen.
auto_increment herschikken
Je kan een auto_increment herschikken, als er gaten in de reeks zitten bijvoorbeeld, door de kolom te droppen en later terug bij te voegen, maar opgelet, bij foreign keys zal dat problemen geven!
alter table probeer drop column id; alter table probeer add column id serial first;
auto_increment op nul zetten
In vroegere versies van mysql zou delete from, de waarde op nul zetten, maar dit is niet meer het geval. Maar met truncate table gebeurt dit wel.
Extra info met information_schema
Om auto_increment te vergelijken met het aantal rows bijvoorbeeld:
select table_name, auto_increment, table_rows from information_schema.tables where table_schema = 'db' and auto_increment > 1; | table_name | auto_increment | table_rows | tab1 15 0 section 23 20 ... state 20 20

