欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > 数据库 >内容正文

数据库

SQL约束语法

发布时间:2025/3/15 数据库 51 豆豆
生活随笔 收集整理的这篇文章主要介绍了 SQL约束语法 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

约束

作用:对表中的数据进行限定,保证数据的正确性、有效性、完整性!

约束分类:
约束说明
PRIMARY KEY主键约束
PRIMARY KEY AUTO_INCREMENT主键、自动增长
UNIQUE唯一约束
NOT NULL非空约束
FOREIGN KEY外键约束
FOREIGN KEY ON UPDATE CASCADE外键级联更新
FOREIGN KEY ON DELETE CASCADE外键级联删除
主键约束:

特点:

  • 主键约束包含:非空和唯一两个功能
  • 一张表只能有一个列作为主键
  • 主键一般用于表中数据的唯一标识

语法:

含义SQL语句
在创建表的时候给字段添加主键字段名 字段类型 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 VALUES1,'露娜',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 student(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(30),age TINYINT );-- 添加数据 INSERT INTO student VALUES (NULL,'韩信',99); INSERT INTO student VALUES (NULL,'李白',98);-- 删除主键自增约束 ALTER TABLE student MODIFY id INT;-- 建表后单独添加主键自增约束 ALTER TABLE student MODIFY id INT AUTO_INCREMENT; 唯一约束作用:使这个字段的值不能够重复
唯一约束的格式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
    解决方式:使用外键约束

-- 创建表的时候添加外键约束 -- 格式 CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主表主键列名) -- 创建用户和订单表 CREATE TABLE user(id INT PRIMARY KEY AUTO_INCREMENT, -- idNAME VARCHAR(20) NOT NULL -- 姓名 );-- 创建orderlist订单表 CREATE TABLE orderlist(id INT PRIMARY KEY AUTO_INCREMENT, -- idnumber VARCHAR(20) NOT NULL, -- 订单编号uid INT, -- 订单所属用户CONSTRAINT ou_wjys FOREIGN KEY (uid) REFERENCES USER(id) );-- 添加USER表数据 INSERT INTO USER VALUES (NULL,'韩信'),(NULL,'李白'),(NULL,'露娜');-- 添加orderlist表数据 INSERT INTO orderlist VALUES (NULL,'001',1),(NULL,'001',1), (NULL,'002',2),(NULL,'002',2), (NULL,'003',3),(NULL,'003',3);-- 查询数据 SELECT * FROM USER; SELECT * FROM orderlist;-- 查询表结构 DESC USER; DESC orderlist;-- 删除外键 ALTER TABLE orderlist DROP FOREIGN KEY ou_wjys;-- 创建表后单独添加外键约束 ALTER TABLE orderlist ADD CONSTRAINT ou_wjys FOREIGN KEY (uid) REFERENCES USER(id);
外键级联更新和级联删除:

什么是级联更新和级联删除

把user用户表中的某个用户删,该用户所有的订单也随之被删除
把user用户表中的某个用户id修改,订单表中该用户所属的订单用户编号也随之修改

语法格式:

级联更新:ON UPDATE CASCADE
级联删除:ON DELETE CASCADE
级联更新和级联删除:ON UPDATE CASCADE ON DELETE CASCADE

-- 添加级联更新 ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主键列名) ON UPDATE CASCADE; -- 添加级联删除 ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主键列名) ON DELETE CASCADE; -- 添加级联更新和级联删除 ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主键列名) 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;

总结

以上是生活随笔为你收集整理的SQL约束语法的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。