第四章 表记录的更新操作

4.1 表记录的插入

向数据库表插入记录时,可以使用insert语句向表中插入一条或者多条记录,也可以使用insert….select语句向表中插入另一个表的结果集。

4.1.1 使用inser t语句插入新记录

• 语法格式如下:

insert into 表名 [(字段1, 字段2)]
values (1,2) ;
  1. 向表的所有字段插入数据。

  2. 不指定字段插入数据(值的顺序能不能改变)。

  3. 向表中部分字段段(非空)插入数据。

    (1)主键字段必修插入值。

    (2)设置为自增列。

    (3)设置主键自增后,用插入新记录可以省略主键值。

4.1.2 批量插入多条记录

1.使用insert语句可以一次性地向表批量插入多条记录,语法格式如下:

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

2.在 MySQL 中,可以使用 INSERT INTO 语句只给部分字段批量插入多条记录。这通常通过指定要插入的列名,并在 VALUES 子句中提供多组对应的值来实现。

users 表为例,该表包含以下字段:id, name, email, age。但你想要只插入 nameemail 字段,并且批量插入多条记录:

INSERT INTO users (name, email)  
VALUES   
    ('Alice', 'alice@example.com'),  
    ('Bob', 'bob@example.com'),  
    ('Charlie', 'charlie@example.com');

在这个示例中,只插入了 nameemail 字段,而 idage 字段将根据其默认值(如果定义了默认值)或者设置为 NULL(如果允许 NULL 值)。

注意几点:

  1. 列名必须明确指定:在 INSERT INTO 后必须明确指定要插入的列名。
  2. 值列表匹配:每组值(用逗号分隔)必须与列名列表中的顺序和数量匹配。
  3. 自动递增字段:如果 id 是自动递增的(例如使用 AUTO_INCREMENT),则不需要手动插入该字段的值。
  4. 默认值或允许 NULL:对于未指定的字段,确保它们在表中可以设置为默认值或允许 NULL 值。

4.1.3 使用insert…set插入结果

insert...set语句通过直接给表中的某些字段赋值来完成指定数据的插入,其他未赋值的字段的值为默认值。

语法格式如下:

insert into 目标表名
set 字段名={值|default},... 
[on duplicate key update 字段名=表达式,...] ;

4.1.4 使用insert…select插入结果

1.在insert语句中使用select子句可以将源表的查询结果添加到目标表中。

语法格式如下:

insert into 目标表名 [(字段列表1 )]
select 字段列表2 from 源表 where 条件表达式 ;

注意:字段列表1与字段列表2的字段个数必须相同,且对应字段的数据类型尽量保持一致。

• 如果源表与目标表的表结构完全相同, “(字段列表1)”可以省略 。

4.1.5 使用replace插入新记录

语法格式1:

replace into 表名 [(字段列表)] values (值列表);

语法格式2:

replace [into] 目标表名[(字段列表1)]
select (字段列表2) from 源表 where 条件表达式;

语法格式3:

replace [into] 表名
set 字段1=1, 字段2=2

replace语句的功能与insert语句的功能基本相同,不同之处在于:使用replace语句向表插入新记录时,如果新纪录的主键值或者唯一性约束的字段值与已有记录相同,则已有记录先被删除(注意:已有记录删除时也不能违背外键约束条件),然后再插入新记录。

4.1.6 小结

INSERT语句成功执行后,可以通过查询语句查看数据是否添加成功。如果不指定字段名,必须为每个字段添加数据,如果指定了字段名,就只需要为指定的字段添加数据。

4.2 表记录的修改

语法格式如下:

update 表名
set 字段名1=1,字段名2=2,.. ,字段名n=值n
[where 条件表达式 ] ;
  • where子句指定了表中的哪些记录需要修改。若省略了where子句,则表示修改表中的所有记录。
  • set子句指定了要修改的字段以及该字段修改后的值。

4.3 表记录的删除

表记录的删除通常使用delete语句实现,如果要清空某一个表可以使用truncate语句。

4.3.1 使用delete删除表记录

delete语句的语法格式如下:

delete from 表名
[where 条件表达式 ]
[order by...]
[limit 行数];
  • 说明:如果没有指定where子句,那么该表的所有记录都将被删除,但表结构依然存在。

4.3.2 使用truncate清空表记录

1.truncate table用于完全清空一个表,语法格式如下:

truncate [table] 表名 ;
  • 从逻辑上说,truncate语句与“deletefrom ‘’表名”语句作用相同,但是在某些情况下,两者在使用上有所区别。
  • truncate table语句不支持事务的回滚,并且不会触发触发器程序的运行。

2.deletetruncate的区别

truncatedelete
条件删除不支持支持
事务回滚不支持支持
清理速度
高水位重置

4.4 MySQL特殊字符序列

  • MySQL中,当字符串中存在以下8个特殊字符序列时,字符序列被转义成对应的字符(每个字符序列以反斜线符号“\”开头,且字符序列大小写敏感)
MySQL中的特殊字符序列转义后的字符
\‘’双引号(‘’)
单引号(')
\反斜线()
\n换行符
\r回车符
\t制表符
\0ASCII 0 (NUL)
\b退格符
  • 向表中插入两条学生信息

image-20241007154537487

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@杨星辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值