小徐带你了解Mysql常见的约束的操作

常见的约束

含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性。

常见约束分类:六大分类 重点

	not	null:非空,用于保证该字段的值不能为空,比如姓名,学号等。

	default:默认,用于保证该字段有默认值。比如性别

	primary	key:主键,用于保证该字段的值具有唯一性,并且非空。比如学号,员工编号。

	unique:唯一,用于保证该字段的值具有唯一性,可以为空。比如:座位号。

	check:检查约束(mysql中不支持),比如年龄,性别。

	foreign		key:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列,
	
    	在从表中添加外键约束,用于引用主表中某列的值,
    	
    	比如:学生表的专业编号,员工表的部门编号,员工表的工种编号。

添加约束的时机:

一:创建表时,

二:修改表时

约束的添加分类:

列级约束:
		六大约束语法都支持,但外键约束没有效果。
		
表级约束:
		除了非空,默认,其他的都支持。

primary key(主键)和unique(唯一)的区别

在这里插入图片描述
在这里插入图片描述

外键的特点 重点

一:要求在从表设置外键关系

二:从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求。

三:主表的关联列必须是一个key(一般是主键或唯一)

四:插入数据时,先插入主表,再插入从表,删除数据时,先删除从表,再删除主表

create table	表名(

	字段名		字段类型		列级约束,

	字段名		字段类型,

	表级约束

);

一:创建表时添加约束

**语法:**直接在字段名或类型后面追加,约束类型即可。

1:添加列级约束

create	table	stuinfo(
	id	int	primary key, #主键
	stuName	varchar(20) not null, #非空
	gender	char(1) check(gender='男' or gender='女'), #检查
	seat int unique, #唯一
	age	int	default 18, #默认约束
	majorId	int	references	major(id) #外键
	);
create table major(
	id int primary key,
	majorName cahrchar(20)
	);
	desc stuinfo;

查看sutinfo中的所有约束,包括主键,外键,唯一

show	index	from stuinfo;

二:添加表级约束

语法:

在各个字段的最下面

【constraint		约束名】	约束类型(字段名)
DROP TABLE
IF
	EXISTS stuinfo;
	
	
CREATE TABLE stuinfo (
	id INT,
	stuName VARCHAR ( 25 ),
	gender CHAR ( 1 ),
	seat INT,
	age INT,
	majorId INT,
	CONSTRAINT pk PRIMARY KEY ( id ),#主键
	CONSTRAINT uq UNIQUE ( seat ),#唯一键
	CONSTRAINT ck CHECK ( gender = '男' OR gender = '女' ),#检查
	CONSTRAINT fk_stuinfo_major FOREIGN KEY ( majorId ) REFERENCES major ( id ) #外键

);
CREATE TABLE stuinfo (
	id INT,
	stuName VARCHAR ( 25 ),
	gender CHAR ( 1 ),
	seat INT,
	age INT,
	majorId INT,
	 PRIMARY KEY ( id ),#主键
	 UNIQUE ( seat ),#唯一键
	 CHECK ( gender = '男' OR gender = '女' ),#检查
	 FOREIGN KEY ( majorId ) REFERENCES major ( id ) #外键
);

SHOW INDEX FROM stuinfo;

通用的写法:

CREATE TABLE
IF
	NOT EXISTS tuinfo (
		id INT PRIMARY KEY,
		stuName VARCHAR ( 25 ) NOT NULL,
		sex CHAR ( 1 ),
		age INT DEFAULT 18,
		majorId INT,
	CONSTRAINT fk_tuinfo_major FOREIGN KEY ( majorId ) REFERENCES major ( id ) 
	);

二:修改表时添加约束

语法:

1:添加的列级约束

ALTER	TABLE	表名	 MODIFY COLUMN	字段名	字段类型	新约束;

2:添加表级约束

ALTER TABLE	表名	ADDconstraint 约束名】	约束类型(字段名)	【外键的引用】;

修改表时添加约束

DROP TABLE
IF
	NOT EXISTS stuinfo;
	
CREATE TABLE STUINFO ( id INT, stuName VARCHAR ( 20 ), gender CHAR ( 1 ), seat INT, age INT, majorId INT );

DESC stuinfo;#添加非空约束

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

约束练习题

添加非空约束

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

添加默认约束

ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;

添加主键约束

# 列级约束
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;

#表级约束
ALTER TABLE stuinfo ADD PRIMARY KEY ( id );

添加唯一约束

#列级约束
ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;
#表级约束
ALTER TABLE stuinfo ADD UNIQUE ( seat );

添加外键

ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY ( majorId ) REFERENCES major ( id );

三:修改表时删除约束

一:删除非空约束

ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR ( 25 ) NULL;

删除默认约束

ALTER TABLE stuinfo MODIFY COLUMN age INT;

删除主键

ALTER TABLE stuinfo DROP PRIMARY KEY;

删除唯一键

ALTER TABLE stuinfo DROP INDEX seat;

删除外键

ALTER TABLE stuinfo DROP FOREIGN KEY majorId;

show	index from stuinfo;

常见的约束练习

向emp2的id列中添加primary key的约束(my_emp_id_pk)

alter table emp2 modify column id int primary key;
alter table emp2 add constraint my_emp_id_pk primary key(id);

向表dept2的id列中添加primary key 约束(my_dept_id_pk)

alter table dept2 add constraint my_dept_id_pk primary key(id);

在这里插入图片描述

标识列:又称为自增长列

含义:可以不用手动的插入值,系统提供默认的序列值

标识列的特点:

一:标识列必须和主键搭配吗?不一定,但要求是一个key

二:一个表可以有几个标识列?至多一个

三:标识列的类型只能是数值型

四:标识列可以通过 	set	auto_increment=3;设置步长,

可以通过手动设置值,设置起始值。

创建表时设置标识列

drop table if exists tab_identity;

create table tab_identity(	
	id	int	primary key auto_increment,
	name varchar(20)
	);

二:修改表时设置标识列

alter	table tab_identity mdify column id int primary key auto_increment;

三:修改表时删除标识列

alter	table tab_identity modify column id int;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章