一、表与表之间建关系

(1) 将所有的数据放在一张表内的弊端
表的组织结构不清晰
浪费存储时间
可扩展性极差
---> 类似于将所有的代码写入到一个py文件中 -->解耦部分
(2) 如何查找表之间的关系
以员工表和部门表为例:查找表关系需要做到换位思考
(a) 先站在员工表的角度:找员工表的多条数据能够对应部门表的一条数据=>多个员工能够属于同一个部门可以,但不能直接下结论,还需要站在部门表的角度
(b) 再站在部门表的角度:找部门表的多条数据能够对应员工表的一条数据=>多个部门表的多条数据能否有同一个员工不可以只有站在两表的角度都分析过,才能够下结论:员工表单项多对一部门表

二、外键(foreign key)

1.必须要先建被关联表
create table dep(id int primary key auto_increment, dep_name char(16), dep_desc char(64) ); create table emp( id int primary key auto_increment, name char(16), gender enum('male','female','others') not null default 'male', # default后面的默认值空格直接书写即可 dep_id int, foreign key(dep_id) references dep(id) );
2.插入数据
新增数据的时候,要先增被关联表中的数据
insert into dep(dep_name,dep_desc) values
('外交部','形象代言人'), ('教学部','教书育人'), ('技术部','技术能力有限部门');
"""
mysql> select * from dep;
+----+-----------+--------------------------+
| id | dep_name  | dep_desc                 |
+----+-----------+--------------------------+
|  1 | 外交部    | 形象代言人                 |
|  2 | 教学部    | 教书育人                   |
|  3 | 技术部    | 技术能力有限部门            |
+----+-----------+--------------------------+
"""insert into emp(name,gender,dep_id) values
('son','male',1),
('gon','male',2), ('vin','male',2), ('ank','male',2), ('rry','female',3); """ | id | name | gender | dep_id | +----+------+--------+--------+ | 1 | son | male | 1 | | 2 | gon | male | 2 | | 3 | vin | male | 2 | | 4 | ank | male | 2 | | 5 | rry | female | 3 | +----+------+--------+--------+ 5 rows in set (0.00 sec) """
3.修改emp表中的dep_id字段
update emp set dep_id=100 where id=1; update dep set id=100 where id=1; delete from dep where id=2; delete from emp where id>1 and id<5; delete from dep where id=2; """ ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`day39`.`emp`, CONSTRAINT `emp_ibfk_1` FOREIGN KEY (`dep_id`) REFERENCES `dep` (`id`)) 上述语句都会报错,原因是 dmp 表设置了外键 """
4. 给外键字段新增功能,同步更新删除(级联删除、级联更新)
create table dep(id int primary key auto_increment, dep_name char(16), dep_desc char(64) ); create table emp( id int primary key auto_increment, name char(16), gender enum('male','female','others') not null default 'male', # default后面的默认值空格直接书写即可 dep_id int, foreign key(dep_id) references dep(id) on update cascade # 同步更新 on delete cascade # 同步删除 ); insert into dep(dep_name,dep_desc) values ('外交部','形象代言人'), ('教学部','教书育人'), ('技术部','技术能力有限部门'); insert into emp(name,gender,dep_id) values ('jason','male',1), ('egon','male',2), ('kevin','male',2), ('tank','male',2), ('jerry','female',3);
"""
mysql> select * from emp;
+----+-------+--------+--------+
| id | name  | gender | dep_id |
+----+-------+--------+--------+
|  1 | jason | male   |      1 |
|  2 | egon  | male   |      2 |
|  3 | kevin | male   |      2 |
|  4 | tank  | male   |      2 |
|  5 | jerry | female |      3 |
+----+-------+--------+--------+
5 rows in set (0.00 sec)mysql> select * from dep;
+----+-----------+--------------------------+
| id | dep_name  | dep_desc                 |
+----+-----------+--------------------------+
|  1 | 外交部    | 形象代言人               |
|  2 | 教学部    | 教书育人                 |
|  3 | 技术部    | 技术能力有限部门         |
+----+-----------+--------------------------+
"""

执行命令:
update dep set id=100 where id=2;
delete from dep where id=100;

结果:
"""
mysql> select * from dep;
+-----+-----------+--------------------------+
| id  | dep_name  | dep_desc                 |
+-----+-----------+--------------------------+
|   1 | 外交部    | 形象代言人               |
|   3 | 技术部    | 技术能力有限部门         |
| 100 | 教学部    | 教书育人                 |
+-----+-----------+--------------------------+
3 rows in set (0.00 sec)mysql> select * from emp;
+----+-------+--------+--------+
| id | name  | gender | dep_id |
+----+-------+--------+--------+
|  1 | jason | male   |      1 |
|  2 | egon  | male   |    100 |
|  3 | kevin | male   |    100 |
|  4 | tank  | male   |    100 |
|  5 | jerry | female |      3 |
+----+-------+--------+--------+
5 rows in set (0.00 sec)
"""
"""
mysql> select * from emp;
+----+-------+--------+--------+
| id | name  | gender | dep_id |
+----+-------+--------+--------+
|  1 | jason | male   |      1 |
|  5 | jerry | female |      3 |
+----+-------+--------+--------+
2 rows in set (0.00 sec)mysql> select * from dep;
+----+-----------+--------------------------+
| id | dep_name  | dep_desc                 |
+----+-----------+--------------------------+
|  1 | 外交部    | 形象代言人               |
|  3 | 技术部    | 技术能力有限部门         |
+----+-----------+--------------------------+
2 rows in set (0.00 sec)
"""
5.多对多
图书与作者的例子一本书可以有多个作者一个作者可以写多本书直接创建两个相互更新的表是不可以的,可以通过中间表来实现即中间表建立两个表的对应关系,两个表内部可以完全不相关
create table book(id int primary key auto_increment, title char(16), price int ); create table author( id int primary key auto_increment, name char(16), gender char(16) ); create table book2author( id int primary key auto_increment, book_id int, author_id int, foreign key(book_id) references book(id) on update cascade # 同步更新 on delete cascade, # 同步删除 foreign key(author_id) references author(id) on update cascade # 同步更新 on delete cascade # 同步删除 ); insert into book(title,price) values ('活着','69.96'), ('围城','99.99'), ('python全栈开发','21000'); insert into author(name,gender) values ('jason','male'), ('egon','female'), ('kevin','male'); insert into book2author(book_id,author_id) values (1,1), (1,2), (1,3), (2,1), (2,3), (3,1), (3,2);
6.一对一关系
客户表和学生表(客户报名之后就成为了学生)
create table customer(id int primary key auto_increment,name char(20) not null,qq char(10) not null, phone char(16) not null ); create table student( id int primary key auto_increment, class_name char(20) not null, customer_id int unique, # 该字段一定要是唯一的 foreign key (customer_id) references customer(id) # 外键的字段一定要保证unique on delete cascade on update cascade ); # 三种外键关系都是用foreign key,区别在于如何使用以及其他条件限制即可做出三种关系

三、修改表

mysql 对大小写不敏感
1.语法:
1.修改表名ALTER TABLE 表名   RENAME 新表名;2. 增加字段ALTER TABLE 表名    ADD 字段名  数据类型 [完整性约束条件…], ADD 字段名  数据类型 [完整性约束条件…];ALTER TABLE 表名    ADD 字段名 数据类型 [完整性约束条件…] FIRST; ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名; 3. 删除字段 ALTER TABLE 表名 DROP 字段名; 4. 修改字段 # modify只能改字段数据类型完整约束,不能改字段名,但是change可以! ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…]; ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…]; ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];

四、复制表

# 查询语句执行的结果也是一张表,可以看成虚拟表# 复制表结构+记录 (key不会复制: 主键、外键和索引)
create table new_service select * from service;# 只复制表结构 select * from service where 1=2; //条件为假,查不到任何记录 create table new1_service select * from service where 1=2; create table t4 like employees;

转载于:https://www.cnblogs.com/wangtenghui/p/10940868.html

mysql 数据库之表操作相关推荐

  1. 95.第十九章 MySQL数据库 -- 单表操作(五)

    3.7 DQL语句 3.7.1 单表操作 官方帮助:https://dev.mysql.com/doc/refman/8.0/en/select.html 语法: SELECT[ALL | DISTI ...

  2. R操作MySQL数据库创建表、删除表、增删改查(CRUD)

    R操作MySQL数据库创建表.删除表.增删改查(CRUD) 关系数据中的数据是按照一定范式去存储的.当我们需要非常高级和复杂的Sql查询就可以使用关系数据库的数据资产.不光java和python可以容 ...

  3. MySQL数据库(表的CRUD基础操作(最常用))

    作者:渴望力量的土狗 博客主页:渴望力量的土狗的博客主页 专栏:MySQL数据库 工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器--牛客网 点击免费注册和我一起刷题吧 目录 理解CR ...

  4. 2021年大数据Hive(三):手把手教你如何吃透Hive数据库和表操作(学会秒变数仓大佬)

    全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 Hive数据库和表操作 一.数据库操作 1.创建数据库 2.创建 ...

  5. Linux下Mysql数据库的基础操作

    Linux下Mysql数据库的基础操作 一.Mysql数据介绍 二.数据库相关术语介绍 1.数据库相关名词 2.相关术语介绍 三.Mysql数据库的管理 1.创建数据库用户 2.查询用户状态 3.修改 ...

  6. mysql数据库代码_【代码总结】MYSQL数据库的常见操作

    ============================== MYSQL数据库的常见操作 ============================== 一.mysql的连接与关闭 -h:指定所连接的服 ...

  7. 第二百七十九节,MySQL数据库-pymysql模块操作数据库

    MySQL数据库-pymysql模块操作数据库 pymysql模块是python操作数据库的一个模块 connect()创建数据库链接,参数是连接数据库需要的连接参数 使用方式: 模块名称.conne ...

  8. mysql 编辑数据库内容_详解mysql数据库增删改操作

    插入数据 insert into 表名(列名1,列名2,列名3) values(值1,值2,值3); insert into user(user_id,name,age) values(1,'nice ...

  9. mysql数据库限流方案_用于对MySQL数据库的并发操作进行控制的方法及装置的制造方法_3...

    的数据库操作特点,预先设置的所述第一限流类型可以不同于本实施例中的设置,同样可以实现本申请的技术方案,也在本申请的保护范围之内. [0103]步骤102-3:判断MySQL数据库的threads_ru ...

最新文章

  1. 红黑树:自平衡的二叉查找树
  2. c语言递归求塔移动次数,【C语言】Hanoi(汉诺)塔问题,求移动盘子的步骤(递归法)...
  3. win10子系统 php,启用 Win10 的 Linux 子系统
  4. 记一次ubuntu误操作导致无法用sudo
  5. 【AudioVideo】MediaRecorder概述(21)
  6. php模板怎么导入数据类型,smarty模板引擎之分配数据类型,smarty模板数据类型_PHP教程...
  7. python的namedtuple
  8. 《左耳听风》-ARTS-打卡记录-第十一周
  9. 阿里云虚拟主机内存占用大问题解决
  10. js实现文件下载有很多种方式,本文主要介绍7种。
  11. Unity-拓展篇-数字字体制作
  12. 揭开AutoRun功能的神秘面纱
  13. 华南产业集团发力数字经济,城链科技发布会成功召开
  14. CAD转JPG图片,在线转换成高质量彩色图片
  15. 阿里云服务器ECS装好宝塔 但访问不了面板的解决方法
  16. 解决Oracle报错ORA-01653: 表xx无法通过 8192 (在表空间 xx_data 中) 扩展
  17. 标签超出图像控件c语言,VC++标签控件之图像标签控件
  18. Python——字典的遍历
  19. 吹牛前请看这篇:“智能”物流 VS “智慧”物流
  20. Linux配置JDK环境——步骤详解

热门文章

  1. nginx 限制某些类型的客户端的访问
  2. 事件与委托的一点概念理解
  3. go 数组任意位置插入数字类型的元素
  4. Nodejs之旅开始
  5. Git Specification
  6. MyBatis复习(九):MyBatis整合C3P0连接池
  7. C语言-输入一个正整数,输出它的所有质数因子
  8. python 并发编程 多线程 目录
  9. linux下sock_raw和sock_stream读取缓存的区别
  10. nginx配置跨域、gzip加速、代理详细讲解