MySQL 增加、更新、删除
文章目录
- 1. 增加 INSERT
- 2. 更新 UPDATE
- 3. 删除 DELETE
- 练习 LeetCode 196. 删除重复的电子邮箱
- 练习 LeetCode 627. 交换工资
学习自 廖雪峰的官方网站
1. 增加 INSERT
- 添加一条记录
-
没有列出id字段,因为id字段是一个自增主键,由数据库自己推算
-
如果一个字段有默认值,那么在INSERT语句中可以不出现
-
字段顺序随意,前后两个()内一一对应即可,如 INSERT INTO students (score, gender, name, class_id) …,对应的VALUES变成(80, 'M', '大牛', 2)
-
一次添加多条记录,在VALUES子句中指定多个记录值,每个记录是由(...)包含的一组值
2. 更新 UPDATE
- 更新一条记录
- 更新多条记录
- 使用表达式更新
- 如果where没有匹配到行,不报错,无操作
- 操作时,如果没有where子句,会对整张表操作,小心
3. 删除 DELETE
DELETE FROM <表名> WHERE ...;DELETE FROM students WHERE id=1; 删除 id=1 的学生 DELETE FROM students WHERE id>=5 AND id<=7; 删除 多个学生- 如果where没有匹配到行,不报错,无操作
- 操作时,如果没有where子句,会删除整张表,小心
练习 LeetCode 196. 删除重复的电子邮箱
题目:
编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。
+----+------------------+ | Id | Email | +----+------------------+ | 1 | john@example.com | | 2 | bob@example.com | | 3 | john@example.com | +----+------------------+ Id 是这个表的主键。 例如,在运行你的查询语句之后,上面的 Person 表应返回以下几行: +----+------------------+ | Id | Email | +----+------------------+ | 1 | john@example.com | | 2 | bob@example.com | +----+------------------+ 提示: 执行 SQL 之后,输出是整个 Person 表。 使用 delete 语句。来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/delete-duplicate-emails
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题:
自连接比对 # Write your MySQL query statement below DELETE p1 FROM Person p1, Person p2 WHERE p1.Email = p2.Email AND p1.Id > p2.Id;1436 ms
# Write your MySQL query statement below DELETE FROM Person WHERE Id NOT IN (SELECT Id FROM (SELECT MIN(Id) Id FROM Person GROUP BY Email) tempTableName );1169 ms
练习 LeetCode 627. 交换工资
题目:
给定一个 salary 表,如下所示,有 m = 男性 和 f = 女性 的值。
交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然)。
要求只使用一个更新(Update)语句,并且没有中间的临时表。
注意,您必只能写一个 Update 语句,请不要编写任何 Select 语句。
例如: | id | name | sex | salary | |----|------|-----|--------| | 1 | A | m | 2500 | | 2 | B | f | 1500 | | 3 | C | m | 5500 | | 4 | D | f | 500 |运行你所编写的更新语句之后,将会得到以下表: | id | name | sex | salary | |----|------|-----|--------| | 1 | A | f | 2500 | | 2 | B | m | 1500 | | 3 | C | f | 5500 | | 4 | D | m | 500 |来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/swap-salary
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题:
case <变量> when <value1> then <newValue1> ELSE <newValue2> # Write your MySQL query statement below UPDATE salary SET sex=CASE sex WHEN 'm' THEN 'f'ELSE 'm'END;or if(condition,true选择1,not true 选择2)
# Write your MySQL query statement below update salary set sex = IF(sex = 'm', 'f', 'm')or 异或
# Write your MySQL query statement below update salary set sex = char(ASCII(sex)^ASCII('m')^ASCII('f'))更多练习:
- LintCode 1927. 硬币翻面
总结
以上是生活随笔为你收集整理的MySQL 增加、更新、删除的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: LeetCode 1480. 一维数组的
- 下一篇: LeetCode MySQL 612.