小徐帶你瞭解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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章