5月9日 python学习总结 外键、表之间的关联关系、修改表、清空表内容、复制表...
一、外键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学习总结 外键、表之间的关联关系、修改表、清空表内容、复制表...相关推荐
- 5月14日 python学习总结 视图、触发器、事务、存储过程、函数、流程控制、索引...
一.视图 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次用的直接使用即可 2.为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何用视图 create view t ...
- python dict hash算法_2020年3月26日python学习笔记——hash
什么是哈希? hash,一般翻译做散列.杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是,散列 ...
- 4月25日 python学习总结 互斥锁 IPC通信 和 生产者消费者模型
一.守护进程 import random import time from multiprocessing import Processdef task():print('name: egon')ti ...
- 银角大王 python_2020年3月14日python学习笔记——练习题(第二章)——————重要...
练习 针对列表names=['金角大王', '黑姑娘', 'rain', 'eva', '狗蛋', '银角大王', 'eva','鸡头']进入以下操作 1.通过names.index()的方法返回第2 ...
- 关于2020年8月7日—8月29日实习学习到的内容
关于2020年8月7日-8月29日实习学习到的内容 我是一名大三(准大四)的学生,本专业学习通信工程,从三月份自学前端至今,七月份找到了一份实习,感觉在实习中学习到的内容会比较深入一点叭.关于这篇文章 ...
- 9月10日OpenCV学习笔记——Mask、彩色直方图、人脸检测
文章目录 前言 一.Mask 二.彩色直方图 三.画出基本图形 四.图片上显示文本 五.人脸检测 前言 本文为9月10日OpenCV学习笔记--Mask.彩色直方图.人脸检测,分为五个章节: Mask ...
- 2023年5月19日Redis学习记录(笔记md文档非本人亲自编写,仅作为个人学习记录,无其他目的)
Redis快速入门 Redis的常见命令和客户端使用 1.初识Redis Redis是一种键值型的NoSql数据库,这里有两个关键字: 键值型 NoSql 其中键值型,是指Redis中存储的数据都是以 ...
- 【python】-- pymsql 外键
pymsql 外键 本片是以上一篇pymsql操作MySQL的补充,主要演示pymysql的外键操作使用 一.一对一外键关联 1.示意图 2.一对一外键关联示例 2.1.创建表结构,插入数据 from ...
- python设置mysql外键_python基础教程之MySQL数据库之-foreign key 外键(一
今日重点:外键 一对多 多对多 一对一 -------------------------------------------------------------------------------- ...
最新文章
- 如何有效防止域名被电信服务商劫持(电信114弹窗广告)
- OpenMP在ARM-Linux以及NDK中的编译和使用
- 《Adobe Illustrator CS4中文版经典教程》—第0课0.11节将外观属性存储为图形样式...
- 数据库和ORMS:使用Tortoise ORM与数据库通信
- Linux之虚拟机配置双网卡
- USB3.1与Type-C有什么区别
- POJ1276:Cash Machine(多重背包)
- 苹果傲慢,售后服务中外有别
- java前端开发JD
- NAND Flash 芯片测试
- Wolfram Mathematic流程控制
- 统信UOS个人版安装与激活教程2020.5.17
- QT实现的人机对战五子棋
- mysql etimedout_NodeJS:MySQL有时会引发ETIMEDOUT错误
- 国足3比1叙利亚,晋级世预赛12强赛,国足会在12强赛中取得怎样的成绩呢?
- 用尽可能多的字数介绍Leaky ReLU激活函数
- Practical Machine Learning with H2O.2016.12
- 如何把一张图片分割成几张
- 基于北斗RDSS短报文的海洋浮标在线水质/气象综合监测系统
- 英语四级单选测试软件,英语四级单选选择
热门文章
- 51nod 1393 0和1相等串 思路 : map存前缀和
- oracle数据库中索值,Oracle数据库中的索引详解
- 二叉树的锯齿形层次遍历—leetcode103
- VMWare安装DOS系统实现文件共享
- sql中使用“where 1=1 and ....“ 到底影响效率吗,回答不会也永远不会
- 6.切勿对STL容器的线程安全性有不切实际的依赖
- html代码中本地路径里斜杠 / 和反斜杠 \ 的区别
- scikit-learning_特征分析(数据挖掘入门与实践-实验7)
- MongoDB之Hadoop驱动介绍
- Oracle中如何插入特殊字符: 和 ' (多种解决方案)