mysql修改级联表数据_MySQL数据库 外键,级联, 修改表的操作

1.外键: 用来建立两张表之间的关系

- 一对多

- 多对多

- 一对一

研究表与表之间的关系:

1.定义一张 员工部门表

id, name, gender, dep_name, dep_desc

- 将所有数据存放在一张表中的弊端:

1.结构不清晰 ---> 不致命

2.浪费空间 ---> 不致命

3.可扩展性极差 ---> 不可忽视的弊端

- 类似于将所有python代码存放在一个py文件中,强耦合到一起了----> 解耦合 ----> 拆分表

- 拆分表解决以上问题.

- 需要给两张表之间,建立一种强有力的关系, 使用 “外键”

- !!!!! ****** 如何确认表与表之间的关系是 (一对多、多对多、一对一)

- 注意: 要确立两张表之间的关系,必须站在两个位置去思考:

- 站在员工表的位置: 多个员工能否对应一个部门? 能!!!

- 员工与部门: 多 对 一

- 员工表单向 多 对 一 部门表

- 站在部门表的位置: 多个部门能够对应一个员工? 不能!!!

总结: 凡是单向 多 对 一 的表关系,称之为 一对多 的外键关系。

- 外键: 语法: foreign key(当前表中建立关系的外键字段) references 被关联表名(id)

23c85a63ab548f4f6d362465a804a2a1.png

- 一对多

# 创建两张表

1.必须先建立被关联表,再建立关联表

# 被关联表:

dep:

create table dep(

id int primary key auto_increment,

dep_name varchar(16),

dep_desc varchar(255)

);

# 关联表:

emp:

create table emp(

id int primary key auto_increment,

name varchar(16),

age int,

gender enum('male', 'female', 'others') default 'male',

dep_id int not null,

foreign key(dep_id) references dep(id)

);

b6401dc5efc5d252bff3bfb4987ebb1b.png

注:KEY中MUL代表外键

# 插入数据:

- 1.必须先插入被关联表(dep)的数据,再插入关联表(emp)的数据。

# dep:

insert into dep(dep_name, dep_desc) values('nb_外交部', '国际形象大使部门'),

('sb_教学部', '造程序员部门!!!!'),

('技术部', '技术有限部门');

# emp:

insert into emp(name, age, gender, dep_id)

values('tank', 17, 'male', 1),

('jason', 70, 'male', 2),

('sean', 50, 'male', 2),

('egon', 88, 'male', 2),

('owen', 95, 'female', 3);

# 报错,

insert into emp(name, age, gender, dep_id) values('大饼', 100, 'others', 999);

-级联更新与级联删除(把关联数据一起变更)

- on update cascade

- on delete cascade

-创建表

#被关联表:

dep2:

create table dep2(

id int primary key auto_increment,

dep_name varchar(16),

dep_desc varchar(255)

);

#关联表:

emp2:

create table emp2(

id int primary key auto_increment,

name varchar(16),

age int,

gender enum('male','female','others') default 'male',

dep_id int not null,

foreign key(dep_id) references dep2(id)

on update cascade

on delete cascade

);

- 插入数据

#dep:

insert into dep2(dep_name,dep_desc)values('nb_外交部','国际形象大使部门'),

('sb_教学部','造程序员部门!!!!'),('技术部','技术有限部门');

#emp:

insert into emp2(name,age,gender,dep_id)

values('tank',17,'male',1),

('jason',70,'male',2),

('sean',50,'male',2),

('egon',88,'male',2),

('owen',95,'female',3);

#报错

insert into emp(name,age,gender,dep_id)values('大饼',100,'others',999);

- 更新数据或删除数据

-更新记录

update dep2 set id=200 where id=1;

-删除记录

delete from dep2 where id=200;

986e9a4ca81bee1664103112d9b5b14d.png

因为级联,关联数据一起变更为200

注意:mysql中没有多对一,只有一对多

- 多对多

也必须站在两张表的位置去思考;

df1bbabd6522ce0f1acd4017d12fb172.png

- 错误示范:

#- 创建book表

create table book(

id int primary key auto_increment,

title varchar(20),

price int,

book_content varchar(255),

author_id int,

foreign key(author_id) references author(id)

on update cascade

on delete cascade

);

#- 创建author表

create table author(

id int primary key auto_increment,

name varchar(16),

age int,

book_id int,

foreign key(book_id) references book(id)

on update cascade

on delete cascade

);

- 问题: 无法知道哪张表是被关联表

- 利用第三张表,为两张表建立“多对多外键关系”。

#-book:

create table book(

id int primary key auto_increment,

title varchar(20),

price int,

book_content varchar(255)

);

#-auther:

create table author(

id int primary key auto_increment,

name varchar(16),

age int

);

#-book2author:

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

);

be8ef17313e5455e0682e257e4dec65d.png

- 插入数据

#- book

insert into book(title, price, book_content) values

('金瓶mei', 199, '讲述朦胧时光的小故事'),

('python从入门到断气', 2000, '学习如何一夜秃头'),

('三体', 200, '跟着大佬进入宇宙奇幻世界')

;

- author

insert into author(name, age) values

('egon', 68),

('jason', 88);

- book2author:

insert into book2author(book_id, author_id) values

(1, 1),

(1, 2),

(2, 2),

(3, 1);

# 报错, 插入的数据,book_id, author_id必须存在

insert into book2author(book_id,author_id) values(4, 4);

# 更新或删除

#更新

update book set price =666 where id =1;

update book set id=4 where id=1;

#删除

delete from book where id=4; (会删除关联表内容)

- 一对一:

a309c24b7afb51f0fa22b7ec11734ce9.png

- user_info:

id, name, age, gender, hobby, id_card

- user:

id , name, age, detail_id(外键)

- detail:

id, gender, hobby, id_card

user与detail表建立了 一对一的外键 关系。

foreign key 应该建在 使用频率较高的一方。

-创建表

#被关联表

create table customer(

id int primary key auto_increment,

name varchar(16),

media varchar(32)

);

#关联表

create table student(

id int primary key auto_increment,

addr varchar(255),

phone_char(11),

id_card char(18),

# 外键必须设置成唯一的

customer_id int unique,

forign key(customer_id) references customer(id)

on update cascade

on delete cascade

);

- 插入数据

insert into customer(name,media) values

('hcy','facebook'),

('zsb1','ig'),

('zsb2','vk'),

('hb','探探');

insert into student(addr,phone,id_card,customer_id) values

('上海', '', '', 1),

('北京', '', '', 2);

# 报错,一对一,关系必须 一一对应

insert into student(addr, phone, id_card, customer_id) values ('上海', '', '', 1);

- 插入数据:

insert into

修改表的操作

- 语法: 注意: mysql 关键字不区分大小写

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 旧字段名 新字段名 新数据类型 [完整性约束条件…]; # 修改字段名与字段类型

- 复制表的操作:

复制表结构+记录 (key不会复制: 主键、外键和索引)

mysql> create table new_service select * from service;

只复制表结构

# 将select * from service where 1=2; ---> 不要真实数据,需要表结构

mysql> create table new_customer select * from customer where 1=2;

MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作)

MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作): a.创建2张表 create table userinfo(nid int not nul ...

第二百八十节,MySQL数据库-外键链表之一对多,多对多

MySQL数据库-外键链表之一对多,多对多 外键链表之一对多 外键链表:就是a表通过外键连接b表的主键,建立链表关系,需要注意的是a表外键字段类型,必须与要关联的b表的主键字段类型一致,否则无法创建索 ...

MySQL数据库(4)_MySQL数据库外键约束、表查询

一.外键约束 创建外键 --- 每一个班主任会对应多个学生 , 而每个学生只能对应一个班主任 ----主表 CREATE TABLE ClassCharger( id TINYINT PRIMARY ...

MySQL数据库--外键约束及外键使用

什么是主键.外键关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键. 比如: 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯 ...

mysql数据库外键、主键详解

一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如  学生表(学号,姓名,性别,班级) 其中每个学生的学 ...

Database学习 - mysql 数据库 外键

外键 外键约束子表的含义:如果在父表中赵达不到候选键,则不允许在子表上进行insert/update 外键预约对父表的含义:在父表上进行update/delete以更新或删除子表中有一条或多条对应匹配 ...

MySQL数据库-外键链表之一对多,多对多

外键链表之一对多 外键链表:就是a表通过外键连接b表的主键,建立链表关系,需要注意的是a表外键字段类型,必须与要关联的b表的主键字段类型一致,否则无法创建索引 一对多:就是b表的某一个字段值对应a表外 ...

(4)MySQL的外键(不同表之间的数据关联)

问题:下列这张表中部门等列名下输入的数据没有约束,那么可以随便填写符合规则的数据但是不符合实际需求的值,这样就造成了不符合规则的数据在表中存在,外键就是为了解决这个问题,管理员可以在另一张表中设置好符 ...

黑马MySQL数据库学习day03 级联 多表查询 连接和子查询 表约束

/* 存在外键的表 删表限制: 1.先删除从表,再删除主表.(不能直接删除主表,主表被从表引用,尽管实际可能还没有记录引用) 建表限制: 1.必须先建主表,再建从表(没有主表,从表无法建立外键关系) ...

随机推荐

swift 定位

iOS 8 及以上需要在info.plist文件中添加下面两个属性 NSLocationWhenInUseUsageDescription 使用应用期间 NSLocationAlwaysUsageDe ...

poj 1830 开关问题

开关问题 题意:给n(0 < n < 29)开关的初始和最终状态(01表示),以及开关之间的关联关系(关联关系是单向的输入a b表示a->b),问有几种方式得到最终的状态.否则输出字 ...

Html5的&lt&semi;button&gt&semi;标签

1.标签是双标签,其内可添加文字,图片等复杂的样式. ​2.不仅可以在表单中使用,还可以在其他块元素和内联元素中使用. 3.一般在input标签内添加name属性,否则提交后不显示.

win10关不了机解决办法以及win10怎么禁止开机启动项

1.win10关不了机解决办法:https://zhidao.baidu.com/question/693962749213927924.html 2.win10怎么禁止开机启动项:https://j ...

Java的常用命令javac与java

javac 可以使用javac -h来查看常用的命令: -> ~ # javac -help 用法: javac 其中, ...

Linux使用笔记

1:Ubuntu系统获取超级权限: 在终端输入:sudo passwd,重置uinx密码.然后输入 su ,输入密码,即可进入root权限. 2:更改文件属性 Linux文件的基本权限有九个,分别是o ...

case when 多个条件 以及case when 权重排序

1. case when 多个条件 语法: SELECT nickname,user_name,CASE WHEN user_rank = '5' THEN '经销商' WHEN user_rank ...

mxnet数据操作

# coding: utf-8 # In[2]: from mxnet import nd # In[3]: x = nd.arange(12) x # In[4]: x.shape,x.size # ...

腾讯Web前端开发框架JX&lpar;Javascript eXtension tools&rpar;

转自:Web前端开发-Web前端工程师 » 腾讯Web前端开发框架JX(Javascript eXtension tools) JX – Javascript eXtension tools 一个类似 ...

洛谷P4762 &lbrack;CERC2014&rsqb;Virus synthesis(回文自动机&plus;dp)

传送门 回文自动机的好题啊 先建一个回文自动机,然后记$dp[i]$表示转移到$i$节点代表的回文串的最少的需要次数 首先肯定2操作越多越好,经过2操作之后的串必定是一个回文串,所以最后的答案肯定是由 ...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503997.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python3 urllib安装_对python3 urllib包与http包的使用详解

urllib包和http包都是面向HTTP协议的。其中urllib主要用于处理 URL&#xff0c;使用urllib操作URL可以像使用和打开本地文件一样地操作。而 http包则实现了对 HTTP协议的封装&#xff0c;是urllib.request模块的底层。1.urllib包简介2. http 包简介1.urllib包简介urllib包主要模…

OpenCV学习笔记 - 使用密集光流检测运动的简单方法

一、简述 使用光流进行运动检测的方法与帧间差分方法类似。主要区别在于第一步,我们将从光流而不是帧差分中获取初始运动信息(一些神经网络模型也是基于光流和原始图像进行运动识别训练的)。 该算法概述如下: 1、计算密集光流 2、获得运动掩模的阈值光流 3、在运动蒙版中查…

mysql 5.6.27安装图解_Linux下MySQL 5.6.27 安装教程

本文实例为大家分享了Linux下MySQL 5.6.27 安装教程&#xff0c;供大家参考&#xff0c;具体内容如下1、下载地址2、将压缩包上传到服务器3、解压tar -zxf mysql-5.6.27-linux-glibc2.5-x86_64.tar.gz4、移动压缩包至mysql文件夹下mp mysql-5.6.27-linux-glibc2.5-x86_64 /usr…

linux部署tomcat项目404_Tomcat部署项目的几种常见方式

点击蓝字“程序员考拉”欢迎关注&#xff01;1 /直接将web项目文件件拷贝到webapps目录中这是最常用的方式&#xff0c;Tomcat的Webapps目录是Tomcat默认的应用目录&#xff0c;当服务器启动时&#xff0c;会加载所有这个目录下的应用。如果你想要修改这个默认目录&#xff0c;…

mysql bug_MySQL 记一次 Bug发现过程

水平有限有误请谅解这个问题是一位朋友DBA-老庄的,他们使用的是PXC环境如下:MySQL:5.7.18-15wsrep:29.20os:Red Hat Enterprise Linux Server release 6.5实际上我对PXC并不是很熟&#xff0c;通过分析pstack还是找到了问题。并且提交Bug&#xff0c;percona确认了。虽然我不是…

用python将word文档导入数据库_python读取word文档,插入mysql数据库的示例代码

表格内容如下&#xff1a;1、实现批量导入word文档&#xff0c;取文档标题中的数字作为编号2、除取上面打钩的内容需要匹配出来入库入库&#xff0c;其他内容全部直接入库mysql# wuyanfeng# -*- coding:utf-8 -*-# 读取docx中的文本代码示例import docximport pymysqlimport re…

mysql编程语法_MYSQL语法(一)

数据表准备&#xff1a;CREATE TABLE student3 ( id int, name varchar(20), age int, sex varchar(5), address varchar(100), math int, english int);INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES(1,马云,55,男,杭州,66,78),(2,马化腾,45,女,深圳,98…

python绘制混淆矩阵_如何实现python绘制混淆矩阵?

大家从python基础到如今的入门&#xff0c;想必都对python有一定基础&#xff0c;今天小编给大家带来一个关于python的高阶内容——绘制混淆矩阵&#xff0c;一起来看下吧~介绍&#xff1a;混淆矩阵通过表示正确/不正确标签的计数来表示模型在表格格式中的准确性。计算/绘制混淆…

用python做舆情分析系统_科学网-如何用Python做舆情时间序列可视化?-王树义的博文...

如何批量处理评论信息情感分析&#xff0c;并且在时间轴上可视化呈现&#xff1f;舆情分析并不难&#xff0c;让我们用Python来实现它吧。痛点你是一家连锁火锅店的区域经理&#xff0c;很注重顾客对餐厅的评价。从前&#xff0c;你苦恼的是顾客不爱写评价。最近因为餐厅火了&a…

mysql load data outfile_mysql load data infile和into outfile的常规用法:

load data 可以将文件中的数据导入到表中,这种导入方法快速,高效.但是很容易出错,用法也比较复杂。需要额外定定义行分隔符,列分隔符.不同的格式文件,行,列分隔符的表示方式不一样。但是load data 的默认行列分隔符和txt的文件一样,所以为了少出错,最好使用与txt文件导入常规使…

tensorflow python3.6_[教程]Tensorflow + win10 + CPU + Python3.6+ 安装教程

由于各种原因&#xff0c;清华镜像源已经彻底挂掉了&#xff0c;但是目前网上的各种教程基本上都是采取设置清华镜像源来加快下载速度&#xff0c;所以这给小白带来了很大的困扰&#xff01;这里我将通过合理上网工具来直接下载源镜像。注意&#xff1a;本次教程适用于Win10系统…

正则表达式 任意数字_作为运维还不会正则表达式?赶快看这篇学习一下

概述正则表达式是很多运维薄弱的一项技能。大家很多时候都会觉得正则表达式难记、难学、难用&#xff0c;但不可否认的是正则表达式是一项很重要的技能&#xff0c;所有今天将学习和使用正则表达式时的关键点整理如下&#xff0c;仅供参考。什么是正则表达式&#xff1f;正则表…

vs xaml 语句完成 自动列出成员_数据传输 | mysqldiff/mysqldbcompare 实现 DTLE 自动化测试...

作者&#xff1a;张静文爱可生上海研发中心成员&#xff0c;测试工程师&#xff0c;负责 DMP 以及 DTLE 自动化测试。本文来源&#xff1a;原创投稿 *爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。任务&#xff1a;测试开…

js去el的map_JS中也可以使用JSTL和EL标签

//往上滑是调用分页function Ajax(currPage, pageSize) { // ajax后台交互String currPage,String pageSizevar el, Plist, i;el document.getElementById(thelist);var cancle function(options) {var pattern ${pageContext.request.contextPath}/integralParadise/userIn…

python 局域网主机扫描_python扫描局域网主机名

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

python 并发执行命令_python: 多线程实现的两种方式及让多条命令并发执行

一 概念介绍Thread 是threading模块中最重要的类之一&#xff0c;可以使用它来创建线程。有两种方式来创建线程&#xff1a;一种是通过继承Thread类&#xff0c;重写它的run方法&#xff1b;另一种是创建一个threading.Thread对象&#xff0c;在它的初始化函数(__init__)中将可…

python全系列之爬虫scrapy_python爬虫scrapy之登录知乎

下面我们看看用scrapy模拟登录的基本写法&#xff1a;注意&#xff1a;我们经常调试代码的时候基本都用chrome浏览器&#xff0c;但是我就因为用了谷歌浏览器(它总是登录的时候不提示我用验证码&#xff0c;误导我以为登录时不需要验证码&#xff0c;其实登录时候必须要验证码的…

python 类方法 函数_Python OOP类中的几种函数或方法总结

概述实例方法使用实例调用时,默认传递实例本身到实例方法的第一个参数self使用类调用时,必须传递一个实例对象到实例方法的第一个参数静态方法使用实例调用和类调用效果相同;类方法装饰器版:使用实例调用和类调用效果相同;classmethod(function)版:在类中,尽量不要使用classmet…

raft算法_Raft算法与实现

强一致性、高可用的存储组件是构建现代分布式系统的必要条件&#xff0c;广泛应用于注册中心、配置中心等平台设施中&#xff0c;分布式锁、协调器等等各类场景需求也有相关需求&#xff0c;在该领域有众多知名的开源组件&#xff0c;如etcd、zookeeper、Tikv等等。共识算法是实…

python桌面翻译_Python实现桌面翻译工具【新手必学】

Python 用了好长一段时间了&#xff0c;起初是基于对爬虫的兴趣而接触到的。随着不断的深入&#xff0c;慢慢的转了其它语言&#xff0c;毕竟工作机会真的太少了。很多技能长时间不去用&#xff0c;就会出现遗忘&#xff0c;也就有了整理一下&#xff0c;供初学者学习和讨论。相…