赞
踩
目录
null约束:字段可以为null、空
not null约束:字段不能为null、空
在数据库中字段默认为null,如果设置为not null,则在插入时必须写入数据否则报错。
- -- 测试数据
- CREATE TABLE student (
- id INT NOT NULL,
- sn INT,
- name VARCHAR(20),
- qq_mail VARCHAR(20)
- );
在插入:insert into student values (null,1,'张三',1234);
则会报:ERROR 1048 (23000): Column 'id' cannot be null
在插入:insert into student(sn) values(1);
则会报:ERROR 1364 (HY000): Field 'id' doesn't have a default value
unique约束:代表该字段值不能相同
举例:sn字段都插入3时,则会报:ERROR 1062 (23000): Duplicate entry '3' for key 'sn'
注意:若字段值为null时可以重复
主键约束:可以唯一标识一条数据。(换种说法:利用主键可以精准定位到一条数据)
比如:一个身份证号就可以当做主键,因为通过身份证号就能准确找到一个人的信息。
主键约束 = not null + unique约束,并且一张表中只允许有一个主键。
1.主键约束不能为null
2.主键约束不能重复
3.在mysql中,如果是整型主键还可以使用auto_increment(mysql关键字)从1开始自增,此时主键就可以不用插入,他会从1开始自动插入。(auto_increment会从数据库记录的最大值开始+1)
外键约束:用来设计表与表的关系,表1(主表:主键)——表2(从表:外键),通过外键来建立(连接)表与表的关系
1.外键的取值范围:是主表主键的取值范围。
比如:一张班级表:主键为班级id,班级id插入1班,2班,3班,那么你学生表中的外键就只能取值为 1班,2班,3班。(就好比学校开了1,2,3班,有个学生说他是4班的,这不合适吧.....)
2.在主表中主键不能重复,但是在从表中外键是可以重复的
比如:你还是班级表(主表)有三个班级id(主键)不能重复,但是学生表(从表)中班级id(外键)是可以重复的,多个学生对应一个班级。
3.关系中一对多还是一对一是有方向的。一个学生对应一个班级(学生到班级1对1),一个班级有多个学生(班级到学生1对多)
举例:设计一个学生表和班级表
语法格式:-- 格式:foreign key(外键名) references 主表(主表的主键)
- -- 表的设计
- -- 班级表
- DROP TABLE IF EXISTS class;
- CREATE TABLE class (
- id INT PRIMARY KEY auto_increment, -- 班级主键
- name VARCHAR(20) -- 班级名称
- );
- insert into class
- values(1,'一班'),
- (2,'二班');
-
- -- 学生表
- DROP TABLE IF EXISTS student;
- CREATE TABLE student (
- id INT PRIMARY KEY auto_increment, -- 学生主键
- name VARCHAR(20), -- 学生名称
- class_id int, -- 外键名
- -- 格式:foreign key(外键名) references 主表(主表的主键)
- foreign key(class_id) references class(id) -- 外键
- );
- insert into student
- values(11,'张三',1), -- 外键只能取主表中主键的1,2
- (12,'李四',2),
- (13,'王五',2);
结果:
check约束:用来检查字段值所允许的范围。
比如:你规定分数字段的值在0-100之间,当插入的数据为200时,则会报错。
mysql忽略check语句的功能(写不写都一样,不生效)
某个字段设置了default及default值,那么在插入数据时未给该字段赋值,则该字段会自动赋default值。若插入数据时,给该字段插入了值,那么该字段则为插入值,而不是default值
注意:null也可以插入到默认字段中。
1.未在该字段插入值,则自动插入default值
2.在该字段插入确定值,则为确定值
3.在该字段插入null,则为null值
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。