字段的约束
- (一)常用约束介绍
- (二)创建带约束字段的语法格式
- (三)主键与自增长
- (四)非空
- (五)唯一
- (六)默认值
(一)常用约束介绍
- 主键(primary key):值不能重复,auto_increment 代表值自动增长;
- 非空(not null):此字段不允许填写空值;
- 唯一(unique):此字段不允许重复;
- 默认值(default):当不填写此值时会使用默认值,如果填写时以填写为准。
(二)创建带约束字段的语法格式
create table 表名(字段名 数据类型 约束,字段名 数据类型 约束...
);
(三)主键与自增长
- 带有 primary key(主键)的字段,值不能重复;
- auto_increment 为自增长;
create table 表名(字段名 数据类型 primary key auto_increment,字段名 数据类型 约束...
);
例1:创建表 d,字段要求如下:
id:数据类型为 int unsigned(无符号整数),primary key(主键),auto_increment(自增长);
name:数据类型为varchar(字符串),长度为10;
age:数据类型为 int(整数)。
create table d(id int unsigned primary key,name varchar(10),age int
);
(这个要先把第七行“运行已选择的”,再把第八行“运行已选择的”)
主键:不能重复。这里是 id 不能重复。
如果插入一条相同 id 的记录(id 为1),会是什么结果呢?
报错啦。
我们来查询一下表 d :
name还是’貂蝉’,name值为’妲己’的记录并没有插入。
▲我们来看“auto_increment”的作用:
首先,我们drop删除一下表:
drop table d;
然后,新建表d:
CREATE TABLE d(id INT UNSIGNED PRIMARY key aotu_increment,name VARCHAR(10),age int
);
我们只插入了指定字段,没有插入 id,它会自动把 id 写成 1。
插入第二条没有指定 id 的记录的时候,id自动写成2。
如果插入一条指定 id 的记录,查询结果的 id 是指定的 id 值。
▲ 如果插入数据时,插入所有字段,但又没写自增长字段的值,insert 语句会出错。
insert into d values ('甄姬',20);
解决方案:
使用占位符,通常使用0 或者null 来占位。
insert into d (id,name,age) values (0,'甄姬',20);
insert into d (id,name,age) values (null,'甄姬',20);
▲ truncate 和 delete:
delete:删除后再次新建,id 会接着原来的最后一条记录的 id 值继续自增,不会回到1。
truncate:删除后再次新建,id 从1开始。
(四)非空
带有 not null (非空)的字段,值不能为空。
create table 表名(字段名 数据类型 not null,...
);
例1:创建表 e,字段要求如下:
id:数据类型为 int unsigned(无符号整数);
name:数据类型为 varchar,长度为10,not null;
age:数据类型为 int。
create table e(id int unsigned,name varchar(10) not null,age int
);
▲ 非空字段表,insert 插入数据一定要指定字段值,不然会插入失败。
(五)唯一
此字段的值不允许重复。
create table 表名(字段名 数据类型 unique,...
);
例1:
创建表 f,字段要求如下:
id:数据类型为 int;
name:数据类型为 varchar,长度为10,unique;
age:数据类型为 int。
create table f(id int,name varchar(10) unique,age int
);
▲ 唯一字段的表,insert 语句插入数据。
例2:表 f 插入一条记录
insert into f values (1,'瑶',18);
例3:如果插入的记录中 name 值重复,会插入失败。
insert into f values (2,'瑶',20);
(六)默认值
当不填写此值时会使用默认值,如果填写时以填写为准。
create table 表名(字段名 数据类型 default 值,...
);
例1:
创建表 g,字段要求如下:
id:数据类型为 int;
name:数据类型为 varchar,长度为10;
age:数据类型为 int,default,30。
create table g(id int,name varchar(10),age int default 30
);