琼中网站建设,网站建设报价表,模板网站有利于优化,网站建设案例基本流程图MySQL MYSQL 多表设计 一对多插入测试数据外键约束(物理外键)使用逻辑外键 MYSQL 多表设计 一对一表结构 MYSQL 多表设计 多对多 MYSQL 多表设计 一对多 建表语句 员工表
CREATE TABLE tb_emp (id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT ID,username VARCHAR(20) N… MySQL MYSQL 多表设计 一对多插入测试数据外键约束(物理外键)使用逻辑外键 MYSQL 多表设计 一对一表结构 MYSQL 多表设计 多对多 MYSQL 多表设计 一对多 建表语句 员工表
CREATE TABLE tb_emp (id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT ID,username VARCHAR(20) NOT NULL UNIQUE COMMENT 用户名,password VARCHAR(32) DEFAULT 123456 COMMENT 密码,name VARCHAR(10) NOT NULL COMMENT 姓名,gender TINYINT UNSIGNED NOT NULL COMMENT 性别说明: 1 男2 女,image VARCHAR(300) COMMENT 图像,job TINYINT UNSIGNED COMMENT 职位说明: 1 班主任, 2 讲师, 3 学工主管, 4 教研主管,entrydate DATE COMMENT 入职时间,dept_id INT UNSIGNED COMMENT 归属的部门ID,create_time DATETIME NOT NULL COMMENT 创建时间,update_time DATETIME NOT NULL COMMENT 修改时间
) COMMENT 员工表;部门表
CREATE TABLE tb_dept (id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT ID,name VARCHAR(10) NOT NULL UNIQUE COMMENT 部门名称,create_time DATETIME NOT NULL COMMENT 创建时间,update_time DATETIME NOT NULL COMMENT 修改时间
) COMMENT 部门表;插入测试数据
insert into tb_dept (id, name, create_time, update_time) values
(1,学工部,now(),now()),(2,教研部,now(),now()),(3,咨询部,now(),now()),
(4,就业部,now(),now()),(5,人事部,now(),now());INSERT INTO tb_emp
(id, username, password, name, gender, image, job, entrydate,dept_id, create_time, update_time) VALUES
(1,jinyong,123456,金庸,1,1.jpg,4,2000-01-01,2,now(),now()),
(2,zhangwuji,123456,张无忌,1,2.jpg,2,2015-01-01,2,now(),now()),
(3,yangxiao,123456,杨逍,1,3.jpg,2,2008-05-01,2,now(),now()),
(4,weiyixiao,123456,韦一笑,1,4.jpg,2,2007-01-01,2,now(),now()),
(5,changyuchun,123456,常遇春,1,5.jpg,2,2012-12-05,2,now(),now()),
(6,xiaozhao,123456,小昭,2,6.jpg,3,2013-09-05,1,now(),now()),
(7,jixiaofu,123456,纪晓芙,2,7.jpg,1,2005-08-01,1,now(),now()),
(8,zhouzhiruo,123456,周芷若,2,8.jpg,1,2014-11-09,1,now(),now()),
(9,dingminjun,123456,丁敏君,2,9.jpg,1,2011-03-11,1,now(),now()),
(10,zhaomin,123456,赵敏,2,10.jpg,1,2013-09-05,1,now(),now()),
(11,luzhangke,123456,鹿杖客,1,11.jpg,1,2007-02-01,1,now(),now()),
(12,hebiweng,123456,鹤笔翁,1,12.jpg,1,2008-08-18,1,now(),now()),
(13,fangdongbai,123456,方东白,1,13.jpg,2,2012-11-01,2,now(),now()),
(14,zhangsanfeng,123456,张三丰,1,14.jpg,2,2002-08-01,2,now(),now()),
(15,yulianzhou,123456,俞莲舟,1,15.jpg,2,2011-05-01,2,now(),now()),
(16,songyuanqiao,123456,宋远桥,1,16.jpg,2,2010-01-01,2,now(),now()),(17,chenyouliang,123456,陈友谅,1,17.jpg,NULL,2015-03-21,NULL,now(),now());外键约束(物理外键) 以上添加一个外键将员工表的 dept_id 绑定至 部门表的 id 字段上 若无员工使用某个主表外键 id 则可以删除某个部门 不建议 \ 禁止 使用物理外键 概念: 使用 foreign key 定义外键关联另外一张表缺点:
影响增、删、改的效率(需要检查外键关系)
仅用于单节点数据库不适用与分布式、集群场景
容易引发数据库的死锁问题消耗性能使用逻辑外键
概念: 在业务层逻辑中解决外键关联
通过逻辑外键就可以很方便的解决上述问题MYSQL 多表设计 一对一
案例: 用户 与 身份证信息 的关系
关系: 一对一关系多用于单表拆分将一张表的基础字段放在一张表中其他字段放在另一张表中以提升操作效率实现: 在任意一方加入外键关联另外一方的主键并且设置外键为唯一的(UNIQUE)表结构
CREATE TABLE tb_user (id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT ID,name VARCHAR(10) NOT NULL COMMENT 姓名,gender TINYINT UNSIGNED NOT NULL COMMENT 性别, 1 男 2 女,phone CHAR(11) COMMENT 手机号,degree VARCHAR(10) COMMENT 学历
) COMMENT 用户信息表;INSERT INTO tb_user VALUES (1, 白眉鹰王, 1, 18812340001, 初中),(2, 青翼蝠王, 1, 18812340002, 大专),(3, 金毛狮王, 1, 18812340003, 初中),(4, 紫衫龙王, 2, 18812340004, 硕士);CREATE TABLE tb_user_card (id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT ID,nationality VARCHAR(10) NOT NULL COMMENT 民族,birthday DATE NOT NULL COMMENT 生日,idcard CHAR(18) NOT NULL COMMENT 身份证号,issued VARCHAR(20) NOT NULL COMMENT 签发机关,expire_begin DATE NOT NULL COMMENT 有效期限-开始,expire_end DATE COMMENT 有效期限-结束,user_id INT UNSIGNED NOT NULL UNIQUE COMMENT 用户ID,CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES tb_user(id)
) COMMENT 用户信息表;INSERT INTO tb_user_card VALUES (1, 汉, 1960-11-06, 100000100000100001, 朝阳区公安局, 2000-06-10, NULL, 1),(2, 汉, 1971-11-06, 100000100000100002, 静安区公安局, 2005-06-10, 2025-06-10, 2),(3, 汉, 1963-11-06, 100000100000100003, 昌平区公安局, 2006-06-10, NULL, 3),(4, 回, 1980-11-06, 100000100000100004, 海淀区公安局, 2008-06-10, 2028-06-10, 4);MYSQL 多表设计 多对多
案例: 学生与 课程的关系
关系: 一个学生可以选修多门课程一门课程也可以供多个学生选择实现: 建立第三张中间表中间表至少包含两个外键分别关联两方主键CREATE TABLE tb_student(id INT AUTO_INCREMENT PRIMARY KEY COMMENT 主键ID,name VARCHAR(10) COMMENT 姓名,no VARCHAR(10) COMMENT 学号
) COMMENT 学生表;
INSERT INTO tb_student(name, no) VALUES (黛绮丝, 2000100101),(谢逊, 2000100102),(殷天正, 2000100103),(韦一笑, 2000100104);CREATE TABLE tb_course(id INT AUTO_INCREMENT PRIMARY KEY COMMENT 主键ID,name VARCHAR(10) COMMENT 课程名称
) COMMENT 课程表;
INSERT INTO tb_course (name) VALUES (Java), (PHP), (MySQL) , (Hadoop);CREATE TABLE tb_student_course(id INT AUTO_INCREMENT COMMENT 主键 PRIMARY KEY,student_id INT NOT NULL COMMENT 学生ID,course_id INT NOT NULL COMMENT 课程ID,CONSTRAINT fk_courseid FOREIGN KEY (course_id) REFERENCES tb_course (id),CONSTRAINT fk_studentid FOREIGN KEY (student_id) REFERENCES tb_student (id)
)COMMENT 学生课程中间表;
INSERT INTO tb_student_course(student_id, course_id) VALUES (1,1),(1,2),(1,3),(2,2),(2,3),(3,4);