![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
#MySQL
努力不停努力
我要成为自己眼中最耀眼的一束光
展开
-
LeetcodSQL196. Delete Duplicate Emails
原题链接 Solution 只保留相同 Email 中 Id 最小的那一个,然后删除其它的。 连接查询: DELETE p1 FROM Person p1, Person p2 WHERE p1.Email = p2.Email AND p1.Id > p2.Id 子查询: DELETE FROM Person WHERE id NOT IN ( SELECT id FROM ( SELECT原创 2021-03-01 13:58:32 · 64 阅读 · 0 评论 -
Leetcode SQL 627. Swap Salary
原题链接 UPDATE salary SET sex = CHAR ( ASCII(sex) ^ ASCII( 'm' ) ^ ASCII( 'f' ) ); ^ 是异或操作。 ‘f’ ^ (‘m’ ^ ‘f’) = ‘m’ ^ (‘f’ ^ ‘f’) = ‘m’ ‘m’ ^ (‘m’ ^ ‘f’) = ‘f’ ^ (‘m’ ^ ‘m’) = ‘f’原创 2021-03-01 13:30:34 · 77 阅读 · 0 评论 -
MySql InnoDB存储引擎 多版本并发控制(MVCC)
参考链接(博客) 参考链接(Github CS-Notes) 快照读(官网) 为什么一个事务能够读到其他事务修改但未提交的数据 事务日志 事务 首先,数据库的事务的原子性是指事务要么全部完成,要么全部没完成(回滚)。事务本身并不能保证其隔离性,还需要其它操作辅助实现。 commit只是保证你数据库故障时候回滚不会回滚这个事务了,或者说只要commit这个语句写入redo log了就算缓冲区的数据没有写回硬盘或者其他持久化设备也是可以通过redo log将新的值写回去,整个事务没有丢失。 内存的读写速度比硬原创 2021-02-28 21:14:55 · 131 阅读 · 0 评论 -
MySQL中count和sum使用
count COUNT()函数里面的参数是列名的的时候,那么会计算有值项的次数。(NULL 不计入, 但是’'值计入) COUNT(*)可以计算出行数,包括null ,COUNT(1)也可以计算出行数,1在这里代表一行 COUNT(条件表达式),不管记录是否满足条件表达式,只要非NULL就加1 ,所以一般都count(id=1 or null) sum sum()参数是列名的时候,计算列名的值的相...转载 2020-04-09 17:08:46 · 805 阅读 · 0 评论 -
MySQL DELETE FROM语句的使用注意事项
在MySQL中,写SQL语句的时候 ,可能会遇到 “You can’t specify target table ‘表名’ for update in FROM clause” 这样的错误,它的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中),即不能依据某字段值做判断再来更新某字段的值。 注意,这个问题只出现于mysql,mssql和Oracle不会出现此问题。...原创 2020-04-06 21:19:25 · 1133 阅读 · 0 评论 -
LeetCode数据库196. 删除重复的电子邮箱
原题链接 方法一(此方法要注意各种可能出现的语法错误(看注释)) DELETE FROM `Person` WHERE `Id` NOT IN ( SELECT t.`Id` #加上这个外层筛选可以避免You can't specify target table for update in FROM clause错误 FROM ( SELECT...原创 2020-04-06 21:18:23 · 186 阅读 · 0 评论 -
MySQL语法细节
BEGIN…END语句的使用注意 MySQL中变量的定义和变量的赋值使用原创 2020-04-06 20:43:21 · 75 阅读 · 0 评论 -
LeetCode数据库题185. 部门工资前三高的所有员工
每个部门内前三高的工资,等同条件为该部门内比该工资级别高的工资级别少于3个 此类型的题目(TOPN题目),都可以转换成: 比…高的少于…个; 比…低的少于…个 的思路来解决 在这里插入代码片 ...原创 2020-04-06 18:18:22 · 194 阅读 · 0 评论 -
LeetCode数据库184. 部门工资最高的员工
原题连接 # Write your MySQL query statement below SELECT d.Name AS 'Department', e.Name AS 'Employee', e.Salary AS 'Salary' FROM Employee e JOIN Department d ON e.Depar...原创 2020-04-06 16:26:47 · 118 阅读 · 0 评论 -
LeetCode数据库题180. 连续出现的数字
题目链接 知识点: CASE (WHEN+ 条件语句 + THEN + 结果)(可重复多条)END + AS + 结果名 MySQL变量的定义和赋值使用 解决方法: 方法一(效率更高,且可以适用ID不连续的情况) SELECT DISTINCT NUM AS ConsecutiveNums FROM ( SELECT NUM, CASE WH...原创 2020-03-25 22:00:43 · 127 阅读 · 0 评论 -
MySQL BEGIN...END语句注意,很坑!!!
写一个触发器,没有定义查询界定符导致,导致编译器将;识别为全部语句的结束,导致BEGIN 匹配不到END,于是报错,解决方案是,在语句前面增加 DELIMITER // (无分号)也就是需要定义分界符。 ...原创 2020-03-22 14:30:14 · 6277 阅读 · 0 评论 -
MySQL题目 176. 第二高的薪水
编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。 SQL查询应该返回第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。 select (select distinct salary from employee order by salary desc limit 1, 1) as SecondHighestSalary; select ifnull...原创 2020-03-23 11:23:59 · 90 阅读 · 0 评论 -
LeetCode MySQL题目178. 分数排名
原题地址 /* 按S1表的Id分组,然后计算S2的Score比S1的组的Score大的元组的个数。 */ SELECT S1.Score AS Score, COUNT(DISTINCT S2.Score) AS Rank FROM Scores S1, Scores S2 WHERE S2.Score >= S1.Score GROUP BY S1.Id ORDER BY Rank; ...原创 2020-03-23 15:14:49 · 175 阅读 · 0 评论 -
MySQL中变量的定义和变量的赋值使用
参考链接 通过SET或SELECT来定义变量和给变量赋值。 使用SET定义时可以用“=”或“:=”,但是使用select定义时必须用“:=赋值”。 “:=”通常用于赋值,而“=”通常用于比较,判断是否等于。 ...原创 2020-03-25 21:43:33 · 378 阅读 · 0 评论