mysql update语句

MYSQL:基础——触发器

百般思念 提交于 2020-02-01 08:26:01
MYSQL:基础——触发器引入触发器 触发器   如果你想要某条语句(或某些语句)在事件发生时自动执行。比如: 每当订购一个产品时,都从库存数量中减去订购的数量;无论何时删除一行,都在某个存档表中保留一个副本。就需要用到触发器。    触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句 (或位于BEGIN和END语句之间的一组语句): DELETE; INSERT; UPDATE; 说明:    其他MySQL语句不支持触发器。 只有表才支持触发器、视图不支持,临时表也不支持 。 创建触发器   触发器用CREATE TRIGGER 语句创建, 一条伪代码如下 : CREATE [DEFINER = { user | CURRENT_USER }] TRIGGER trigger_name     //触发器名称 trigger_time trigger_event //触发时间 触发事件 ON tbl_name FOR EACH ROW   [trigger_order] trigger_body  其中参数的可选项如下: trigger_time: { BEFORE | AFTER } trigger_event: { INSERT | UPDATE | DELETE } trigger_order: { FOLLOWS | PRECEDES } other

MySQL(十二)游标和触发器

纵然是瞬间 提交于 2020-02-01 08:24:57
一、游标 定义: 存储在MySQL服务器上的数据库查询,是一种被select语句检索出来的结果集。 作用: 方便在检索出来的结果集中前进或后退一行或多行。 游标主要用于交互式应用;MySQL中的游标只能用于存储过程(和函数)。 1、创建游标 游标使用declare语句创建;declare命名游标,并定义响应的select语句,根据需要带where和其他子句;例如: create procedure processorders() begin declare ordernumbers CURSOR for select order_num from orders; end; 这个存储过程中,declare定义和命名了游标ordernumbers,存储过程处理完成后,游标消失(因为它局限于存储过程内)。 2、打开和关闭游标 游标使用open cursor语句来打开,例如: open ordernumbers; 在处理open语句时执行查询,存储检索出的数据以供浏览和滚动; 游标处理完成时,使用close语句关闭,例如: close ordernumbers; close释放游标使用的所有内部内存和资源,因此在每个游标不在需要时都应该关闭。 PS: 一个游标关闭后,如果没有重新打开,则不能使用;但如果该游标被声明过,则不需要再次声明,用open语句打开使用即可。 如果不明确游标是否关闭

mysql数据库 day03

Deadly 提交于 2020-01-31 00:15:51
---恢复内容开始--- 1.外键(重点) 2.修改表的完整语句(了解知识点) 一.外键 外键一共分为三大类:一对多,多对多,一对一 1.一对多: 为什么要有这些外键了: 比如说定义了一张员工表 # 定义一张部门员工表 id name gender dep_name dep_desc 1 jason male 教学部 教书育人 2 egon male 外交部 漂泊游荡 3 tank male 教学部 教书育人 4 kevin male 教学部 教书育人 5 owen female 技术部 技术能力有限部门 那么这张表有什么问题 ?: 把所有的数据都存放在一张表的弊端: 1.表的结构不清晰 2.浪费硬盘空间(因为有相同的部门,需要重复写) 3.表的扩展性极差(无法忽略的缺点) 这个问题就类似我们将所有的代码都写在用一个py文件内 那么我们该怎么解决这个问题:(我们要把表分开,解耦和)           emp id emp_name emp_gender dep_id 1 jason male 1 2 egon female 2 3 tank male 2 4 jerry male 2 5 kevin male 3             dep id dep_name dep_desc 1 外交部 形象代言人 2 教学部 教书育人 3 技术部 技术能力有限部门 表示解耦和了

MySQL-死锁查询

大城市里の小女人 提交于 2020-01-30 23:20:31
1、查询是否锁表 show OPEN TABLES where In_use > 0; 查询到相对应的进程 === 然后 kill id 2、查询进程 show processlist 补充: 查看正在锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 查看等待锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; 1 show processlist; SHOW PROCESSLIST显示哪些线程正在运行。您也可以使用mysqladmin processlist语句得到此信息。如果您有SUPER权限,您可以看到所有线程。否则,您只能看到您自己的线程(也就是,与您正在使用的MySQL账户相关的线程)。如果有线程在update或者insert 某个表,此时进程的status为updating 或者 sending data。 如果您得到“too many connections”错误信息,并且想要了解正在发生的情况,本语句是非常有用的。MySQL保留一个额外的连接,让拥有SUPER权限的账户使用,以确保管理员能够随时连接和检查系统(假设您没有把此权限给予所有的用户)。 Status 含义 Checking table 正在检查数据表(这是自动的)。 Closing

MySQL中使用group by 是总是出现1055的错误

我只是一个虾纸丫 提交于 2020-01-30 18:53:15
因为在MySQL中使用group by 是总是出现1055的错误,这就导致了必须去查看是什么原因了,查询了相关的资料,现在将笔记记录下来,以便后面可以参考使用: sql_mode:简而言之就是:它定义了你MySQL应该支持的sql语法,对数据的校验等等 select @@sql_mode:使用该命令我们可以查看我们当前数据库的sql_mode mysql> select @@sql_mode; +-------------------------------------------------------------------------------------------------------------------------------------------+ | @@sql_mode | +-------------------------------------------------------------------------------------------------------------------------------------------+ | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO

update mysql row (You can't specify target table 'x' for update in FROM clause)

房东的猫 提交于 2020-01-30 18:53:02
sql语句(update/delete都会出现此问题) update x set available_material_id = null where id not in (select id from x where additional_info = 1); mistake 大致意思是,在同一语句中,不能先select出同一表中的某些值,再update这个表。 You can't specify target table 'x' for update in FROM clause mysql5.7解决办法 update x left join x xx on x.id = xx.id and xx.additional_info = 1 set available_material_id = null where xx.id is null; 老办法(有人说5.7已经不能用了) 原始: DELETE FROM tempA WHERE tid IN ( SELECT MAX(tid) AS tid FROM tempA GROUP BY name,age ) 改造后 DELETE FROM tempA WHERE tid NOT IN ( SELECT t.tid FROM ( SELECT MAX(tid) AS tid FROM tempA GROUP BY name,age

你在家快疯了?20 道数据库面试解析学起来

人走茶凉 提交于 2020-01-30 15:49:37
面试的时候,发现数据库方面,忘得一塌糊涂,抽时间整理了一些数据库方面的题。 事务四大特性(ACID)原子性、一致性、隔离性、持久性? 事务的并发?事务隔离级别,每个级别会引发什么问题,MySQL 默认是哪个级别? MySQL 常见的三种存储引擎(InnoDB、MyISAM、MEMORY)的区别? MySQL 的 MyISAM 与 InnoDB 两种存储引擎在,事务、锁级别,各自的适用场景? 查询语句不同元素(where、jion、limit、group by、having 等等)执行先后顺序? 什么是临时表,临时表什么时候删除? MySQL B+Tree 索引和 Hash 索引的区别? 聚集索引和非聚集索引区别? 有哪些锁(乐观锁悲观锁),select 时怎么加排它锁? 非关系型数据库和关系型数据库区别,优势比较? 数据库三范式,根据某个场景设计数据表? 数据库的读写分离、主从复制,主从复制分析的 7 个问题? 使用 explain 优化 sql 和索引? MySQL 慢查询怎么解决? 什么是 内连接、外连接、交叉连接、笛卡尔积等? mysql 都有什么锁,死锁判定原理和具体场景,死锁怎么解决? varchar 和 char 的使用场景? mysql 高并发环境解决方案? 数据库崩溃时事务的恢复机制(REDO 日志和 UNDO 日志)? 事务四大特性(ACID)原子性、一致性

一千行 MySQL 学习笔记

风流意气都作罢 提交于 2020-01-30 13:44:25
原文: 一千行 MySQL 学习笔记 基本操作 /* Windows服务 */ -- 启动MySQL net start mysql -- 创建Windows服务 sc create mysql binPath= mysqld_bin_path(注意:等号与值之间有空格) /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 SHOW PROCESSLIST -- 显示哪些线程正在运行 SHOW VARIABLES -- 显示系统变量信息 数据库操作 /* 数据库操作 */ ------------------ -- 查看当前数据库 SELECT DATABASE(); -- 显示当前时间、用户名、数据库版本 SELECT now(), user(), version(); -- 创建库 CREATE DATABASE[ IF NOT EXISTS] 数据库名 数据库选项 数据库选项: CHARACTER SET charset_name COLLATE collation_name -- 查看已有库 SHOW DATABASES[ LIKE 'PATTERN'] -- 查看当前库信息 SHOW CREATE DATABASE 数据库名 -- 修改库的选项信息 ALTER DATABASE 库名 选项信息 -- 删除库 DROP

006-解决ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)【转】

≡放荡痞女 提交于 2020-01-30 12:51:04
本文转载自: https://blog.csdn.net/hua1011161696/article/details/80666025 解决方案: 步骤一:关闭数据库服务端mysqld程序 两种方式: ①快捷键 windows + R ;输入 services.msc ; 找到MySQL 停止其服务(前提是你之前已经把MySQL加入了系统服务中) ②在命令行程序中;注意需要以管理员权限运行cmd程序,不然无法关闭mysqld进程 >>tasklist |findstr mysqld 这行命令可以用来查看mysqld是否在运行,在运行中则可以查到它的PID >>taskkill /F /PID xxxx xxxx是从前面一条命令得到的PID值 步骤二:跳过权限登录MySQL 服务器端 在cmd中执行 mysqld --skip-grant-tables >>mysqld --skip-grant-tables 此时cmd程序会阻塞,关闭cmd程序 然后重新以管理员权限运行cmd 然后在cmd命令行中输入 mysql 就能连接上MySQL 服务器端了 >>mysql 然后可以通过sql语句 :SELECT * from mysql.user\G; 来查看服务器端所有的用户信息,重点查看User、Password、authentication_string这三项。这条语句非常关键。

170309、MySQL存储引擎MyISAM与InnoDB区别总结整理

谁都会走 提交于 2020-01-30 07:10:16
1、MySQL默认存储引擎的变迁 在MySQL 5.1之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默认的搜索引擎变更为InnoDB。 2、MyISAM与InnoDB存储引擎的主要特点 MyISAM存储引擎的特点是:表级锁、不支持事务和全文索引,适合一些CMS内容管理系统作为后台数据库使用,但是使用大并发、重负荷生产系统上,表锁结构的特性就显得力不从心; 以下是MySQL 5.7 MyISAM存储引擎的版本特性: InnoDB存储引擎的特点是:行级锁、事务安全(ACID兼容)、支持外键、不支持FULLTEXT类型的索引(5.6.4以后版本开始支持FULLTEXT类型的索引)。InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全存储引擎。InnoDB是为处理巨大量时拥有最大性能而设计的。它的CPU效率可能是任何其他基于磁盘的关系数据库引擎所不能匹敌的。 以下是MySQL 5.7 InnoDB存储引擎的版本特性: 注意: InnoDB表的行锁也不是绝对的,假如在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如 update table set num=1 where name like “a%” 。 两种类型最主要的差别就是InnoDB支持事务处理与外键和行级锁。而MyISAM不支持