欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > 数据库 >内容正文

数据库

MySQL 增加、更新、删除

发布时间:2024/7/5 数据库 36 豆豆
生活随笔 收集整理的这篇文章主要介绍了 MySQL 增加、更新、删除 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录

    • 1. 增加 INSERT
    • 2. 更新 UPDATE
    • 3. 删除 DELETE
    • 练习 LeetCode 196. 删除重复的电子邮箱
    • 练习 LeetCode 627. 交换工资

学习自 廖雪峰的官方网站

1. 增加 INSERT

  • 添加一条记录
INSERT INTO <表名> (字段1, 字段2, ...) VALUES (1,2, ...);INSERT INTO students (class_id, name, gender, score) VALUES (2, '大牛', 'M', 80);

  • 没有列出id字段,因为id字段是一个自增主键,由数据库自己推算

  • 如果一个字段有默认值,那么在INSERT语句中可以不出现

  • 字段顺序随意,前后两个()内一一对应即可,如 INSERT INTO students (score, gender, name, class_id) …,对应的VALUES变成(80, 'M', '大牛', 2)

  • 一次添加多条记录,在VALUES子句中指定多个记录值,每个记录是由(...)包含的一组值

INSERT INTO students (class_id, name, gender, score) VALUES(1, '大宝', 'M', 87),(2, '二宝', 'M', 81);

2. 更新 UPDATE

  • 更新一条记录
UPDATE <表名> SET 字段1=1, 字段2=2, ... WHERE ...;UPDATE students SET name='大牛', score=66 WHERE id=1; 把id=1的人的名字和得分改掉
  • 更新多条记录
UPDATE students SET name='小牛', score=77 WHERE id>=5 AND id<=7;
  • 使用表达式更新
UPDATE students SET score=score+10 WHERE score<80; 得分小于80的,都加10
  • 如果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. 硬币翻面
update coin set side=if(side='n','p','n') 创作挑战赛新人创作奖励来咯,坚持创作打卡瓜分现金大奖

总结

以上是生活随笔为你收集整理的MySQL 增加、更新、删除的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。