目录
🥙8.1.1 mysql中常用的三种插入数据的语句
1. insert into - 插入数据
2. replace into - 插入替换数据
3. insert ignore - 如果已存在,忽略当前新数据
🥙8.1.2 以上三种方法的练习及区分
🥙8.1.3 说明
🥙8.1.4 牛客练习题
🥙8.1.1 mysql中常用的三种插入数据的语句
1. insert into - 插入数据
数据库会检查主键,如果出现重复会报错;
# 第一种方式
insert into 表名(字段名1,字段名2,...) values(值1,值2,...);
# 第二种方式:按照表中所有字段进行插入数据,一定要与字段在表中定义的顺序一致
insert into 表名 values(值1,值2,...);
2. replace into - 插入替换数据
需求表中有PrimaryKey,或者unique索引,如果数据库已经存在数据,则用新数据替换,如果没有数据效果则和insert into一样;
# 第一种方式
replace into 表名(字段名1,字段名2,...) values(值1,值2,...);
# 第二种方式:按照表中所有字段进行插入数据,一定要与字段在表中定义的顺序一致
replace into 表名 values(值1,值2,...);
3. insert ignore - 如果已存在,忽略当前新数据
如果已经存在相同的记录,则忽略当前新数据;
# 第一种方式
insert ignore into 表名(字段名1,字段名2,...) values(值1,值2,...);
# 第二种方式:按照表中所有字段进行插入数据,一定要与字段在表中定义的顺序一致
insert ignore into 表名 values(值1,值2,...);
注:对于以上三种方法,如果表中没有设置主键或唯一索引;则效果都是一样的,即直接插入数据。
🥙8.1.2 以上三种方法的练习及区分
drop table if exists actor;
CREATE TABLE actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update DATETIME NOT NULL,
addresses varchar(45));
insert into actor values ('3', 'WD', 'GUINESS', '2006-02-15 12:34:33','北京');
问题1:用以上三种方式对于表actor插入如下数据
actor_id |
first_name |
last_name |
last_update |
addresses |
'3' |
'ED' |
'CHASE' |
now() |
'上海’ |
① 使用insert into语句直接插入
insert into actor values('3','ED','CHASE',now(),'上海');
结果:由于主键重复报错
②使用replace into语句插入
replace into actor values('3','ED','CHASE',now(),'上海');
插入成功,可以看到数据被替换了
③使用insert ignore句插入
insert ignore actor values('3','ED','CHASE',now(),'上海');
结果没有报错,数据也没有更改
问题2: 同时插入多行以下数据
actor_id |
first_name |
last_name |
last_update |
addresses |
'4' |
'ZS' |
'Fuel' |
now() |
'上海’ |
'5' |
'LS' |
'Son' |
now() |
'南京’ |
# 可以同时插入多行
insert into actor values ('4', 'ZS', 'Fuel',now(),'上海'),
('5', 'LS', 'Son',now(),'南京');
结果:
如果VALUES前面的()中没有列出字段,那么默认就是为表中的所有字段赋值,那么个数与顺序与表结构中字段定义的一致
问题3:插入指定字段数据
actor_id |
first_name |
last_name |
last_update |
'6' |
'PENELOP' |
'GUINESS' |
now() |
insert into actor(actor_id,first_name,last_name,last_update)
values ('6', 'PENELOP', 'GUINESS',now());
结果
对于没有列出的字段,像自增列就自动赋值,像默认值列就自动赋默认值,像允许NULL的列就自动赋NULL值,但是非空列又没有提供默认值会自动赋值为对应数据类型的默认值,例如字符串赋值为空字符串,int赋值为0;
🥙8.1.3 说明
1、值列表(值1,值2,......)的顺序、个数与字段列表(字段1,字段2,......) 中字段的顺序、个数一致
-
如果个数少了就报Column count doesn’t match value count
-
如果VALUES前面的()中没有列出字段,那么默认就是为表中的所有字段赋值,那么个数与顺序与表结构中字段定义的一致
2、关于自增长列、默认值列、允许为NULL列的赋值
-
如果字段列表列出了字段名,那么值列表中就要为其赋值,哪怕它是自增长列,有默认值列,可以为NULL值的列。
-
InnoDB表的自动增长列可以手动插入合适的值,但是插入的值如果是NULL或者0,则实际插入的将是自动增长后的值;
-
如果列声明了“默认约束”那么对应的位置可以赋值具体的值,也可以使用“DEFAULT”,表示使用默认值;
-
如果列允许了NULL值,那么可以为对应的字段可以赋值为具体值也可以赋值为NULL
3、VALUES也可以写成VALUE,但是VALUES是标准写法
4、如果插入从表的数据,要注意查看主表参照字段的值是否存在
5、值的位置可以是常量值、表达式、函数文章来源:https://www.toymoban.com/news/detail-843109.html
🥙8.1.4 牛客练习题
SQL229 批量插入数据文章来源地址https://www.toymoban.com/news/detail-843109.html
到了这里,关于Mysql - 常用插入数据的三种方法详解及练习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!