MySQL基础(五)

时间:2020-04-09 14:15:49   收藏:0   阅读:95

约束

概述

约束类型

有如下的六大约束:

需要注意的是,MySQL不支持check约束,但是可以使用check约束,没有任何效果。

分类

CREATE TABLE 表名(
	列名 字段类型 单列约束,
    列名 字段类型 单列约束,
    多列约束(列名1,列名2)
);
CREATE TABLE 表名(
	列名 字段类型 列级约束,
    列名 字段类型 列级约束,
    表级约束(列名1,列名2)
);

列级约束,六大约束都支持,但是外键约束没有效果。

表级约束,除了非空、默认约束,其他约束都支持。

创建表的时候添加列级约束

CREATE TABLE stu_info (
	id INT PRIMARY KEY,# 主键
	stu_name VARCHAR ( 255 ) NOT NULL,# 非空
	gender CHAR ( 1 ) CHECK (
	gender IN ( ‘男‘, ‘女‘ )),# 检查
	seat INT UNIQUE,# 唯一
	age INT DEFAULT 18 # 默认约束
);

创建表的时候添加表级约束

CREATE TABLE major ( 
	id INT PRIMARY KEY, 
	`name` VARCHAR ( 255 ) 
);

CREATE TABLE stu_info (
	id INT ,
	stu_name VARCHAR ( 255 ) not null ,
	gender CHAR ( 1 ) ,
	seat INT ,
	age INT DEFAULT 18,
	major_id int,
	CONSTRAINT pk_id PRIMARY KEY (id),
	CONSTRAINT uk_seat UNIQUE (seat) ,
	CONSTRAINT fk_marjor_id FOREIGN KEY (major_id) REFERENCES major(id)
);

主键和唯一的区别

保证唯一性 是否允许为空 一个表中可以有多少个 是否允许组合
主键 × 最多有1个 √,但是不推荐
唯一 可以有多个 √,但是不推荐

外键的特点

修改表时添加约束

语法:

# 添加列级约束
ALTER TABLE 表名 MODIFY COLUMN 列名 字段类型 新约束;
# 添加表级约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束类型 (字段名) [外键的引用];

应用示例:

CREATE TABLE major ( 
	id INT PRIMARY KEY, 
	`name` VARCHAR ( 255 ) 
);
CREATE TABLE stu_info (
	id INT ,
	stu_name VARCHAR ( 255 ) NOT NULL,# 非空
	gender CHAR ( 1 ) ,
	seat INT UNIQUE,# 唯一
	age INT ,
	major_id int
);
# 修改表时添加约束
ALTER TABLE stu_info MODIFY COLUMN id INT PRIMARY KEY; 
ALTER TABLE stu_info MODIFY COLUMN age INT DEFAULT 18; 
ALTER TABLE stu_info ADD CONSTRAINT fk_major_id FOREIGN KEY (major_id) REFERENCES major(id);

修改表时删除约束

CREATE TABLE major ( 
	id INT PRIMARY KEY, 
	`name` VARCHAR ( 255 ) 
);
CREATE TABLE stu_info (
	id INT PRIMARY KEY,
	stu_name VARCHAR ( 255 ) NOT NULL,# 非空
	gender CHAR ( 1 ) ,
	seat INT UNIQUE,# 唯一
	age INT DEFAULT 18,
	major_id int,
	CONSTRAINT fk_marjor_id FOREIGN KEY (major_id) REFERENCES major(id)
);
# 修改表时删除非空约束
ALTER TABLE stu_info MODIFY COLUMN stu_name  VARCHAR(255) ;
# 修改表时删除默认约束
ALTER TABLE stu_info MODIFY COLUMN age INT;
# 修改表时删除主键
ALTER TABLE stu_info DROP PRIMARY KEY;
# 修改表时删除主键
# 查询唯一键 show index from stu_info
ALTER TABLE stu_info DROP INDEX seat;
# 修改表时删除外键
ALTER TABLE stu_info DROP FOREIGN KEY fk_marjor_id;

标识列

概念:

应用示例

# 删除表
DROP TABLE IF EXISTS student;
# 创建表的时候设置标识列
CREATE TABLE student ( 
	id INT PRIMARY KEY auto_increment, 
	`name` VARCHAR ( 255 ) 
);
# 新增数据
INSERT INTO student(`name`) VALUES (‘xxx‘);
# 删除表
DROP TABLE IF EXISTS student;
# 创建表的时候设置标识列
CREATE TABLE student ( 
	id INT PRIMARY KEY , 
	`name` VARCHAR ( 255 ) 
);
# 修改表的时候设置标识列
ALTER TABLE student MODIFY COLUMN id PRIMARY KEY auto_increment;
# 新增数据
INSERT INTO student(`name`) VALUES (‘xxx‘);
# 删除表
DROP TABLE IF EXISTS student;
# 创建表的时候设置标识列
CREATE TABLE student ( 
	id INT PRIMARY KEY auto_increment, 
	`name` VARCHAR ( 255 ) 
);
# 修改表时删除标识列
ALTER TABLE student MODIFY COLUMN id PRIMARY KEY;

特点:

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!