mysql|主键/外键/唯一/默认值/非空)约束(含实战练习)

本博文源于mysql,对约束进行一系列实战练习,具体内容请点击,涉及:检查约束/主键/外键/默认值/非空/查看表中约束

约束的作用

解决数据冗余,一个信息存两遍。学术定义:解决数据的一致性与正确性

主键约束

设置主键格式

<字段名> <数据类型> PRIMARY KEY [默认值]

每个表只有一个主键,但可以有复合主键,所谓复合主键就是多列组合的主键

例子:在test_db数据库中创建tb_emp3数据表,其主键为id,格式如下表

字段名称 数据类型 备注
id INT(11) 员工编号
name VARCHAR(25) 员工名称
deptId INT(11) 所在部门编号
salary FLOAT 工资

如果大家没有这个数据库,直接用

CREATE DATABASE test_db;

创建,下面是对例题的解答

 CREATE TABLE tb_emp3
    -> (
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT
    -> );

mysql|主键/外键/唯一/默认值/非空)约束(含实战练习)_第1张图片

创建完列指定主键

格式

PRIMARY KEY [字段名]

例子:在test_db数据库中创建tb_emp4,使其主键为id

字段名称 数据类型 备注
id INT(11) 员工编号
name VARCHAR(25) 员工名称
deptId INT(11) 所在部门编号
salary FLOAT 工资
CREATE TABLE tb_emp4(id INT(11),
name VARCHAR(25),deptId INT(11),salary FLOAT,primary key(id));

mysql|主键/外键/唯一/默认值/非空)约束(含实战练习)_第2张图片

设置复合主键

格式:

PRIMARY KEY [字段1、字段2....、字段3]

例子:创建数据表tb_emp5,假设表中没有主键id,设置name与deptId为联合主键

字段名称 数据类型 备注
name VARCHAR(25) 员工名称
deptId INT(11) 所在部门编号
salary FLOAT 工资
 CREATE TABLE tb_emp5(name VARCHAR(25),
 deptId INT(11),salary FLOAT,primary key(name,deptId));

mysql|主键/外键/唯一/默认值/非空)约束(含实战练习)_第3张图片

在修改表时添加主键约束

格式

ALTER TABLE <数据表名> ADD PRIMARY KEY(<列名>);

例子:创建无主键tb_emp2,并用ALTER修改id为主键

字段名称 数据类型 备注
id INT(11) 员工编号
name VARCHAR(25) 员工名称
deptId INT(11) 所在部门编号
salary FLOAT 工资
mysql> use test_db;
Database changed
mysql> create table tb_emp1
    -> (
    -> id INT(11),
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT
    -> );


更换主键

 ALTER TABLE tb_emp2 ADD primary key(id);

mysql|主键/外键/唯一/默认值/非空)约束(含实战练习)_第4张图片
大家在敲代码的时候忽略col3,这是我在这篇博文遗留下来的
mysql|表的(创建/修改/删除)[含实战练习]
这是博主上一篇写的博文。

外键约束

外键用来在两个表的数据之间建立连接的。

在创建表时设置外键约束

[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,...]
REFERENCES <主表名> 主键列1 [,主键列2,...]

例子:外键约束关联到id

为做实验先创建这样一个表结构的一张表tb_dept1,在数据库test_db中哦!

字段名称 数据类型 备注
id INT(11) 部门编号
name VARCHAR(22) 部门名称
location VARCHAR(22) 部门位置
 CREATE TABLE tb_dept1(id INT(11) PRIMARY KEY,
 name VARCHAR(22) NOT NULL,location VARCHAR(50));

mysql|主键/外键/唯一/默认值/非空)约束(含实战练习)_第5张图片
创建数据表tb_emp6,并在表tb_emp6上创建外键约束,让它的键deptId作为外键关联到表tb_dept1的主键id,下表为表结构

字段名称 数据类型 备注
id INT(11) 员工编号
name VARCHAR(25) 员工名称
deptId INT(11) 所在部门编号
salary FLOAT 工资

了解表结构,添加了名称为fk_emp_dept1的外键约束,外键名称为deptId,其依赖于表tb_dept1的主键id

CREATE TABLE tb_emp6(id INT(11) PRIMARY KEY,name VARCHAR(25),
deptId INT(11),salary FLOAT,
CONSTRAINT fk_emp_dept1 FOREIGN KEY(deptId) REFERENCES tb_dept1(id));

mysql|主键/外键/唯一/默认值/非空)约束(含实战练习)_第6张图片

在修改表时添加外键约束

格式

ALTER TABLE <数据表名> ADD CONSTRAINT <索引名>
FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);

例子:修改数据表tb_emp2,将字段deptId设置为外键,与数据表tb_dept1的主键进行关联

mysql> ALTER TABLE tb_emp2
    -> ADD CONSTRAINT fk_tb_dept1
    -> FOREIGN KEY(deptId)
    -> REFERENCES tb_dept1(id);

mysql|主键/外键/唯一/默认值/非空)约束(含实战练习)_第7张图片

删除外键约束

格式

ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;

例子:删除数据表tb_emp2中的外键约束fk_tb_dept1

 ALTER TABLE tb_emp2
    -> DROP FOREIGN KEY fk_tb_dept1;

mysql|主键/外键/唯一/默认值/非空)约束(含实战练习)_第8张图片

唯一约束

本身作用是可以确保一列或者几列不出现重复值。

在创建表时设置唯一约束

格式

<字段名> <数据类型> UNIQUE

例子:创建数据表tb_dept2格式如下,指定部门的名称唯一

字段名称 数据类型 备注
id INT(11) 部门编号
name VARCHAR(22) 部门名称
location VARCHAR(50) 部门位置
 CREATE TABLE tb_dept2(id INT(11) PRIMARY KEY,
 name VARCHAR(22) UNIQUE,location VARCHAR(50));

mysql|主键/外键/唯一/默认值/非空)约束(含实战练习)_第9张图片

在修改表时添加唯一约束

ALTER TABLE <数据表名> ADD CONSTRAINT <唯一约束名> UNIQUE (<列名>);

例子:修改数据表tb_dept1,指定部门的名称唯一

 ALTER TABLE tb_dept1 ADD CONSTRAINT unique_name UNIQUE(name);

mysql|主键/外键/唯一/默认值/非空)约束(含实战练习)_第10张图片

删除唯一约束

格式

ALTER TABLE <表名> DROP INDEX <唯一约束名>;

例子:删除数据表tb_dept1中的唯一约束unique_name

 ALTER TABLE tb_dept1 DROP INDEX unique_name;

mysql|主键/外键/唯一/默认值/非空)约束(含实战练习)_第11张图片

检查约束

这个用于指定需要检查的限定条件

在创建表时设置检查约束

格式

CHECK (<检查约束>)

例子:在test_db数据库中创建tb_emp7数据表格式如下,要求salary字段值大于0且小于10000

字段名称 数据类型 备注
id INT(11) 员工编号
name VARCHAR(25) 员工名称
deptId INT(11) 所在部门编号
salary FLOAT 工资
 CREATE TABLE tb_emp7(id INT(11) PRIMARY KEY,name VARCHAR(25),deptId INT(11),
 salary FLOAT,CHECK(salary>0 and salary <100),
 FOREIGN KEY(deptId) REFERENCES tb_dept1(id));

mysql|主键/外键/唯一/默认值/非空)约束(含实战练习)_第12张图片

在修改表时添加检查约束

格式

ALTER TABLE tb_emp6 ADD CONSTRAINT <检查约束名> CHECK(<检查约束>)

例子:修改tb_emp7数据表,要求id字段值大于0

ALTER TABLE tb_emp7 ADD CONSTRAINT check_id CHECK(id>0);

mysql|主键/外键/唯一/默认值/非空)约束(含实战练习)_第13张图片

删除检查约束

格式

ALTER TABLE <数据表名> DROP CONSTRAINT <检查约束名>;

默认值约束

换个名字叫叫,可以理解给字段设置默认值。

在创建表时设置默认值约束

格式

<字段名> <数据类型> DEFAULT <默认值>;

例子:创建数据表tb_dept3,指定部门位置默认为Beijing

字段名称 数据类型 备注
id INT(11) 部门编号
name VARCHAR(22) 部门名称
location VARCHAR(50) 部门位置
 CREATE TABLE tb_dept3(id INT(11) PRIMARY KEY,
 name VARCHAR(22),location VARCHAR(50) DEFAULT 'Beijing');

mysql|主键/外键/唯一/默认值/非空)约束(含实战练习)_第14张图片

在修改表时添加默认值约束

格式

ALTER TABLE <数据表名> CHANGE COLUMN <字段名> <数据类型>  DEFAULT <默认值>;

例子:修改数据表tb_dept3,将部门默认值改为Shanghai

ALTER TABLE tb_dept3
    -> CHANGE COLUMN location
    -> location VARCHAR(50) DEFAULT 'Shanghai';

mysql|主键/外键/唯一/默认值/非空)约束(含实战练习)_第15张图片

删除默认值约束

格式

ALTER TABLE <数据表名>
CHANGE COLUMN <字段名> <字段名> <数据类型> DEFAULT NULL;

例子:修改数据表tb_dept3,将部门位置的默认值约束删除

 ALTER TABLE tb_dept3 CHANGE COLUMN location location VARCHAR(50) DEFAULT NULL;

mysql|主键/外键/唯一/默认值/非空)约束(含实战练习)_第16张图片

非空约束

创建表时设置非空约束

格式

<字段名> 数据类型 NOT NULL;

例子:创建数据表tb_dept4,指定部门名称不能为空

表格式:

字段名称 数据类型 备注
id INT(11) 部门编号
name VARCHAR(22) 部门名称
location VARCHAR(50) 部门位置
 CREATE TABLE tb_dept4(id INT(11) PRIMARY KEY,
 name VARCHAR(22) NOT NULL,location VARCHAR(50));

mysql|主键/外键/唯一/默认值/非空)约束(含实战练习)_第17张图片

修改表时添加非空约束

格式

ALTER TABLE <数据表名>
CHANGE COLUMN <字段名>
<字段名> <数据类型> NOT NULL;

例子:修改数据表tb_dept4,指定部门位置不能为空

ALTER TABLE tb_dept4 CHANGE COLUMN location location VARCHAR(50) NOT NULL;

mysql|主键/外键/唯一/默认值/非空)约束(含实战练习)_第18张图片

删除非空约束

格式

ALTER TABLE <数据表名>
CHANGE COLUMN <字段名> <字段名> <数据类型> NULL;

例子:修改数据表tb_dept4,指定部门位置非空约束删除

ALTER TABLE tb_dept4 CHANGE COLUMN location location VARCHAR(50) NULL;

mysql|主键/外键/唯一/默认值/非空)约束(含实战练习)_第19张图片

查看表中的约束

格式SHOW CREATE TABLE (数据表名)\G;

在“删除外键约束”标题里介绍过来了,可以往上查看相应的命令

你可能感兴趣的:(mysql)