SQL约束语法

SQL约束语法约束作用 对表中的数据进行限定 保证数据的正确性 有效性 完整性 约束分类 约束说明 PRIMARYKEY 主键约束 PRIMARYKEYAU INCREMENT 主键 自动增长 UNIQUE 唯一约束 NOTNULL 非空约束 FOREIGNKEY 外键约束 FOREIGNKEYON 外键级联更新 FOREIGNKEYON 外键级联删除主键约束 主键约束特点主

约束

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

约束分类:
约束 说明
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, -- id NAME VARCHAR(20) NOT NULL -- 姓名 ); -- 创建orderlist订单表 CREATE TABLE orderlist( id INT PRIMARY KEY AUTO_INCREMENT, -- id number 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); 
外键级联更新和级联删除:

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

语法格式:

级联更新: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; 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/205559.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午5:44
下一篇 2026年3月19日 下午5:45


相关推荐

  • MD5加密 MD5加盐

    MD5加密 MD5加盐MD5 算法的原理可简要的叙述为 MD5 码以 512 位分组来处理输入的信息 且每一分组又被划分为 16 个 32 位子分组 经过了一系列的处理后 算法的输出由四个 32 位分组组成 将这四个 32 位分组级联后将生成一个 128 位散列值 一 为什么要用哈希函数来加密密码 1 如果开发者需要保存密码 比如网站用户的密码 要考虑如何保护这些密码数据 网站用户密码的泄露是一件非常严重的事情 容易引起

    2026年3月18日
    1
  • 不是单组分组函数

    不是单组分组函数问题:一:SELECT tablespace_name, SUM(bytes) freeFROM dba_free_space不是单组分组函数原因: 1、如果程序中使用了分组函数,则有两种情况可以使用:程序中存在group by,并指定了分组条件,这样可以将分组条件一起查询出来改为:  SELECT tablespace_name, SUM(bytes) freeFROM dba_free_spa…

    2022年6月30日
    32
  • Vue(27)vue-codemirror实现在线代码编译器「建议收藏」

    Vue(27)vue-codemirror实现在线代码编译器「建议收藏」前言如果我们想在Web端实现在线代码编译的效果,那么需要使用组件vue-codemirror,他是将CodeMirror进行了再次封装支持代码高亮62种主题颜色,例如monokai等等支持js

    2022年7月29日
    46
  • .gitignore文件不起作用的解决方案

    .gitignore文件不起作用的解决方案gitignore 文件不起作用的解决方案觉得有用的话 欢迎一起讨论相互学习 FollowMe 转载地址 https www cnblogs com liugp p 10399282 html 在 Studio 里使用 Git 管理代码的过程中 可以修改 gitignore 文件中的标示的方法来忽略开发者想忽略掉的文件或目录 如果没有 gitignore 文件 可以自己手工创建 在 gitigno

    2026年3月26日
    3
  • 理解TIME_WAIT,彻底弄清解决TCP: time wait bucket table overflow

    理解TIME_WAIT,彻底弄清解决TCP: time wait bucket table overflow一直对这个问题知其然而不知其所以然,这些日子再次碰到,看了很多的资料,彻底解决一下,呵呵,先上个图,所有理解围绕着此图来看,此图描述了四次挥手的整个过程:650)this.width=650;”title=”QQ截图20160425180531.png”alt=”wKiom1cd6_mwEZr2AACU62IiAp4333.png”src=”http://s5.51cto.com/wyfs

    2022年5月12日
    53
  • Flutter实现微信支付和iOS IAP支付

    Flutter实现微信支付和iOS IAP支付Flutter 支付微信支付 iOSIAP 应用内支付测试 IAP 中断购买的测试公司近期将收费的功能排期了 由于项目做的是线上教育 提供的服务属于虚拟物品 根据 iOS 官方的规定 虚拟物品交易只能使用 iOS 应用内支付 其他类似微信 支付宝官方都是明文规定不允许存在的 注 虚拟物品才有此规定 且 iOS 官方收税 30 而有实体物品交易的 官方允许在提供应用内支付的前提下 提供其他支付方式供用户选择 结合相关平台规定 我们最终确定支付方式为 Android 端使用微信支付 iOS 使用 IAP 应用内支付 微信支付

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号