• SQL多表设计--一对多(外键)


    1. -- 完成部门和员工的
    2. -- 选择当前db03 这个数据库
    3. use db03;
    4. -- 查看当前选中的数据库
    5. select database();
    6. -- 创建员工表
    7. create table tb_emp (
    8. id int unsigned primary key auto_increment comment 'ID',
    9. username varchar(20) not null unique comment '用户名',
    10. password varchar(32) default '123456' comment '密码',
    11. name varchar(10) not null comment '姓名',
    12. gender tinyint unsigned not null comment '性别, 说明: 1 男, 2 女',
    13. image varchar(300) comment '图像',
    14. job tinyint unsigned comment '职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管',
    15. entrydate date comment '入职时间',
    16. dep_id int unsigned comment '员工归属的部门',
    17. create_time datetime not null comment '创建时间',
    18. update_time datetime not null comment '修改时间'
    19. ) comment '员工表';
    20. -- 创建部门表
    21. create table tb_dept(
    22. id int unsigned primary key auto_increment comment 'ID',
    23. name varchar(10) not null unique comment '部门名称',
    24. create_time datetime not null comment '创建时间',
    25. update_time datetime not null comment '修改时间'
    26. ) comment '部门表';
    27. # 部门表为父表 员工表为子表 子表的dept_id和父表的id字段相对应 进行关联
    28. -- 插入员工表的数据
    29. INSERT INTO tb_emp (id, username, password, name, gender, image, job, entrydate,dep_id,create_time, update_time) VALUES
    30. (1, 'jinyong', '123456', '金庸', 1, '1.jpg', 4, '2000-01-01', 1,'2022-10-27 16:35:33', '2022-10-27 16:35:35'),
    31. (2, 'zhangwuji', '123456', '张无忌', 1, '2.jpg', 2, '2015-01-01',1, '2022-10-27 16:35:33', '2022-10-27 16:35:37'),
    32. (3, 'yangxiao', '123456', '杨逍', 1, '3.jpg', 2, '2008-05-01',2 ,'2022-10-27 16:35:33', '2022-10-27 16:35:39'),
    33. (4, 'weiyixiao', '123456', '韦一笑', 1, '4.jpg', 2, '2007-01-01',1 ,'2022-10-27 16:35:33', '2022-10-27 16:35:41'),
    34. (5, 'changyuchun', '123456', '常遇春', 1, '5.jpg', 2, '2012-12-05',2, '2022-10-27 16:35:33', '2022-10-27 16:35:43'),
    35. (6, 'xiaozhao', '123456', '小昭', 2, '6.jpg', 3, '2013-09-05', 1,'2022-10-27 16:35:33', '2022-10-27 16:35:45'),
    36. (7, 'jixiaofu', '123456', '纪晓芙', 2, '7.jpg', 1, '2005-08-01',1, '2022-10-27 16:35:33', '2022-10-27 16:35:47'),
    37. (8, 'zhouzhiruo', '123456', '周芷若', 2, '8.jpg', 1, '2014-11-09',1, '2022-10-27 16:35:33', '2022-10-27 16:35:49'),
    38. (9, 'dingminjun', '123456', '丁敏君', 2, '9.jpg', 1, '2011-03-11', 2,'2022-10-27 16:35:33', '2022-10-27 16:35:51'),
    39. (10, 'zhaomin', '123456', '赵敏', 2, '10.jpg', 1, '2013-09-05', 2,'2022-10-27 16:35:33', '2022-10-27 16:35:53'),
    40. (11, 'luzhangke', '123456', '鹿杖客', 1, '11.jpg', 2, '2007-02-01',1, '2022-10-27 16:35:33', '2022-10-27 16:35:55'),
    41. (12, 'hebiweng', '123456', '鹤笔翁', 1, '12.jpg', 2, '2008-08-18', 2,'2022-10-27 16:35:33', '2022-10-27 16:35:57'),
    42. (13, 'fangdongbai', '123456', '方东白', 1, '13.jpg', 1, '2012-11-01',2, '2022-10-27 16:35:33', '2022-10-27 16:35:59'),
    43. (14, 'zhangsanfeng', '123456', '张三丰', 1, '14.jpg', 2, '2002-08-01',1 ,'2022-10-27 16:35:33', '2022-10-27 16:36:01'),
    44. (15, 'yulianzhou', '123456', '俞莲舟', 1, '15.jpg', 2, '2011-05-01', 2,'2022-10-27 16:35:33', '2022-10-27 16:36:03'),
    45. (16, 'songyuanqiao', '123456', '宋远桥', 1, '16.jpg', 2, '2010-01-01', 1,'2022-10-27 16:35:33', '2022-10-27 16:36:05'),
    46. (17, 'chenyouliang', '12345678', '陈友谅', 1, '17.jpg', null, '2015-03-21',1, '2022-10-27 16:35:33', '2022-10-27 16:36:07'),
    47. (18, 'zhang1', '123456', '张一', 1, '2.jpg', 2, '2015-01-01',1, '2022-10-27 16:35:33', '2022-10-27 16:36:09'),
    48. (19, 'zhang2', '123456', '张二', 1, '2.jpg', 2, '2012-01-01',1, '2022-10-27 16:35:33', '2022-10-27 16:36:11'),
    49. (20, 'zhang3', '123456', '张三', 1, '2.jpg', 2, '2018-01-01',1, '2022-10-27 16:35:33', '2022-10-27 16:36:13'),
    50. (21, 'zhang4', '123456', '张四', 1, '2.jpg', 2, '2015-01-01',1,'2022-10-27 16:35:33', '2022-10-27 16:36:15'),
    51. (22, 'zhang5', '123456', '张五', 1, '2.jpg', 2, '2016-01-01',1,'2022-10-27 16:35:33', '2022-10-27 16:36:17'),
    52. (23, 'zhang6', '123456', '张六', 1, '2.jpg', 2, '2012-01-01',1, '2022-10-27 16:35:33', '2022-10-27 16:36:19'),
    53. (24, 'zhang7', '123456', '张七', 1, '2.jpg', 2, '2006-01-01',1, '2022-10-27 16:35:33', '2022-10-27 16:36:21'),
    54. (25, 'zhang8', '123456', '张八', 1, '2.jpg', 2, '2002-01-01',1, '2022-10-27 16:35:33', '2022-10-27 16:36:23'),
    55. (26, 'zhang9', '123456', '张九', 1, '2.jpg', 2, '2011-01-01',1, '2022-10-27 16:35:33', '2022-10-27 16:36:25'),
    56. (27, 'zhang10', '123456', '张十', 1, '2.jpg', 2, '2004-01-01',1, '2022-10-27 16:35:33', '2022-10-27 16:36:27'),
    57. (28, 'zhang11', '123456', '张十一', 1, '2.jpg', 2, '2007-01-01',1, '2022-10-27 16:35:33', '2022-10-27 16:36:29'),
    58. (29, 'zhang12', '123456', '张十二', 1, '2.jpg', 2, '2020-01-01',1, '2022-10-27 16:35:33', '2022-10-27 16:36:31');
    59. -- 插入部门表的数据
    60. insert into tb_dept (id,name,create_time,update_time) values
    61. (1,'学工部',now(),now()),(2,'教研部',now(),now()),(3,'咨询部',now(),now()),
    62. (4,'就业部',now(),now()),(5,'人事部',now(),now());
    63. # 到此为止 这两张表任然是没有任何关联的 相互独立 这就会导致 我们即使删除了父表部门中的id为1的部门 而 子表中的 任然存在
    64. -- 通过外键约束 来进行表之间的关联

    设置外键

    图形化操作添加:

    sql写法添加:

    1. alter table tb_emp
    2. add constraint tb_emp_fk_dept_id foreign key (dept_id) references
    3. tb_dept (id) ;

    # 使用foreign key 定义外键关联另一张表
    # 缺点:
    # 1.影响增删改的效率(需要检查外键的关系)
    # 2.仅用于单节点数据库,不适用与分布式,集群场景
    # 3.容易引发数据库的死锁问题,消耗性能

    在大型项目开发中:推荐使用逻辑外键,使用代码逻辑进行关联

  • 相关阅读:
    如何在Linux搭建MinIO服务并实现无公网ip远程访问内网管理界面
    【GIS前言技术】到底什么是实景三维?
    html如何向后台发送请求获取数据?Vue如何给后台发送请求获取数据?前后端如何传递数据?axios如何发送get请求?axios如何发送post请求?
    platform总线驱动
    【感性认识】嵌入式开发有何不同
    javascript在现实中的应用
    Module not found: Error: Can‘t resolve ‘core-js/modules/es.promise.js‘
    Rust开发环境搭建(Linux)
    高中生可发表论文的学术期刊涵盖TCR历史期刊
    Today‘s web RPC案例
  • 原文地址:https://blog.csdn.net/VVVVV16/article/details/133628901