SQL语句详解四-DQL(数据查询语言-约束)

约束

  • 概述:对表中的数据进行限定,保证数据的正确性,有效性和完整性。

约束分类

约束关键字约束意思
primary key主键约束
not null非空约束
unique唯一约束
foreign key外键约束

例子:sname varchar(40) not null, – 代表 sname 这个字段不能为 NULL


非空约束

  • 概述:NOT NULL ,某一列的值不能为 NULL

  • 语法

    • 创建表的时候添加 非空约束
    CREATE TABLE stu(
    	id INT,
        name VARCHAR(40) NOT NULL				-- name 字段非空
    );
    
    • 创建完表后,添加 非空约束
    ALTER TABLE stu MODIFY name VARCHAR(40) NOT NULL;
    
    • 删除 name 的 非空约束
    ALTER TABLE stu MODIFY name VARCHAR(40);
    
  • 示例代码

    -- 创建数据库,并指定字符集
    CREATE DATABASE test CHARACTER SET utf8;
    
    -- 使用此数据库
    USE test;
    
    -- 创建表 a 时候,id 字段添加非空约束
    CREATE TABLE a(
    	id INT NOT NULL,
    	NAME VARCHAR(40)
    );
    
    -- 复制表 a ,新的表名是 b
    CREATE TABLE b LIKE a;
    
    -- 查询表结构
    DESC a;				-- 可以看到在 Null一列显示 NO(不可为空)
    DESC b;				-- 可以看到在 Null一列显示 NO
    
    -- 删除 b 表中非空约束
    ALTER TABLE b MODIFY id INT;
    
    DESC b;				-- 执行完删除后,才执行查询,显示为 YES
    
    -- b 表中 name 添加非空约束
    ALTER TABLE b MODIFY NAME VARCHAR(40) NOT NULL;
    
    DESC b;				-- 执行完删除后,执行查询,name 显示为 NO
    
    -- 使用完删除 数据库即可
    DROP DATABASE test;
    

唯一约束

  • 概述:UNIQUE ,某一列值唯一,不能重复

    • 唯一约束可以有 NULL 值,但是只能有一条记录为 NULL
  • 语法

    • 创建表时,添加 唯一约束
    CREATE TABLE stu(
    	id INT,
        phone_number VARCHAR(11) UNIQUE		-- 手机号唯一 
    );
    
    • 创建完表后,添加 唯一约束
    ALTER TABLE stu MODIFY phone_number VARCHAR(11) UNIQUE;
    
    • 删除 唯一约束
    ALTER TABLE stu DROP INDEX phone_number;
    
  • 示例代码

    -- 创建数据库,并指定字符集
    CREATE DATABASE test CHARACTER SET utf8;
    
    -- 使用此数据库
    USE test;
    
    -- 创建表 a ,并添加唯一约束
    CREATE TABLE a(
    	id INT,
    	phone_number VARCHAR(11) UNIQUE
    );
    
    -- 查看 a 表结构
    DESC a;				-- phone_number key一列为 UNI
    
    -- 删除 a 表中的唯一约束
    ALTER TABLE a DROP INDEX phone_number;
    
    DESC a;				-- phone_number key一列为 空白
    
    -- 给 a 表 id 添加唯一约束
    ALTER TABLE a MODIFY id INT UNIQUE;
    
    DESC a;				-- id key一列为 UNI
    
    -- 删除数据库
    DROP DATABASE test;
    

主键约束

  • 概述:PRIMARY KEY ,某一列设置为主键(非空且唯一)

    • 一张表只能有一个字段为主键
    • 主键是表中记录的唯一标识(例如:身份证号)
  • 语法

    • 创建表时,添加 主键约束
    CREATE TABLE stu(
    	id int primary key,					-- 给 id 添加主键约束
        name VARCHAR(40)
    );
    
    • 创建完表后,添加 主键约束
    ALTER TABLE stu MODIFY id INT PRIMARY KEY;
    
    • 删除 主键约束
    ALTER TABLE stu DROP PRIMARY KEY;
    
  • 示例代码

    -- 创建数据库,并指定字符集
    CREATE DATABASE test CHARACTER SET utf8;
    
    -- 使用此数据库
    USE test;
    
    -- 创建表 a 时候,id 字段添加主键约束
    CREATE TABLE a(
    	id INT PRIMARY KEY,
    	NAME VARCHAR(40)
    );
    
    -- 复制表a ,新表名为 b
    CREATE TABLE b LIKE a;
    
    -- 查询表的结构
    DESC a;				-- 可以看到id,key这一列显示 PRI,NULL 为 NO
    DESC b;				-- 可以看到id,key这一列显示 PRI,NULL 为 NO
    
    -- 删除 b 表中的主键约束
    ALTER TABLE b DROP PRIMARY KEY;
    
    DESC b;
    
    -- 添加 b 表中的主键约束
    ALTER TABLE b MODIFY id INT PRIMARY KEY;
    
    DESC b;
    
    -- 使用完,删除数据库
    DROP DATABASE test;
    
自动增长
  • 概述:如果某一列是数值类型,使用 AUTO_INCREMENT 完成值的自动增长

  • 语法

    • 创建表时,添加主键约束,并且完成主键自增长
    CREATE TABLE stu(
    	id INT PRIMARY KEY AUTO_INCREMENT,		-- 主键,自增长
        name VARCHAR(40)
    );
    
    • 创建完后,添加自动增长
    ALTER TABLE stu MODIFY id AUTO_INCREMENT;
    
    • 删除自动增长
    ALTER TABLE stu MODIFY id INT;
    
  • 示例代码

    -- 创建数据库,并指定字符集
    CREATE DATABASE test CHARACTER SET utf8;
    
    -- 使用此数据库
    USE test;
    
    -- 创建表 a ,并添加主键约束和自增长
    CREATE TABLE a(
    	id INT PRIMARY KEY AUTO_INCREMENT,
    	phone_number VARCHAR(11) 
    );
    
    -- 查看 a 表结构
    DESC a;				-- id Extra一列为 auto_increment
    
    -- 删除 a 表中的自动增长
    ALTER TABLE a MODIFY id INT;
    
    DESC a;				-- id Extra一列为 空白
    
    -- 给 a 表 id 添加 自动增长
    ALTER TABLE a MODIFY id INT AUTO_INCREMENT;
    
    DESC a;				-- id Extra一列为 auto_increment
    
    -- 删除数据库
    DROP DATABASE test;
    

外键约束

  • 概述:FOREIGN KEY ,让表和表之间产生关系,从而保证数据的正确性

  • 语法

    • 创建表时,添加外键约束
    CREATE TABLE stu(
    	...
        外键列, 
        CONSTRAINT 外键名称 FOREIGN KEY (外键列名称) REFERENCES 主表名称(主表列名称)
    );
    
    • 创建完表后,添加外键
    ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称 (主表列名称)
    • 删除外键
    ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
    
  • 示例代码

    
    -- 创建数据库,并指定字符集
    CREATE DATABASE test CHARACTER SET utf8;
    
    -- 使用此数据库
    USE test;
    
    -- 创建 部门 表
    CREATE TABLE dept(
    	deptId INT PRIMARY KEY,		-- 部门表号
    	NAME VARCHAR(40)		-- 部门名字
    );
    
    -- 创建员工表
    CREATE TABLE employ(	
    	id INT PRIMARY KEY,	     --	员工编号	
    	ename VARCHAR(40),           -- 员工名字
    	dept_id INT,		     -- 员工部门编号
    	CONSTRAINT emp_dept FOREIGN KEY (dept_id) REFERENCES dept(deptId)
    );
    
    -- 看下述步骤查看是否有外键
    
    
    -- 删除 员工表外键
    ALTER TABLE employ DROP FOREIGN KEY emp_dept;
    
    -- 查看
    
    -- 添加 员工表外键
    ALTER TABLE employ ADD CONSTRAINT emp_dept FOREIGN KEY (dept_id) REFERENCES dept(deptId);
    
    -- 查看
    
    -- 删除数据库
    DROP DATABASE test;
    
查看外键
  • 删除外键后

  • 添加外键后

  • 32
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值