SQL约束语法
约束
作用:对表中的数据进行限定,保证数据的正确性、有效性、完整性!
约束分类:
| PRIMARY KEY | 主键约束 |
| PRIMARY KEY AUTO_INCREMENT | 主键、自动增长 |
| UNIQUE | 唯一约束 |
| NOT NULL | 非空约束 |
| FOREIGN KEY | 外键约束 |
| FOREIGN KEY ON UPDATE CASCADE | 外键级联更新 |
| FOREIGN KEY ON DELETE CASCADE | 外键级联删除 |
主键约束:
特点:
- 主键约束包含:非空和唯一两个功能
- 一张表只能有一个列作为主键
- 主键一般用于表中数据的唯一标识
语法:
| 在创建表的时候给字段添加主键 | 字段名 字段类型 PRIMARY KEY |
| 在已有表中添加主键 | ALTER TABLE 表名 ADD PRIMARY KEY(字段名); |
| 删除主键 | ALTER TABLE 表名 DROP PRIMARY KEY; |
| 主键⾃增 | 字段名 字段类型 PRIMARY KEY AUTO_INCREMENT |
| 修改自增起始值 | ALTER TABLE 表名 AUTO_INCREMENT=起始值; |
演示:
-- 标准语法 CREATE TABLE 表名(列名 数据类型 PRIMARY KEY,列名 数据类型,... );-- 创建学生表,并加主键 CREATE TABLE student(id INT PRIMARY KEY,-- id是主键NAME VARCHAR(30),age TINYINT );-- 查询学生表详细信息 DESC student;-- 添加数据 INSERT INTO student VALUES(NULL,'韩信',99); -- 不能为空 INSERT INTO student VALUES(1,'韩信',99);-- 不能重复 INSERT INTO student VALUES(1,'露娜',98); INSERT INTO student VALUES(2,'李白',97);-- 删除主键 ALTER TABLE student DROP PRIMARY KEY;-- 建表以后单独添加主键 ALTER TABLE student MODIFY id INT PRIMARY KEY;主键自增:
- Mysql中的自增约束,必须配合键的约束一起用
- 如果删除某一行数据再添加一行,那id就会再删除的id的基础上加1
| 唯一约束的格式 | CREATE TABLE 表名 (字段名 字段类型, 字段名 字段类型 UNIQUE ); |
| 非空约束 | CREATE TABLE 表名 (字段名 字段类型,字段名 字段类 NOT NULL, ); |
| 默认值 | 作用:如果这个字段不设置值,就使用默认值。 |
| 默认值的格式 | CREATE TABLE 表名 (字段名 字段类型, DEFAULT 默认值); |
唯一约束:
唯一约束就是不让值重复,使用关键字UNIQUE
-- 唯一约束 标准语法 CREATE TABLE 表名(列名 数据类型 UNIQUE,列名 数据类型,... );-- 建表时添加唯一约束 CREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(30),age TINYINT UNIQUE );-- 添加数据 INSERT INTO student VALUES (NULL,'韩信',99); INSERT INTO student VALUES (NULL,'李白',99);-- 删除唯一约束 ALTER TABLE student DROP INDEX age;-- 建表后添加唯一约束,如果要约束的列已经有重复数据是添加不了的 ALTER TABLE student MODIFY age INT UNIQUE;非空约束:
-- 非空约束标准语法 CREATE TABLE 表名(列名 数据类型 NOT NULL,列名 数据类型,... );-- 创建表时添加非空约束 CREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20) NOT NULL, -- 给name添加非空约束age INT UNIQUE );-- 添加数据 INSERT INTO student VALUES (NULL,'韩信',99),(NULL,'李白',98);-- 删除非空约束 ALTER TABLE student MODIFY name VARCHAR(20);-- 创建表后单独添加非空约束,如果有已经存在的null值会提醒,但不报错,原来的null值会变空 ALTER TABLE student MODIFY name VARCHAR(20) NOT NULL;外键约束:
- 一个表中的某个字段引用其他表的主键,这个字段称为外键
- 主表:主键所在的表,约束别人的表,将数据给别人用
- 副表/从表:外键所在的表,被约束的表,使用别人的数据
作用:
作用就是让表和表之间产生关系,保证数据的准确性
为什么有外键约束:
表和表之间的数据有关联的时候,没有相关的数据约束无法保证数据的准确性!
什么时候用?
表和表之间有关联的时候呗,比如是用户和订单两个表之间
- 当我们在employee的dep_id里面输入不存在的部门,数据依然可以添加.但是并没有对应的部门,不能出现这种情况。employee的dep_id中的内容只能是department表中存在的id
需要达到目的:需要约束dep_id只能是department表中已经存在id
解决方式:使用外键约束
外键级联更新和级联删除:
什么是级联更新和级联删除
把user用户表中的某个用户删,该用户所有的订单也随之被删除
把user用户表中的某个用户id修改,订单表中该用户所属的订单用户编号也随之修改
语法格式:
级联更新:ON UPDATE CASCADE
级联删除:ON DELETE CASCADE
级联更新和级联删除:ON UPDATE CASCADE ON DELETE CASCADE
演示:
-- 添加级联更新和级联删除 ALTER TABLE orderlist ADD CONSTRAINT ou_wjys FOREIGN KEY (uid) REFERENCES USER(id) ON UPDATE CASCADE ON DELETE CASCADE; -- 将韩信这个用户的id改为9 UPDATE USER SET id = 9 WHERE id = 1 ;-- 将韩信这个用户删除 DELETE FROM USER WHERE id = 9;总结
- 上一篇: java 多线程两种方式_JAVA多线程
- 下一篇: mysql jar jdk1.6_Win