MySQL学习笔记7

MySQL学习笔记7

#常见约束
/*
含义:一种限制,用于限制表中的数据,为了保证表中的数据准确性和可靠性


分类:六大约束
	not null 非空保证该字段的值不能为空
	比如姓名、学号等
	default :默认,用于保证该字段有默认值
	比如性别
	primary key:主键,用于保证该字段的值具有唯一性,并且非空
	比如学号,编号
	unique :唯一,用于保证该字段的值具有唯一性可以为空
	比如座位号
	check:检查约束【mysql中不支持】
	foreign key 外键,用于限制两个表的关系,用于保证该字段的值必须
	来自主表的关联列的值
		在从表添加外键约束,用于引用主表中某列
		比如学生表专业编号,员工表部门标号,员工表工种编号
		
添加约束时机:
	1、创建表
	2、修改表
约束的添加分类
	列级约束:
		六大约束语法支持,但外键约束没有效果
		
	
	
	表级约束:
		除了非空默认其他都支持
主键和唯一的大对比:
			保证唯一性     是否允许为空  一个表中可以有多少个  是否允许组合
主键				可	否		最多为1			是,不推荐
唯一				可	可		可以为多个		是,不推荐

外键:
	1、从表设置外键关系
	2、从表的外键列的类型和主表的关联列的类型要求一致或者兼容
	3、主表关联列必须是一个key,一般是主键或者唯一 
	4、插入数据是,先插入主表,在插入从表 
	删除数据时则相反
		
	
*/

CREATE TABLE 表名(
	字段名	字段类型 列级约束
	字段名....
	表级约束

)


#一、创建表时添加约束
#1、添加列级约束
/*
语法:
直接在字段名和类型后面增加 约束类型即可

只支持:默认非空主键唯一


*/

CREATE DATABASE students;
USE students;
CREATE TABLE stuinfo(
	id INT PRIMARY KEY,
	stu_Name VARCHAR(10),
	gender CHAR(1) CHECK(gender='nan' OR gender = 'nv'),
	seat INT UNIQUE,
	age INT DEFAULT 18,
	major_id INT
);
CREATE TABLE major(
	id INT PRIMARY KEY,
	majorName VARCHAR(20)

);
DESC stuinfo;

SHOW INDEX FROM stuinfo;
#2.添加表级约束
/*
语法:在各个字段的最下面

【constraint 约束名】约束类型(字段名)

*/
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
	id INT, 
	stu_Name VARCHAR(20),
	gender CHAR(1),
	seat INT ,
	age INT ,
	major_id INT,
	
	CONSTRAINT pk PRIMARY KEY(id),
	CONSTRAINT uq UNIQUE(seat),
	CONSTRAINT ck CHECK(gender = 'nan' OR gender = '女'),
	CONSTRAINT fk_stuinfo_major FOREIGN KEY(major_id) REFERENCES major(id)
);
SHOW INDEX FROM stuinfo;


#通用写法
CREATE TABLE IF NOT EXISTS stuinfo(
	id INT PRIMARY KEY,
	stu_Name VARCHAR(20) NOT NULL,
	gender CHAR(1),
	seat INT ,
	age INT ,
	major_id INT,
	CONSTRAINT fk_stuinfo_major FOREIGN KEY(major_id) REFERENCES major(id)

)

#二、修改表时添加约束
/*
alter table 表名 modify column 字段名 字段类型 新约束;

alter table 表名 add 约束类型(字段名)

*/
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE IF NOT EXISTS stuinfo(
	id INT ,
	stu_Name VARCHAR(20),
	gender CHAR(1),
	seat INT ,
	age INT ,
	major_id INT
);
#1、添加非空约束
ALTER TABLE stuinfo MODIFY COLUMN stu_Name VARCHAR(20) NOT NULL;

#2、添加默认约束 
ALTER TABLE stuinfo MODIFY COLUMN stu_Name VARCHAR(20) DEFAULT 10;

#3、添加主键约束

#1.列级约束写法
ALTER TABLE stuinfo MODIFY COLUMN stu_Name VARCHAR(20) PRIMARY KEY;
#2.表级约束写法
ALTER TABLE stuinfo ADD PRIMARY KEY(id);

#4、添加唯一
#1.列级约束
ALTER TABLE stuinfo MODIFY COLUMN stu_Name VARCHAR(20) UNIQUE;
#2.表级约束
ALTER TABLE stuinfo ADD UNIQUE(id);

#5.添加外键
ALTER TABLE stuinfo ADD FOREIGN KEY(major_id) REFERENCES major(id);

#三、修改表时删除约束

#1.删除非空约束
ALTER TABLE stuinfo MODIFY COLUMN stu_Name VARCHAR(20) NULL;
#2.删除默认约束
ALTER TABLE stuinfo MODIFY COLUMN age INT;
#3.删除主键
ALTER TABLE stuinfo DROP PRIMARY KEY;

#4删除唯一
ALTER TABLE stuinfo DROP INDEX seat;
#5.删除外键

ALTER TABLE stuinfo DROP FOREIGN KEY(major_id);

#标识列
/*
又称为自增长列
含义:可以不用手动的插入值,体统提供默认的序列值
特点:
要求和key搭配
一个表可以有一个标识列
标识列类型只能是数值型
标识列可以通过 set auto_increment_increment 设置步长
也可以手动插入起始值
*/
DROP TABLE IF EXISTS tab_identuty;
CREATE TABLE tab_identuty(
	
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(20)
);

INSERT INTO tab_identuty VALUES(NULL,'xx');

SELECT *FROM tab_identuty;

#二、修改表时设置标识列
ALTER TABLE tab_identuty MODIFY COLUMN id INT PRIMARY KEY AUTO_INCREMENT;

#三、修改表时删除标识列
ALTER TABLE tab_identuty MODIFY COLUMN id INT PRIMARY KEY ;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值