MySQL数据库学习——(二)键值约束

本文章主要介绍SQL数据库的设计理念。针对存在事务型操作,多个数据库表格之间存在关联的,则建议使用SQL数据库。

首先,简单从键(字段)的规范开始,这对于数据库的设计有着至关重要的作用。

1. 简单介绍–键值的约束

MySQL数据库中存在以下几类重要的约束类型:

约束名称描述关键字
非空约束保证列中所有数据不能有NULLNOT NULL
唯一约束保证列中所有数据各不相同UNIQUE
主键约束唯一标识PRIMARY KEY
默认约束采用默认值DEFAULT
检查约束保证列中值满足某一条件CHECK
外键约束建立两个表之间的链接FOREIGN KEY
键值约束的分类

建立示例数据表

# 在DB1数据库中创建示例数据表table1
CREATE TABLE table1 (
id int primary key,
ename varchar(50) not null unique,
joindate date not null,
salary double(7,2) not null,
bonus double(7,2) not null default 0
);

#演示主键约束:非空且唯一

# 主键约束:非空且唯一
INSERT INTO table1(id,ename,joindate,salary,bonus) VALUES(1,'张三','1999-01-01',8800,1000);
INSERT INTO table1(id,ename,joindate,salary,bonus) VALUES(1,'李四','1992-01-01',8100,2000);

#演示非空约束

# 非空约束
INSERT INTO table1(id,ename,joindate,bonus) VALUES(3,'王五','1995-01-01',1000);

#演示唯一约束

# 唯一约束
INSERT INTO table1(id,ename,joindate,salary,bonus) VALUES(4,'张三','1994-01-01',4100,2000);

#演示默认约束

# 唯一约束
INSERT INTO table1(id,ename,joindate,salary) VALUES(4,'赵六','1994-01-01',4100);
# 显示插入的数据
select * from table1;

我们可以发现,由于没有设置bonus的值,因而其有一个默认值:0.

#演示默认约束

# 唯一约束
INSERT INTO table1(id,ename,joindate,salary) VALUES(4,'赵六','1994-01-01',4100);
# 显示插入的数据
select * from table1;

对于主键,若不想在写入数据的时候,避免由于在写入数据的时候,还要保证唯一的麻烦,可以给主键设置auto_increment使其不需要额外再插入该值,其在写入数据的时候,会自动增加1(只适用于整数类型数据列)。

# 先删除原来的数据表
drop table table1;

# 在DB1数据库中创建示例数据表table1
CREATE TABLE table1 (
id int primary key auto_increment,
ename varchar(50) not null unique,
joindate date not null,
salary double(7,2) not null,
bonus double(7,2) not null default 0
);

这时,我们再来插入数据,就不需要额外管id的值

# 插入两条数据
INSERT INTO table1(ename,joindate,salary,bonus) VALUES('张三','1999-01-01',8800,1000);
INSERT INTO table1(ename,joindate,salary,bonus) VALUES('李四','1992-01-01',8100,2000);

我们可以发现,在插入数据的同时,数据库会自动在id列上自增1。

下面,我们来学习一下外键,外键是两个设置多个表之间存在关联的必要条目,以此来保证数据的一致性和完整性。

首先,我们先创建两个数据表:员工表(emp)和部门表(dept)。在创建表的时候,要明确哪个表是主表,那些表则是从表,对于从表中的引用主表的键,则需要使用外键约束。(注意:若想使用外键,需要特定的引擎支持:InnoDB,此外,还需要开启选项:FOREIGN_KEY_CHECKS;)

# 开启外键检测
SET FOREIGN_KEY_CHECKS=1; 
# 关闭外键检测
SET FOREIGN_KEY_CHECKS=0;  

# 查看外键检测
SELECT  @@FOREIGN_KEY_CHECKS;
# 创建从表时添加外键约束
CREATE TABLE 从表名(
列名 数据类型,
[CONSTRAINT] [外键名称] FOREIGN KEY(外键列名) REFERENCES 主表(主表列名)
);

# 另外,也可以在创建表后,将某一键设置为外键
ALTER TABLE 表名 CONSTRAINT 外键名称 FOREIGN KEY (外键列名) REFERENCES 主表(主表列名);
# 创建部门表
CREATE TABLE dept(
id int primary key auto_increment,
name varchar(20) not null unique,
address varchar(20) not null
);

# 创建员工表
CREATE TABLE emp(
id int primary key auto_increment,
name varchar(20) not null unique,
age int not null,
dept_id int,
CONSTRAINT ky_emp_dept FOREIGN KEY (dept_id) REFERENCES dept(id)
);
ALTER TABLE emp add CONSTRAINT ky_emp_dept FOREIGN KEY (dept_id) REFERENCES dept(id);
# 先添加主表数据(部门)
INSERT INTO dept(name,address) VALUES('宣传部','北京市');
INSERT INTO dept(name,address) VALUES('政法部','北京市');

# 后添加员工数据
INSERT INTO emp(name,age,dept_id) VALUES('张三',20,1);
INSERT INTO emp(name,age,dept_id) VALUES('李四',23,2);
INSERT INTO emp(name,age,dept_id) VALUES('王五',23,3);

当使用外键时,必须先在主表中插入对应的条目,才能在从表中插入对应的数据,否则,就会出现上述的错误(因为不存在编号id为3的部门,因而在员工表中插入数据时,就会出现错误)。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
隐藏
变装