最近为了性能问题,有时候用myisam引擎建表,发现在auto_increment上面两者区别还是有点大,下面说明一下。
1. InnoDB:
表里面只能有一个列是auto_increment 并且必须是主键,如果用下面的语句建表会报错:
create table dd(grp varchar(10) not null, id int not null auto_increment, primary key(grp,id)) engine=innodb;
下面的是OK的,因为id是主键。
create table dd(grp varchar(10) not null, id int not null auto_increment, primary key(id)) engine=innodb;
下面是个测试例子:
sample
drop table if exists dd;
create table dd(grp varchar(10) not null, id int not null auto_increment, primary key(id)) engine=innodb;
insert into dd values('a',null),('a',null),('b',null),('b',null),('b',null);
select * from dd;
2. MyISAM:
相对InnoDB比较宽松,如果主键是多列,某一列可以是auto_increment,在插入新列时自增列的计算方式是以主键的其他列的值分组,然后自增列在同组内递增,用公式说话就是newValue= (max(value) in the same group) + 1;
下面是个例子:
sample
drop table if exists dd;
create table dd(grp varchar(10) not null, id int not null auto_increment, primary key(grp,id)) engine=myisam;
insert into dd values('a',null),('a',null),('b',null),('b',null),('b',null);
select * from dd;