mysql常见六大约束

DDL语言

常见约束:
**约束的含义**:
一种限制,用于限制表中的数据,为了保证表中的数据的准确性和可靠性
**分类:** 六大约束
		1. NOT NULL :非空约束,用于保证该字段的值不能为空
		比如姓名,学号等
		2. DEFAULT :默认约束,用于保证该字段有默认值
		比如性别
		3. PRIMARY KEY :主键约束,用于保证该字段的值具有唯一性,并且非空
		比如学号,员工编号等
		4. UNIQUE : 唯一约束,用于保证该字段的值具有唯一性,可以为空
		比如座位号
		5.CHECK:检查约束【mysql中不支持,sql语法支持,语法不报错,但是没效果】
		比如年龄、性别,可以设置一个范围
		6.FOREIGN	KEY :外键约束,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
		在从表中添加外键约束,用于引用主表中某列的值
		比如学生表的专业编号,员工表的部门编号,员工表的工种编号

添加约束的时机:
1.创建表时
2.修改表时

约束的添加分类:
1.列级约束:
六大约束 语法上都支持,但外键约束没有效果

2.表级约束:
除了非空、默认。其他的都支持

3.表级约束和列级约束的区别对比
在这里插入图片描述

一、创建表时添加约束

1.添加列级约束

语法:
直接在字段名和类型后面追加 约束类型即可。
只支持:主键、非空、默认、唯一 四种约束

案例:

#创建数据库
CREATE DATABASE students;
#进入数据库
USE students;

#创建表
#创建专业信息表				
CREATE TABLE major(
		ID INT PRIMARY KEY,
		majorName	 VARCHAR(20)
		);
#创建学生表
CREATE TABLE stuinfo(
				id INT PRIMARY KEY,#主键
				stuName		VARCHAR(20)	NOT NULL, #非空
				sex 	CHAR(1) CHECK(sex=OR sex=),#检查约束,对mysql没效果,了解写法
				seat INT UNIQUE,#唯一约束
				age INT DEFAULT 	18,#默认约束
				marjorID INT REFERENCES major(id) #添加外键 FOREIGN KEY	外键约束在列级约束中不支持
				);

#查看表信息
desc stuinfo
#查看statuinfo表中所有的索引,包括主键,外键,唯一
show INDEX from stuinfo

2.添加表级约束
	语法:
			在各个字段的最下面,添加:
			【CONSTRAINT 自定义约束名字】 约束类型 (字段名)
	注意:
			1.CONSTRAINT 改名,对主键无效,默认为 PRIMARY
			2.也可以不写	【CONSTRAINT 自定义约束名字】 ,则约束名字默认为字段名

案例:

#创建表
#创建专业信息表				
CREATE TABLE major2(
		ID INT PRIMARY KEY,
		majorName	 VARCHAR(20)
		);
#创建学生表
CREATE TABLE stuinfo2(
				id INT ,
				stuName		VARCHAR(20),
				sex 	CHAR(1),
				seat INT ,
				age INT ,
				marjorID INT,
				CONSTRAINT pk  PRIMARY KEY(id),#添加表级约束,主键,mysql中主键改名不生效,名字永为默认名 PRIMARY
				CONSTRAINT uq  UNIQUE(seat),#唯一键
				CONSTRAINT ck  CHECK(sex='男' OR sex='女'), #检查约束,mysql不支持
				CONSTRAINT fk_stuinfo_major2 FOREIGN KEY(marjorID) REFERENCES major2(ID) #外键
				);

#查看表信息
desc stuinfo2
#查看statuinfo表中所有的索引,包括主键,外键,唯一
show INDEX from stuinfo2

总结:何时用列级约束,何时用表级约束

通用的写法:
CREATE TABLE IF NOT EXISTS stuinfo(
				id INT PRIMARY KEY,
				stuname  VARCHAR(20) NOT NULL,
				sex CHAR(1),
				age INT DEFAULT 18,
				seat INT UNIQUE,
				majorid INT,
				constraint fk FOREIGN KEY(majorid) REFERENCES major(ID)
);
面试常见问题:

①主键约束和唯一约束的大对比:
在这里插入图片描述
②外键的特点:

1.要求在从表设置外键关系
2.从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
3.主表的关联列必须是一个key(一般是主键或唯一)
4.插入数据时,先插入主表的数据,再插入从表
	删除数据时,先删除从表,再删除主表

两种删除方式了解即可
在这里插入图片描述

二、修改表时 添加约束

1.添加列级约束
ALTER TABLE	表名 MODIFY COLUMN 字段名 字段类型	新约束;
2.添加表级约束
ALTER	TABLE 表名	addCONSTRAINT 约束名】 约束类型(字段名)	【外键的引用】

创建测试环境

drop TABLE if exists	stuinfo10;
CREATE TABLE stuinfo10(
				id INT ,
				stuName		VARCHAR(20),
				sex 	CHAR(1),
				seat INT ,
				age INT ,
				marjorID INT
				)

2.1.添加非空约束

ALTER TABLE stuinfo10 MODIFY COLUMN stuname VARCHAR(20) NOT NULL;

2.2.添加默认约束

ALTER	TABLE stuinfo10 MODIFY COLUMN age INT DEFAULT 18;

2.3.添加主键

①列级约束
ALTER TABLE stuinfo10 MODIFY COLUMN id INT PRIMARY KEY;
②表级约束	
ALTER TABLE stuinfo10	ADD	PRIMARY KEY(id);

2.4.添加唯一

	①列级约束
	ALTER TABLE stuinfo10 MODIFY COLUMN seat INT UNIQUE;
	②表级约束
	ALTER TABLE stuinfo10 ADD UNIQUE(seat);

2.5.添加外键,【CONSTRAINT 自定义名称可以省略】

ALTER TABLE stuinfo10 ADDCONSTRAINT fk_stauinfo_major】 FOREIGN KEY(majorid) REFERENCES major(id);

三、修改表时删除约束

1.删除非空约束

ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型  NULL;
#举例
ALTER TABLE stuinfo10 MODIFY COLUMN stuname VARCHAR(20)  NULL;

2.删除默认约束

ALTER TABLE stuinfo10 MODIFY COLUMN age INT;

3.删除主键

	ALTER TABLE 表名 DROP PRIMARY KEY;

4.删除唯一

ALTER TABLE stuinfo10 DROP UNIQUE(seat);

5.删除外键约束

ALTER TABLE stuinfo10 DROP FOREIGN KEY 外键的名称
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值