一、外键foreign key  

      外键约束:

1、必须先创建被关联表才能创建关联表

2、插入记录时,必须先插入被关联表的记录,才能插入关联表(要用到被关联表)的记录

3、若不设置同步更新和同步删除,更新和删除都会受到限制    

#表类型必须是innodb存储引擎,且被关联的字段,即references指定的另外一个表的字段,必须保证唯一
create table department(
id int primary key,
name varchar(20) not null
)engine=innodb;#dpt_id外键,关联父表(department主键id),同步更新,同步删除
create table employee(
id int primary key,
name varchar(20) not null,
dpt_id int,
constraint fk_name foreign key(dpt_id)
references department(id)
on delete cascade      #删除同步
on update cascade     #更新同步    不写的话,被关联表的更新和删除都受到限制
)engine=innodb;#先往父表department中插入记录
insert into department values
(1,'欧德博爱技术有限事业部'),
(2,'艾利克斯人力资源部'),
(3,'销售部');#再往子表employee中插入记录
insert into employee values
(1,'egon',1),
(2,'alex1',2),
(3,'alex2',2),
(4,'alex3',2),
(5,'李坦克',3),
(6,'刘飞机',3),
(7,'张火箭',3),
(8,'林子弹',3),
(9,'加特林',3)
;#删父表department,子表employee中对应的记录跟着删
mysql> delete from department where id=3;
mysql> select * from employee;
+----+-------+--------+
| id | name  | dpt_id |
+----+-------+--------+
|  1 | egon  |      1 |
|  2 | alex1 |      2 |
|  3 | alex2 |      2 |
|  4 | alex3 |      2 |
+----+-------+--------+#更新父表department,子表employee中对应的记录跟着改
mysql> update department set id=22222 where id=2;
mysql> select * from employee;
+----+-------+--------+
| id | name  | dpt_id |
+----+-------+--------+
|  1 | egon  |      1 |
|  3 | alex2 |  22222 |
|  4 | alex3 |  22222 |
|  5 | alex1 |  22222 |
+----+-------+--------+

二、表的关联关系

    关系有:     

      一对多 1-N、

      多对多 N-N、

        一对一   1-1、

    实现:    

    1、员工与部门之间的关系是一对多的,用外键方式表示这种关系  foreign key(dep_id) references dep(id)

create table dep(id int primary key auto_increment,dep_name char(10),dep_comment char(60)
);create table emp(id int primary key auto_increment,name char(16),gender enum('male','female') not null default 'male',dep_id int,foreign key(dep_id) references dep(id)   #员工与部门之间的关系是多对一的,用外键来表示这种关联关系
);insert into dep(dep_name,dep_comment) values
('sb教学部','sb辅导学生学习,教授python课程'),
('外交部','老男孩上海校区驻张江形象大使'),
('nb技术部','nb技术能力有限部门');insert into emp(name,gender,dep_id)  values
('alex','male',1),
('egon','male',2),
('lxx','male',1),
('wxx','male',1),
('wenzhou','female',3);

一对多1-N

    

    2、作者与书之间是 N-N 的关系,一个作者可以写多本书,一本书可以被多个作者一起完成,

      实现这种多对多关系,我们需要建立一个关系表,用来作为两张表关联的介质 

create table author(id int primary key auto_increment,name char(16)
);create table book(id int primary key auto_increment,bname char(16),price int
);insert into author(name) values
('egon'),
('alex'),
('wxx')
;
insert into book(bname,price) values
('python从入门到入土',200),
('葵花宝典切割到精通',800),
('九阴真经',500),
('九阳神功',100)
;#作者与书之间是 N-N 的关系,一个作者可以写多本书,一本书可以被多个作者一起完成,
#实现这种多对多关系,我们需要建立一个关系表,用来作为两张表关联的介质

create table author2book(id int primary key auto_increment,author_id int,book_id int,foreign key(author_id) references author(id)on update cascadeon delete cascade,foreign key(book_id) references book(id)on update cascadeon delete cascade
);insert into author2book(author_id,book_id) values
(1,3),
(1,4),
(2,2),
(2,4),
(3,1),
(3,2),
(3,3),
(3,4);

多对多 N-N

   

3、客户成为学生,所以顾客与学生是一对一的,不会有多个客户成为一个学生,或者一个客户成为多个学生这种情况
     对于一对一的关联关系,我们在学生表里加上外键,并且让该字段必须唯一    

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 cascadeon update cascade
);insert into customer(name,qq,phone) values
('李飞机','31811231',13811341220),
('王大炮','123123123',15213146809),
('守榴弹','283818181',1867141331),
('吴坦克','283818181',1851143312),
('赢火箭','888818181',1861243314),
('战地雷','112312312',18811431230)
;#增加学生
insert into student(class_name,customer_id) values
('脱产3班',3),
('周末19期',4),
('周末19期',5)
;

一对一 1-1

三、修改表      

语法:
1. 修改表名ALTER TABLE 表名 RENAME 新表名;2. 增加字段ALTER TABLE 表名ADD 字段名  数据类型 [完整性约束条件…],ADD 字段名  数据类型 [完整性约束条件…];ALTER TABLE 表名ADD 字段名  数据类型 [完整性约束条件…]  FIRST;ALTER TABLE 表名ADD 字段名  数据类型 [完整性约束条件…]  AFTER 字段名;3. 删除字段ALTER TABLE 表名 DROP 字段名;4. 修改字段ALTER TABLE 表名 MODIFY  字段名 数据类型 [完整性约束条件…];ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];

四、清空表内容

  第一种  

delete from tb1;
#强调:这条命令可以将表中的数据都删除,但是不能将id重置为0,当再次插入数据时会接着之前的id排序继续往下,所以该命令并不是真实的清空表#删除操作快,但是无法恢复,不具备日志

第二种

truncate tb1;
# 用以清空表,并将id置为0,删除数据可恢复

五、复制表

#复制表结构+记录 (key不会复制: 主键、外键和索引)
mysql> create table new_service select * from service;#只复制表结构
mysql> select * from service where 1=2;       #条件为假,查不到任何记录
Empty set (0.00 sec)
mysql> create table new1_service select * from service where 1=2;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> create table t4 like employees;

转载于:https://www.cnblogs.com/95lyj/p/9014852.html

5月9日 python学习总结 外键、表之间的关联关系、修改表、清空表内容、复制表...相关推荐

  1. 5月14日 python学习总结 视图、触发器、事务、存储过程、函数、流程控制、索引...

    一.视图 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次用的直接使用即可 2.为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何用视图 create view t ...

  2. python dict hash算法_2020年3月26日python学习笔记——hash

    什么是哈希? hash,一般翻译做散列.杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是,散列 ...

  3. 4月25日 python学习总结 互斥锁 IPC通信 和 生产者消费者模型

    一.守护进程 import random import time from multiprocessing import Processdef task():print('name: egon')ti ...

  4. 银角大王 python_2020年3月14日python学习笔记——练习题(第二章)——————重要...

    练习 针对列表names=['金角大王', '黑姑娘', 'rain', 'eva', '狗蛋', '银角大王', 'eva','鸡头']进入以下操作 1.通过names.index()的方法返回第2 ...

  5. 关于2020年8月7日—8月29日实习学习到的内容

    关于2020年8月7日-8月29日实习学习到的内容 我是一名大三(准大四)的学生,本专业学习通信工程,从三月份自学前端至今,七月份找到了一份实习,感觉在实习中学习到的内容会比较深入一点叭.关于这篇文章 ...

  6. 9月10日OpenCV学习笔记——Mask、彩色直方图、人脸检测

    文章目录 前言 一.Mask 二.彩色直方图 三.画出基本图形 四.图片上显示文本 五.人脸检测 前言 本文为9月10日OpenCV学习笔记--Mask.彩色直方图.人脸检测,分为五个章节: Mask ...

  7. 2023年5月19日Redis学习记录(笔记md文档非本人亲自编写,仅作为个人学习记录,无其他目的)

    Redis快速入门 Redis的常见命令和客户端使用 1.初识Redis Redis是一种键值型的NoSql数据库,这里有两个关键字: 键值型 NoSql 其中键值型,是指Redis中存储的数据都是以 ...

  8. 【python】-- pymsql 外键

    pymsql 外键 本片是以上一篇pymsql操作MySQL的补充,主要演示pymysql的外键操作使用 一.一对一外键关联 1.示意图 2.一对一外键关联示例 2.1.创建表结构,插入数据 from ...

  9. python设置mysql外键_python基础教程之MySQL数据库之-foreign key 外键(一

    今日重点:外键 一对多 多对多 一对一 -------------------------------------------------------------------------------- ...

最新文章

  1. 如何有效防止域名被电信服务商劫持(电信114弹窗广告)
  2. OpenMP在ARM-Linux以及NDK中的编译和使用
  3. 《Adobe Illustrator CS4中文版经典教程》—第0课0.11节将外观属性存储为图形样式...
  4. 数据库和ORMS:使用Tortoise ORM与数据库通信
  5. Linux之虚拟机配置双网卡
  6. USB3.1与Type-C有什么区别
  7. POJ1276:Cash Machine(多重背包)
  8. 苹果傲慢,售后服务中外有别
  9. java前端开发JD
  10. NAND Flash 芯片测试
  11. Wolfram Mathematic流程控制
  12. 统信UOS个人版安装与激活教程2020.5.17
  13. QT实现的人机对战五子棋
  14. mysql etimedout_NodeJS:MySQL有时会引发ETIMEDOUT错误
  15. 国足3比1叙利亚,晋级世预赛12强赛,国足会在12强赛中取得怎样的成绩呢?
  16. 用尽可能多的字数介绍Leaky ReLU激活函数
  17. Practical Machine Learning with H2O.2016.12
  18. 如何把一张图片分割成几张
  19. 基于北斗RDSS短报文的海洋浮标在线水质/气象综合监测系统
  20. 英语四级单选测试软件,英语四级单选选择

热门文章

  1. 51nod 1393 0和1相等串 思路 : map存前缀和
  2. oracle数据库中索值,Oracle数据库中的索引详解
  3. 二叉树的锯齿形层次遍历—leetcode103
  4. VMWare安装DOS系统实现文件共享
  5. sql中使用“where 1=1 and ....“ 到底影响效率吗,回答不会也永远不会
  6. 6.切勿对STL容器的线程安全性有不切实际的依赖
  7. html代码中本地路径里斜杠 / 和反斜杠 \ 的区别
  8. scikit-learning_特征分析(数据挖掘入门与实践-实验7)
  9. MongoDB之Hadoop驱动介绍
  10. Oracle中如何插入特殊字符: 和 ' (多种解决方案)