优点:
缺点:
执行:
create table wq_autoincre_demo(
i smallint not null auto_increment,
name varchar(10),primary key(i)
)engine=innodb;
插入一条记录:(innodb表的自动增长列可以手动插入,主键存在值的前提下,插入0或者null都会自动顺延主键值,即默认自增,按照插入先后顺序),执行语句,图示为结果:
insert into wq_autoincre_demo values(1,'2'),(0,'3'),(null,'4');
select * from wq_autoincre_demo;
第二次插入,则不用给主键值,因为数据库中的主键已经有值了,再次插入0或者null ,则会自动默认顺延主键值,即主键自增。
insert into wq_autoincre_demo values(0,'3'),(null,'4');
select * from wq_autoincre_demo;
可以使用 select last_insert_id()
查询当前线程最后插入记录使用的值。如果一次插入了多条记录,那么返回的是第一条记录使用的自动增长值。
对于InnoDB表,自动增长列必须是索引。如果是组合索引,也必须是组合索引的第一列。
以下如若是组合索引,必须是组合做引的第一列,对于组合索引第一列,插入值为0或者null顺延同样生效,第一列索引会自增。
create table wq_zuindexinno(
d1 smallint not null auto_increment,
d2 smallint not null,
name varchar(10),
index(d2,d1),
primary key(d1,d2)
)engine=innodb;
insert wq_zuindexinno(d2,name) values(2,'2'),(3,'3'),(4,'4'),(2,'2'),(3,'3'),(4,'4');
select * from wq_zuindexinno;
但是对于myisam的表,自动增长列可以使组合索引的其他列,这样插入记录后,自动增长列是按照组合索引的前面几列进行排序后递增的。eg:新建表 wq_autoincre_demo,自动增长列d1作为组合索引的第二列,插入记录后,发现自动增长列是按照组合索引的第一列d2进行排序后递增的。
create table wq_zuindex(
d1 smallint not null auto_increment,
d2 smallint not null,
name varchar(10),
index(d2,d1)
)engine=myisam;
insert wq_zuindex (d2,name) values(2,'2'),(3,'3'),(4,'4'),(2,'2'),(3,'3'),(4,'4');
select * from wq_zuindex;
mysql支持外键的存储引擎只有InnoDB,在创建外键的时候,父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引。
在创建索引时,父表执行delete/update操作时,可以指定子表进行相应操作,包括 restrict,no action, set null,cascade,set default。 详细可参看:mysql外键设置方式
当某个表被其他表创建的外键参照,那么该表对应索引或主键禁止被删除。
但也存在关闭外键约束会更好的使用场景:
① 比如:导入多个表的顺序时,如果忽略表之前的导入顺序,可暂时关闭外键的检查;同,在执行load data 和alter table 操作的时候,可暂时关闭外键约束来加快处理速度。执行之前,先执行语句set foreign_key_check=0 ;
然后执行你的操作,操作完毕即可恢复原来外键约束状态 set foreign_keu_check=1;
。
对innodb类型的表,外键信息可通过 show create table +表名;
或者 ‘show table status ;’ 或者 执行show table status like 'city' \G
查看。
页面太乱,清屏下mysql system clear;
然后执行 ;
show create table city
show table status like 'city' \G
innodb存储表和索引有以下两种方式。
alter table tbl_name discard tablespace;
alter table tbl_name import tablespace;
将备份恢复到数据库中,但这种单表备份,只能恢复到表原来所在的数据库中,而不能恢复到其他数据库中。如果想将单表恢复到目标数据库,则需要通过mysqldump和mysqlimport来实现。
附注:
即便在多表空间的存储方式下,共享表空间仍然是必须的,innodb把内部数据词典和在线重做日志放在这个文件中。