《主键,五个小习题》昨天挖的坑,今天填一下。
练习一:建表时,可不可以不声明主键?
(1) create table user(
name varchar(10)
)engine=innodb;
(2) insert into user values('shenjian');
(3) insert into user values('shenjian');
画外音:建表时,不声明主键,插入两个相同的元素。
提问,连续执行上面的语句,执行结果是:
A 建表语句(1)报错
B 插入语句(2)报错
C 插入语句(3)报错
D 均不报错
实操如上,所以答案是【D 均不报错】
InnoDB必须要有聚集索引,行记录按照聚集索引物理上排序。必须要有聚集索引,并不代表一定要有主键。
(1)如果定义了主键,主键就是聚集索引;
(2)如果没有定义主键,第一个非空(not null)且唯一(unique)列是聚集索引;
(3)如果没有符合条件的列,会自动创建一个隐藏的row-id作为聚集索引;
画外音:本例就属于第三种情况。
练习二:建表时,可不可以不声明主键非空?
(1) create table user(
id int,
name varchar(10),
primary key(id)
)engine=innodb;
(2) insert