MySQL表记录的更新操作(增删改)

表记录的插入

使用insert语句插入新记录

insert into 表名[(字段列表)] value(值列表)
  • 字段列表:可选项。有若干个要插入的数据的字段名组成,各字段使用逗号“,”隔开。若省略了字段列表,则表示需要为表的所有字段插入数据。
  • 值列表:必选项。值列表给出了待插入的若干个字段值,各个字段值使用逗号“,”隔开,并与字段列表形成一一对应关系。
  • char、varchar、text以及日期型的字段插入数据时,字段值要用单引号括起来。
  • 自增型auto_increment字段插入数据时,建议插入NULL值,此时将项自增型字段插入下一个编号。
  • 默认值约束字段插入数据时,字段值可以使用default关键字,表示插入的是该字段的默认值。
  • 插入新记录时,需要注意表之间的外键约束关系,原则上先给父表插入数据,然后再给子表插入数据。
    • 如果字段存在唯一性约束,插入的字段值不能重复;
    • 如果字段存在外键约束,子表字段值要么是null,要么是父表中相应字段值,如果指定的值不在此范围内,插入将失败;
    • 即使insert语句执行失败,表的自增型字段仍会递增。
insert into classes(class_no,class_name,department_name) values(null,'2012自动化1班','机电工程');

批量插入多条记录

insert into 表名[(字段列表)] value
(值列表1),
(值列表2),
...,
(值列表n);

使用insert…select插入结果集

将源表的目标结果插入到目标表中。

insert into 目标表名[(字段列表1)];
select (字段列表2) from 源表 where 条件表达式;
  • 字段列表1与字段列表2的字段个数必须相同,且对应字段的数据类型尽量保持一致。如果源表与目标表的表结构完全相同,则字段列表1可省略。

示例:

use choose;
create table new_student like student;
insert into new_student select - from student;

使用replace插入新记录

  • 语法格式1:
replcae into 表名[(字段列表)] value(值列表)
  • 语法格式2:
replace [into]目标表名[(字段列表1)]
  • 语法格式3:
replace [into]表名
set 字段1=1,字段2=2

使用replace语句向表中插入新记录时,如果新记录的主键值或唯一性约束的字段值与旧记录先删除(注意:旧记录删除时也不能未被外键约束条件),然后再插入新记录。

表记录的修改

update 表名;
set 字段名1=1,字段名2=2,...,字段名n=值n;
[where 条件表达式];
  • update语句可用于对表中的一行、多行,甚至所有记录进行修改;
  • where子句指定了表中哪些记录需要修改,若省略了where子句,则表示修改表中的所有记录;
  • set子句指定了要修改的字段以及该字段修改后的值
  • 修改表记录时,需要注意表的唯一性约束、表之间的外键约束关系以及级联选项的设置。

示例:将班级表中class_no<=3的院系名修改为“机电工程学院”

use choose;
update classes set deparment_name='机电工程学院' where class_no<=3;

表记录的删除

使用delete删除表记录

delete from 表名[ where 条件表达式]
  • 如果没有指定where子句,则该表的所有记录都将被删除,但表结构依然存在。
  • 删除表记录时,需要注意表之间的外键约束关系及级联选项的设置,否则没有办法成功删除。

使用truncate清空表记录

truncate [table]表名
  • 如果清空的表是父表,那么truncate命令将永远执行失败。

delete与truncate的区别

  • 使用delete清除表中所有记录后,表的自增型字段的起点并不会改变;
  • 使用truncate清空表记录后,表的自增型字段的起点将被重置为1.

题目实例

删除重复的电子邮箱

来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。

DELETE p1 FROM Person p1,Person p2
WHERE p1.Email = p2.Email AND p1.Id > p2.Id
delete p1 from Person p1 join Person p2 on p1.Email = p2.Email where p1.Id > p2.Id;

交换工资

给定一个 salary 表,如下所示,有 m = 男性 和 f = 女性 的值。交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然)。要求只使用一个更新(Update)语句,并且没有中间的临时表。
注意,您必只能写一个 Update 语句,请不要编写任何 Select 语句。

UPDATE salary
SET
    sex = CASE sex
        WHEN 'm' THEN 'f'
        ELSE 'm'
    END;

《MySQL数据库基础与实例教程》——孔祥盛

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值