MySQL数据库定义语言学习笔记

数据库的范式

◆ 构造数据库必须遵循一定得规则,这种规则就是范式。

◆ 目前关系数据库有6中范式,一般情况下,只满足第三范式即可。

第一范式:原子性

◆ 第一范式是数据库的基本要求,不满足这一点就不是关系数据库。

◆ 数据表得每一列都是不可分割得基本数据项,同一列中不能有多个值,也不能存在重复的属性。

不符合第一范式:

学号姓名班级
1000刘娜高三年级1班

符合第一范式:

学号姓名年级班级
1000刘娜高三1班

第二范式:唯一性

◆ 数据表中的每条记录必须是唯一的。为了实现区分,通常要为表加上一个列用于存储唯一标识,这个唯一属性列被称作主键列。

无法区分重复数据:

学号考试成绩日期
230582018-07-15
230582018-07-15

数据具有唯一性:

流水号学号考试成绩日期
201807152687230582018-07-15
201807152694230582018-07-15

第三范式:关联性

◆ 每列都与主键有直接关系,不存在传递依赖

违反第三范式:

爸爸儿子女儿女儿的玩具女儿的衣服
陈华陈浩陈婷婷海绵宝宝校服

符合第三范式:

爸爸儿子女儿
陈华陈浩陈婷婷
女儿女儿的玩具女儿的衣服
陈婷婷海绵宝宝校服

◆ 依照第三范式,数据可以拆分保存到不同的数据表,彼此保持关联

编号部门电话
10财务部1001
20技术部1002
30销售部1003
编号姓名性别部门入职日期
1陈浩102018-05-10
2李婷婷302018-03-22

字段约束

◆ MySQL中的字段约束共有四种:

约束名称关键字描述
主键约束PRIMARY KEY字段值唯一,且不能为NULL
非空约束NOT NULL字段值不能为NULL
唯一约束UNIQUE字段值唯一,且可以为NULL
外键约束FOREIGN KEY保持关联数据的逻辑性

主键约束

◆ 主键约束要求字段的值在全表必须唯一,而且不能为NULL值

◆ 建议主键一定要使用数字类型,因为数字的检索速度会非常块

◆ 如果主键是数字类型,还可以设置自动增长

CREATE TABLE t_teacher(
    id INT PRIMARY KEY AUTO_INCREMENT,
    ......
);

非空约束

◆ 非空约束要求字段的值不能为NULL值

◆ NULL值以为没有值,而不是 “” 空字符串

CREATE TABLE t_teacher(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(200) NOT NULL,
    married BOOLEAN NOT NULL DEFAULT FALSE
);
# 不能为空时,DEFAULT 默认值

唯一约束

◆ 唯一约束要求字段值如果不为NULL,那么在全表必须唯一

CREATE TABLE t_teacher(
    ......
    tel CHAR(11) NOT NULL UNIQUE
);

外键约束

◆ 外键约束用来保证关联数据的逻辑关系

父表:

deptnodnametel
10财务部1001
20技术部1002
30销售部1003

子表:

empnonamesexdeptnohiredate
1陈浩102018-05-10
2李婷婷302018-03-22

◆ 外键约束的定义是写在子表上的

CREATE TABLE t_emp(
    empno INT UNSIGNED PRIMARY KEY,
    ename VARCHAR(20) NOT NULL,
    sex ENUM("男", "女") NOT NULL,
    deptno INT UNSIGNED,
    hiredate DATE NOT NULL,
    FOREIGN KEY (deptno) REFERENCES t_dept(deptno)
);
# ENUM()规定字段值,只能在规定的字段值之内挑选一个
# FOREIGN KEY 规定外界约束
外建约束的闭环问题

◆ 如果形成外键闭环,我们将无法删除任何一张表的记录。

PS: 所以创建数据表的时候不推荐使用外键约束。

字符集、校对规则定义

CREATE DATABASE[IF NOT EXISTS]<数据库名>
[[DEFAULT]] CHARACTER SET <字符集名>][[DEFAULT] COLLATE <校对规则名>];

IF NOT EXISTS 可以判断数据库是否存在,此声明可以防止因数据库存在,导致全部语句的中止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值