MySQL基础(五)

约束

概述

  • 为了保证数据的一致性和完整性,SQL规范以约束的方式对表数据进行额外的条件限制。
  • 约束是表级的强制规定。
  • 能够在建立表的时候添加约束,或者在表建立以后数据添加以前添加约束。

约束类型

有以下的六大约束:sql

  • NOT NULL,非空约束,规定某个字段不能为空。
  • UNIQUE,惟一约束,规定某个字段在整个表中是惟一的。
  • PRIMARY KEY,主键,非空且惟一。
  • CHECK,检查约束。
  • DEFAULT,默认值。
  • FOREIGN KEY,外键。

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

分类

  • 根据约束数据列的限制,约束能够分为:
    • 单列约束:每一个约束只能约束一列。
    • 多列约束:每一个约束能够约束多列。
CREATE TABLE 表名(
	列名 字段类型 单列约束,
    列名 字段类型 单列约束,
    多列约束(列名1,列名2)
);
复制代码
  • 根据约束的做用范围,约束能够分为:
    • 列级约束:只能做用在一个列上,而且是根据列的定义后面。
    • 表级约束:能够做用在多个列上,不和列在一块儿,而是单独定义。
CREATE TABLE 表名(
	列名 字段类型 列级约束,
    列名 字段类型 列级约束,
    表级约束(列名1,列名2)
);
复制代码

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

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

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

  • 建立学生表:
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个 √,可是不推荐
惟一 能够有多个 √,可是不推荐

外键的特色

  • 要求在从表设置外键。
  • 要求从表的外键列的类型要和主表的关联列的类型要求一致或兼容,可是名称不要求一致。
  • 主表的关联列必须是一个key(通常是主键或惟一键)。

修改表时添加约束

语法:

# 添加列级约束
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;
复制代码

特色:

  • 标识列必须不必定和主键搭配,可是要求是一个key。rem

  • 一个表中至多有一个标识列。string

  • 标识列的类型只能是数值型。it

  • 标识列能够经过set auto_increment_increment =3;设置步长,也能够经过手动插入值的方式设置标识列的起始值INSERT INTO student(id,name) VALUES (5,'xxx')table

相关文章
相关标签/搜索