ToB企服应用市场:ToB评测及商务社交产业平台

标题: Mysql - 常用插入数据的三种方法详解及训练 [打印本页]

作者: 曹旭辉    时间: 5 天前
标题: Mysql - 常用插入数据的三种方法详解及训练
目录
??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 - 插入数据

数据库会查抄主键,如果出现重复会报错;
  1. # 第一种方式
  2. insert into 表名(字段名1,字段名2,...) values(值1,值2,...);
  3. # 第二种方式:按照表中所有字段进行插入数据,一定要与字段在表中定义的顺序一致
  4. insert into  表名 values(值1,值2,...);
复制代码
2. replace into - 插入更换数据

需求表中有PrimaryKey,或者unique索引,如果数据库已经存在数据,则用新数据更换,如果没有数据效果则和insert into一样;
  1. # 第一种方式
  2. replace into 表名(字段名1,字段名2,...) values(值1,值2,...);
  3. # 第二种方式:按照表中所有字段进行插入数据,一定要与字段在表中定义的顺序一致
  4. replace into 表名 values(值1,值2,...);
复制代码
3. insert ignore - 如果已存在,忽略当前新数据

如果已经存在相同的纪录,则忽略当前新数据;
  1. # 第一种方式
  2. insert ignore into 表名(字段名1,字段名2,...) values(值1,值2,...);
  3. # 第二种方式:按照表中所有字段进行插入数据,一定要与字段在表中定义的顺序一致
  4. insert ignore into 表名 values(值1,值2,...);
复制代码
  注:对于以上三种方法,如果表中没有设置主键或唯一索引;则效果都是一样的,即直接插入数据。
  ??8.1.2 以上三种方法的训练及区分

  1. drop table if exists actor;
  2. CREATE TABLE actor (
  3.    actor_id  smallint(5)  NOT NULL PRIMARY KEY,
  4.    first_name varchar(45) NOT NULL,
  5.    last_name  varchar(45) NOT NULL,
  6.    last_update DATETIME NOT NULL,
  7.    addresses varchar(45));
  8. 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语句直接插入
  1. insert into actor values('3','ED','CHASE',now(),'上海');
复制代码
效果:由于主键重复报错

②使用replace into语句插入
  1. replace into actor values('3','ED','CHASE',now(),'上海');
复制代码
插入乐成,可以看到数据被更换了

③使用insert ignore句插入
  1. 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()
'南京’
  1. # 可以同时插入多行
  2. insert into actor values ('4', 'ZS', 'Fuel',now(),'上海'),
  3.                          ('5', 'LS', 'Son',now(),'南京');
复制代码
效果:

   如果VALUES前面的()中没有列出字段,那么默认就是为表中的所有字段赋值,那么个数与顺序与表结构中字段界说的同等
  问题3:插入指定字段数据
actor_id
first_name
last_name
last_update
‘6’
‘PENELOP’
‘GUINESS’
now()
  1. insert into actor(actor_id,first_name,last_name,last_update)
  2. values ('6', 'PENELOP', 'GUINESS',now());
复制代码
效果

   对于没有列出的字段,像自增列就自动赋值,像默认值列就自动赋默认值,像允许NULL的列就自动赋NULL值,但是非空列又没有提供默认值会自动赋值为对应数据范例的默认值,例如字符串赋值为空字符串,int赋值为0;
  ??8.1.3 阐明

1、值列表(值1,值2,…)的顺序、个数与字段列表(字段1,字段2,…) 中字段的顺序、个数同等

2、关于自增长列、默认值列、允许为NULL列的赋值

3、VALUES也可以写成VALUE,但是VALUES是尺度写法
4、如果插入从表的数据,要注意检察主表参照字段的值是否存在
5、值的位置可以是常量值、表达式、函数
??8.1.4 牛客训练题

SQL229 批量插入数据

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4