首页
学习
活动
专区
圈层
工具
发布

A关联B表派生C表 C随着A,B 的更新而更新

摘要: 本篇写的是触发器和外键约束 关键词: 触发器 | 外键约束 | 储存表链接更新 | Mysql 之所以用这个标题而没用触发器或者外键约束的原因, 1、是因为在做出这个需求之前博主是对触发器和外键约束丝毫理不清楚的...2这个标题比较接地气,因为老板就是这样给我提需求的 先说需求: A关联B表派生C表 C随着A,B 的更新而更新 走的弯路: 关联更新,所以我的重点找到关联上去了,然后就找到了外键,看了一大波外键的文章博客...,当我成功设置好外键时候,测试删除没问题,插入不会更新,所以我一开始以为是我外键设置的问题 直到我继续找资料看到一句话: sql里的外键和主键的定义是一样的,都是代表了索引 (这句话看了好多次,第一次是设置外键时候没法设置...,触发器的效果也杠杠滴,但是看着 这个错误代码四个大字还是有点儿不安,不知道是解释器的问题还是什么问题,最终结果就是百般测试下没有问题才放心 文末彩蛋: 上面说的为什么外键约束省了我一大波空间...再加一句,标题是三个表,我只写了两个表,其实原理都是一样的!会一个后面的就自由发散吧!哈哈

2.1K10

【MySQL】表的基本查询

,但冲突数据的值和 update 的值相等 1 row affected: 表中没有冲突数据,数据被插入 2 row affected: 表中有冲突数据,并且数据已经被更新 替换 主键 或者 唯一键...通常情况下不建议使用 * 进行全列查询 查询的列越多,意味着需要传输的数据量越大 可能会影响到索引的使用 SELECT * FROM exam_result; 指定列查询 指定列的顺序不需要按定义表的顺序来...LIMIT n OFFSET s; 注意:对未知表进行查询时,最好加一条 LIMIT 1,避免因为表中数据过大,查询全表数据导致数据库卡死 按 id 进行分页,每页 3 条记录,分别显示 第 1、2、3...; 查看更新后的数据: 将所有同学的语文成绩更新为原来的 2 倍 查看原始数据: 数据更新: UPDATE exam_result SET chinese = chinese * 2; 查看更新后的数据...删除孙悟空同学的考试成绩 DELETE FROM exam_result WHERE name = '孙悟空'; 此时查询不到: 删除整张表数据 注意:删除整张表慎用 DELETE FROM for_delete

3.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【MYSQL】表的基本查询

    ,但冲突数据的值和 update 的值相等 表中没有冲突数据,数据被插入 表中有冲突数据,并且数据已经被更新 //查看更新后的数据 mysql> select * from stu; +----...语法: select 列名1,列名2... from 表名 -- 指定列的顺序不需要按定义表的顺序来 案例: //查询学号,姓名,英语成绩 mysql> select id,name,english...语法: select 表名 (as) 别名 from 表名 案例: //查询学号,姓名对应的三科成绩总分 //as可以省略 mysql> select id,name,chinese+math...三、Update 对查询到的结果进行列值更新 语法: UPDATE table_name SET column = expr [, column = expr ...] [WHERE ...]...会重置 AUTO_INCREMENT 项 案例 //重新准备一张一模一样的测试表test //截断表 mysql> truncate test; Query OK, 0 rows affected

    2.4K10

    【MySQL】表的基本查询

    表的基本查询 表的增删查改 表的增删查改,简称表的 CURD 操作 : Create(创建),Update(更新),Retrieve(读取),Delete(删除). 下面我们逐一进行介绍。 1....(索引待后面讲解) 例如: b. 指定列查询 指定列的顺序不需要按定义表的顺序来,语法就是在 select 后跟上指定的字段列即可。...实例:创建一个新表,插入一个旧表中查询到的去重后的数据 先创建一个旧表,并插入数据: mysql> create table duplicate_table (id int, name varchar...分组的本质就是把一组按照条件拆分成了多个组,进行各自组内的统计!分组其实也是"分表",就是把一张表按照条件在逻辑上拆分成了多个子表,然后分别对各自的子表进行聚合统计!...实例,需要准备一张雇员信息表(来自oracle 9i的经典测试表),表的链接:oracle 9i的经典测试表 包括: emp 员工表 dept 部门表 salgrade 工资等级表 查看 emp 表数据

    3.4K10

    MySQL的单表多表查询

    %表示任意多字符,_表示一个字符 #例子: #查看wu后面有任意字符的列 mysql> select * from staff where name like 'wu%'; #5.逻辑运算符,在多个条件直接可以使用逻辑运算符...即分组是基于where之后得到的记录而进行的 #注意2:进行分组后,如group by post,只能查看post字段,如果要查看组内信息,需要借助聚合函数 #为何要进行分组呢?...发现department表中id=203部门在employee中没有对应的员工,发现employee中id=6的员工在department表中没有对应关系 #查看两个表的交叉连接 mysql> select...#例一:以内连接的方式查询employee和department表,并且employee表中的age字段值必须大于25,即找出年龄大于25岁的员工以及员工所在的部门 mysql> select employee.name...#思路:先查询出所有人的平均年龄,然后再和原来的员工表进行比较 mysql> select name,age from employee where age > (select avg(age) from

    16.1K40

    MySQL查询表索引的方式

    在网上可以查到有两种方式查询表的索引 show index from tablename SELECT * FROM mysql.innodb_index_stats a WHERE a.database_name...= '数据库名' and a.table_name like '%表名%'; 第一种是可行的,问题是在于并不是用SELECT语句,所以就不能和其他的表数据一起查询,譬如说 查询表结构的时候连同索引一起查询...(第二种来自于网络,实际上语句本身就有错误和低效的like,我们先只看逻辑) 仅看第二种也是不可行的,因为除了ROOT用户以外的用户无法访问innodb_index_stats表,所以是不行的。...在网上翻了很多页面都没有找到合适的解决方案,于是我把所有独立数据库用户身份可以查看的表全部翻看一遍之后发现。STATICS表中是存有索引数据的。...将索引信息和表结构信息一起查看的查询: SELECT * FROM INFORMATION_SCHEMA.COLUMNS LEFT JOIN INFORMATION_SCHEMA.STATISTICS

    4.9K20

    MySQL联表查询的索引使用

    项目中一般使用的都是单表查询,但是在一些业务场景下,偶尔会选择联表查询,一直对联表查询时如何使用索引一直感到很好奇。...正好近期项目中遇到一个问题,联表查询时,没有建立索引,耗时居然达到了可耻的10分钟,所以趁机了解了一下。...,根据MySQL联表查询的算法Nested-Loop Join,MySQL查询的结果集是3张表的笛卡尔积,所以效率特别低。...[(none)]> kill 3468722 结论 关联字段一定要添加索引 where条件的索引建立,一定要查看explain,mysql的工作方式经常跟我们想的不一样 增加慢查询日志(dba呢?)...参考 关于 MySQL LEFT JOIN 你可能需要了解的三点 MySQL JOIN原理 MySQL查询优化——连接以及连接原理 MySQL 性能优化神器 Explain 使用分析 What is the

    13.1K21

    ②【MySQL表操作】 数据库表的创建、查询、修改、删除

    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 数据库表的创建、查询、...DDL - 表操作 DDL-表操作: 查询表信息 ①查询当前数据库所有表 SHOW TABLES; ②查询表结构 DESC 表名; ③查询指定表的建表语句 SHOW CREATE TABLE 表名; 创建表操作...字段n 字段n类型 [COMMENT 字段n注释] )[COMMENT 表注释]; -- 演示: -- 创建表tb_user -- 注释内容使用一对英文的单引号括起来'' -- 整型用int表示 --...tb_emp CHANGE nickname username VARCHAR(30); ③删除字段 ALTER TABLE 表名 DROP 字段名; -- 案例 -- 将tb_emp表的字段username...] 表名; -- 演示 -- 删除名为aaa的表 -- 执行时,如果aaa表不存在,报错: -- 错误代码: 1051 Unknown table '表名' DROP TABLE aaa; -- 使用关键字

    5K50

    什么是MySQL JOIN查询的驱动表和被驱动表?

    在《在连表查询场景下,MySQL隐式转换存在的坑》一文中,我们讲到,当进行连表查询时,如果关联类型使用不当会发生隐式转换,MySQL 查询优化器会根据索引可用性调整驱动表和被驱动表的选择顺序。...它们描述的是在多表连接 (JOIN) 操作中,MySQL 优化器选择的查询顺序和策略:查询从哪张表开始检索数据(驱动表),以及它如何依赖另一张表来查询(被驱动表)。 1....驱动表和被驱动表的定义 驱动表(Driving Table): 驱动表是 MySQL 优化器选择的 优先查询的表。查询先从驱动表中检索数据,再根据驱动表的结果与被驱动表进行关联。...驱动表和被驱动表的执行顺序 执行顺序 当 JOIN 查询两张表时: MySQL 会先选一个表作为驱动表,先查询驱动表的记录。 在查询驱动表的结果集后,逐条匹配被驱动表的数据。...JOIN 类型 在某些 JOIN 查询中(如 INNER JOIN),优化器会选择效率最高的表作为驱动表,无论连接的逻辑顺序如何。 6. 优化驱动表的选择 1.

    17400

    玩转MySQL表之间的各种连接查询

    1 概述 为什么要进行连接查询? 因为不同表之间的数据具有不同的用途和字段,连接查询可以将我们需要用到的两个表的不同字段进行关联,从而找到我们有用的信息。...连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,然后通过连接进行查询。...2 连接类型 3 各种连接详解和示例 首先我们新建两张表,并设置好相应的字段和数据 建表 学生表(student) CREATE TABLE `student` ( `id` int(11)...(2)SQL语句和关键字 SQL: select * from student,user full outer join student on student.name=user.name; 注意:MySQL...但是可以通过左外和右外求合集来获取全外连接的查询结果。

    3.9K10

    MySQL 数据库sql命令查询被锁的表实例演示,mysql的锁表与解锁,mysql强制解锁杀掉进程,mysql查询锁表一直转圈

    show open tables where in_use > 0 命令可以查询锁表。 in_use 为 1 表示这个表同时被两个用户使用,一个正在用,一个在锁定中。...-- 为md_class表增加个写锁定 lock tables md_class write; -- 查看锁表 show open tables where in_use > 0; -- 表解锁 unlock...tables; 查看锁表: 特殊情况下的锁定是线程阻塞导致的,查询锁表都查不出来,一直转圈,即使查询出也无法解锁,需要强制杀掉阻塞的线程。...select * from information_schema.innodb_trx; 方法可以查询到有两条阻塞的线程。...通过 kill + trx_mysql_thread_id 可以直接把对应的进程杀掉。 例:kill 3886;

    6.3K30

    MYSQL 表的手动更新统计分析记录

    从MYSQL 5.6 开始,统计分析的信息会固化在系统的存储中,通过下面的语句可以查看我们相隔的开关是否打开。...但通常一般都是通过自动触发的方式来完成这样的工作。 而我们可以进行一个测试,关于MYSQL的索引和真是的表信息之间是否有差距。...其实我们已经操作了analyze table 但是我们依然没有得到准确的数字,在平时这可能不会有什么问题,但如果是较大的表例如上千万的表,如果这方面错的比较错,会对执行计划产生问题,这时候可能就需要我们通过手动的方式来更新某些表的记录...= 'employees'; 同理也可以更新 innodb_index_stats表里面的数据 以上方法仅仅使用于统计分析的不准确严重影响到了执行计划,一般我们还是不要动系统中的统计分析表,另外这样做的另一个问题就是..., 你的表不会频繁更新的操作,并且你要找好自己更新数值的时间点。

    4.7K30

    MySQL学习2:数据表的创建与查询

    1.使用数据库 use 数据库名字; 2.查看当前使用的数据库 select database(); 3.查看当前数据库中的所有表 show tables; 4.查看当前数据表字段 desc 数据表名字...5.创建数据表 create table 数据表名字(字段 类型 约束) 6.向指定数据表插入记录 insert into 数据表名字 values(每个字段数值); 7.查询指定数据表的所有记录 select...text(varchar表示可变长度,char固定长度,不足长度会自动填补空格,text大文本字符>4000使用) 枚举类型:enum 日期时间:date time datetime 关于整数和日期时间类型的拓展...9.创建数据表实例 例如:创建一个学生信息表 create table students( id int unsigned not null auto_increment primary key...cls_id int unsigned ); 说明: not null 约束:不为空 auto_increment:自动递增 primary key:主键 default:默认值 插入数据需要和数据表各个字段对应

    2.4K30

    MySQL多层级树形结构表的搜索查询优化

    MySQL多层级树形结构表的搜索查询优化 业务中有思维导图的功能,涉及到大量的树形结构搜索、查询相关的功能,使用场景上查询量远高于增删改操作,记录一下当前的解决方案。...comment '上级节点', index nodes_parent_id_index (parent_id), index nodes_name_index (name) ); 二、当前解决方案 更新表结构...查询ID为“5”的节点的所有子级、孙子级中name包含“搜索词”的记录 更新表后的查询方式: -- 查询父级节点记录,获取到父级的path select * from nodes where id =...搜索词%'; 可以创建一个触发器,在插入、修改数据时,更新子级的path。...MySQL多层级树形结构表的搜索查询优化 使用WordPress作为小程序后端——APPID有效性前置检查 使用WordPress作为小程序后端——小程序请求前置检查 Windows rclone挂载sftp

    3K50

    MySQL单表查询的操作和注意事项

    一 、单表查询的语法 基本语法格式: SELECT 字段1,字段2......  by--> having -->select -->distinct -->order by--> limit 1.找到表:from 2.拿着where指定的约束条件,去文件/表中取出一条条记录 3...逻辑运算符:在多个条件直接可以使用逻辑运算符 and or not #1:单条件查询     SELECT name FROM employee         WHERE post='sale';...#1、首先明确一点:分组发生在where之后,即分组是基于where之后得到的记录而进行的   #2、分组指的是:将所有记录按照某个相同字段进行归类,比如针对员工信息表的职位分组,或者按照性别进行分组等...只能查看post字段,如果想查看组内信息,需要借助于聚合函数 二 、ONLY_FULL_GROUP_BY #查看MySQL 5.7默认的sql_mode如下: mysql> select @@global.sql_mode

    1.7K00

    基于邻接表的AOE网实现关键路径查询

    按照图的“邻接表”存储结构表示AOE网,实现求其关键路径的算法,并验证如下图1所示AOE网的关键路径。...AOE网可用来估算工程的完成时间。由于整个工程只有一个开始点和一个完成点,故在正常的情况(无环)下,网中只有一个入度为零的点(源点)和一个出度为零的点(汇点)。...在循环中同时遍历邻接表中每一个边所存储指向的节点,并且更新其的ve[i].注:更新时,比较边的权加上更新结点的前一个结点的ve与 该结点本身的ve大小(全部初始化为0),取最大值。...iostream>#include #include #include #include using namespace std;/*创建图的邻接表...} } return true;}int main(){ ALGraph g; Creat(g); CriticalPath(g); return 0;测试数据与实验结果数据

    98731
    领券