本博文源于mysql,对约束进行一系列实战练习,具体内容请点击,涉及:检查约束/主键/外键/默认值/非空/查看表中约束
解决数据冗余,一个信息存两遍。学术定义:解决数据的一致性与正确性
<字段名> <数据类型> PRIMARY KEY [默认值]
每个表只有一个主键,但可以有复合主键,所谓复合主键就是多列组合的主键
字段名称 | 数据类型 | 备注 |
---|---|---|
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
-> );
格式
PRIMARY KEY [字段名]
字段名称 | 数据类型 | 备注 |
---|---|---|
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));
格式:
PRIMARY KEY [字段1、字段2、....、字段3]
字段名称 | 数据类型 | 备注 |
---|---|---|
name | VARCHAR(25) | 员工名称 |
deptId | INT(11) | 所在部门编号 |
salary | FLOAT | 工资 |
CREATE TABLE tb_emp5(name VARCHAR(25),
deptId INT(11),salary FLOAT,primary key(name,deptId));
格式
ALTER TABLE <数据表名> ADD PRIMARY KEY(<列名>);
字段名称 | 数据类型 | 备注 |
---|---|---|
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);
大家在敲代码的时候忽略col3,这是我在这篇博文遗留下来的
mysql|表的(创建/修改/删除)[含实战练习]
这是博主上一篇写的博文。
外键用来在两个表的数据之间建立连接的。
[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,...]
REFERENCES <主表名> 主键列1 [,主键列2,...]
为做实验先创建这样一个表结构的一张表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));
创建数据表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));
格式
ALTER TABLE <数据表名> ADD CONSTRAINT <索引名>
FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);
mysql> ALTER TABLE tb_emp2
-> ADD CONSTRAINT fk_tb_dept1
-> FOREIGN KEY(deptId)
-> REFERENCES tb_dept1(id);
格式
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;
ALTER TABLE tb_emp2
-> DROP FOREIGN KEY fk_tb_dept1;
本身作用是可以确保一列或者几列不出现重复值。
格式
<字段名> <数据类型> UNIQUE
字段名称 | 数据类型 | 备注 |
---|---|---|
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));
ALTER TABLE <数据表名> ADD CONSTRAINT <唯一约束名> UNIQUE (<列名>);
ALTER TABLE tb_dept1 ADD CONSTRAINT unique_name UNIQUE(name);
格式
ALTER TABLE <表名> DROP INDEX <唯一约束名>;
ALTER TABLE tb_dept1 DROP INDEX unique_name;
这个用于指定需要检查的限定条件
格式
CHECK (<检查约束>)
字段名称 | 数据类型 | 备注 |
---|---|---|
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));
格式
ALTER TABLE tb_emp6 ADD CONSTRAINT <检查约束名> CHECK(<检查约束>)
ALTER TABLE tb_emp7 ADD CONSTRAINT check_id CHECK(id>0);
格式
ALTER TABLE <数据表名> DROP CONSTRAINT <检查约束名>;
换个名字叫叫,可以理解给字段设置默认值。
格式
<字段名> <数据类型> DEFAULT <默认值>;
字段名称 | 数据类型 | 备注 |
---|---|---|
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');
格式
ALTER TABLE <数据表名> CHANGE COLUMN <字段名> <数据类型> DEFAULT <默认值>;
ALTER TABLE tb_dept3
-> CHANGE COLUMN location
-> location VARCHAR(50) DEFAULT 'Shanghai';
格式
ALTER TABLE <数据表名>
CHANGE COLUMN <字段名> <字段名> <数据类型> DEFAULT NULL;
ALTER TABLE tb_dept3 CHANGE COLUMN location location VARCHAR(50) DEFAULT NULL;
格式
<字段名> 数据类型 NOT NULL;
表格式:
字段名称 | 数据类型 | 备注 |
---|---|---|
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));
格式
ALTER TABLE <数据表名>
CHANGE COLUMN <字段名>
<字段名> <数据类型> NOT NULL;
ALTER TABLE tb_dept4 CHANGE COLUMN location location VARCHAR(50) NOT NULL;
格式
ALTER TABLE <数据表名>
CHANGE COLUMN <字段名> <字段名> <数据类型> NULL;
ALTER TABLE tb_dept4 CHANGE COLUMN location location VARCHAR(50) NULL;
格式SHOW CREATE TABLE (数据表名)\G;
在“删除外键约束”标题里介绍过来了,可以往上查看相应的命令