写在前面,建议学习的时候不要使用navicat等可视化工具来书写sql语句,而是通过纯粹的dos命令框进行操作。
约束(constraint):约束是用来保证数据的完整性和有效性,约束的对象是表中的字段。
常见约束有
非空约束: not null,被约束的字段不能为空,加载字段的后面。只允许列级约束
唯一性约束: unique,被约束的字段不能重复,但是可以为空null,
- 放在列后面称为列级约束
- 没有放在列后面称为表级约束,使用场景:需要给多个字段添加某一个约束
-- name,email两个数据联合起来具有唯一性 --
create table t_vip(
id int,
name varchar(255) UNIQUE,
email varchar(255) unique
);
-- 上面的方式创建表格的话,能实现效果嘛?--
drop table t_vip;
create table t_vip(
id BIGINT,
name VARCHAR(255),
email varchar(255),
UNIQUE (name,email)
);
-- 使用两条数据来保证唯一性 --
insert into t_vip (name,email) values ('张三','zhangsan@163.com');
insert into t_vip (name,email) values ('李四','zhangsan@163.com');
-- 插入重复的数据报什么错误呢 ---
insert into t_vip (name,email) values ('张三','zhangsan@163.com');
-- 1062 - Duplicate entry '张三-zhangsan@163.com' for key 't_vip.name'--
主键约束:primary key(简称pk),既不能为空,也不能重复。
- 主键值是每一行记录的唯一标识,类似于身份证号用来标识一个唯一的值。
- 没有主键的表默认为无效的表。
- 表级约束做复合主键。复合主键不建议使用。
- 主键值建议使用int bigint char等类型,一般都是定长的。
- 不建议使用业务主键,如果业务发生变动,可能会影响到业务主键。
- 主键值可以采用auto_increment自增,从1开始。
在mysql中如果一个字段被unique和not null同时约束的话,那么这个字段就变成主键字段了。
外键约束:foreign key(简称fk)
子表:添加外键约束的表,students学生表
父表:被约束的表。classes课程表
外键约束只能添加父表中的内容,不能添加不存在的元素。删除的时候先删除子表再删除父表。
外键值可以为空吗?可以。被引用的字段必须是主键吗?不一定是主键,但是必须具有唯一性的约束
检查约束:check(msyql不支持,oracle支持)
xxx.sql文件就是sql脚本文件,其中蕴含了大量的sql语句,当我们运行这个sql文件的时候,其中所有的sql语句都会执行。在mysql中执行sql脚本文件,我们使用source命令后面跟上sql脚本文件的绝对路径
source c:\\xxx.sql