MySQL的约束

MySQL约束的介绍

什么是约束,就是限制,限制我们表中的数据,保证添加到数据表中的数据准确和可靠性!凡是不符合约束的数据,插入时就会失败
约束的分类:
	1、not null:非空约束,保证字段的值不能为空,比如学生信息表中的“学号”、“姓名”等都是不能为空的
	2、default:默认约束,保证字段总会有值,即时没有插入值,都会有默认值
	3、primary key:主键约束,同时保证唯一性和非空
	4、unique:唯一,保证唯一性但可以为空,比如座位号
	5、check:检查性约束【mysql不支持,语法不报错,但无效】,SQLserver和Oracle数据库可以用
					例如性别字段,只能为男或女,如果插入的非这两种情况,则插入不进去
	6、foreign key:外键约束,用于限制两个表的关系,保证从表该字段的值必须来自于主表相关联的字段的值,不能无中生有(外键约束是在从表里面,外键必须是主表里的键)
		比如:员工信息表中的部门编号的值,就必须有外键约束
什么时候添加约束:
	1、创建表的时候添加
	2、修改表的时候添加
添加约束的分类:
	1、列表约束
			6种约束都可以写,语法都支持,不报错,但外键约束写了等于白写
	2、表级约束:
			非空、默认不支持,其他都可以

1、创建表中添加约束

1、列级约束
	示例:创建一个学生表
		create table students (
				id int primary key,		--主键约束
				s_name varchar(100) not null,		--非空约束
				s_sex char(1) not null default '女' check(s_sex='男' or s_sex='女') ,		--一个字段后可以跟多个约束,检查性约束和非空约束和默认约束
				s_birthday date,
				c_id int references courses(id)			--外键约束,关联的外键表为凑course	列级别的外键约束不生效,外键约束只能用表级约束才能生效
		)
		create table courses (
				id int primary key,
				c_name varchar(20) not null
		)
2、表级约束
	示例:
		create table students (
				id int,
				s_name varchar(100) ,
				s_sex char(1) ,
				s_birthday date,
				c_id int,
				#表级约束
				constraint pk parimary key(id),		--主键约束,pk是起的名字,后面类似;constraint pk 可以省略,mysql会自动默认一个名字
				constraint uq uniqe(s_name),		--唯一性约束
				constraint ck check(s_sex='男' or s_sex='女'),		--查询约束
				constraint fk_students_courses foreign key(c_id) references courses(id)
		)
	表级约束的语法:
		【constraint 约束名字】 约束类型(字段名称) 【额外的东西,如外键】
	一般情况下MySQL的约束:
		主键,非空,唯一性,默认等这些写在列级
		外键约束写在表级

2、主键、唯一键的区别和外键特点

主键和唯一约束键的区别:
	1、主键约束:同时保证唯一和非空
			在同一个表中主键只能有一个
	2、唯一约束:保证唯一但是可以为空
			在同一个表中唯一约束有很多个
外键的特点:
		1、要求在从表上设置外键约束
		2、从表上的列和主表上的对应的关联列的数据类型必须一致,含义意义一致
		3、主表上的关联列必须是一个key,一般是主键,很少时候也可以是唯一键
		4、插入数据时,先插入主表,在插入从表;删除的时候,要先删除从表记录,再删除主表记录

3、MySQL修改表时添加和删除约束

假设有一个students表,没有任何约束
1、非空约束:
	alter table students modify column s_name varchar(10) not null;		--添加分空约束
	alter table students modify column s_name varchar(10);		--删除非空约束
2、添加默认约束:
	alter table students modify column s_age int default 18;
	alter table students modify column s_age int;			--删除默认约束
3、添加主键:
	alter table students modify column id int primary key;	--	添加主键约束
	alter table students drop primary key;			--删除主键约束
4、添加唯一键:
	alter table students modify column s_name varchar(10) unique;		--添加唯一键
	alter table students drop index s_name;			--删除唯一约束
5、外键:
	alter table students add foreign key(c_id) references courses(id);
	alter table students drop foreign key students_ibfk_1;		--删除外键约束语法:drop foreign key+约束名称(需要先查到约束名称)

4、MySQL标识列

标识列:有叫自增长列,可以不用插入值,MySQL自动提供默认的序列值
创建表中添加自增长列:
	create table t_identity(
			id int primary key auto_increment,
			iname varchar(10)
	)
总结:
	1、自增长列必须和键(一般是主键)搭配
	2、一个表中有且只能有一个自增长列
	3、自增长列的类型只能是数值型,一般情况用int
	4、自增长列可以设置步长(set auto_increment = 3),也可以手动插入一个数值改变起始值
修改表的时候添加自增长列:
	alter table t_identity modify column id int auto_increment;
删除自增长列:
	alter table t_identity modify column id int;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值