SQL语句-INSERT语句

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: Insert语句Insert语句三种写法:mysql> desc students;+-------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | E...

Insert语句

Insert语句三种写法:

mysql> desc students;
+-------+-------------+------+-----+---------+-------+
| Field     | Type  | Null  | Key    | Default | Extra |
+-------+-------------+------+-----+---------+-------+ 
|sid        |int(11)    |YES        |   |NULL   |   |
|sname  |varchar(20)    |YES    |   |NULL   |   |
+-------+-------------+------+-----+---------+-------+


Insert into students values(1,’aaa’);
Insert into students set sid=2,sname=‘bbb’;
Insert into students select * from students_bak;

mysql> select * from students;
+------+-------+
|sid |sname|
+------+-------+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
+------+-------+
  • 其中insert...valuesinsert...set两种语句都是将指定的数据插入到现成的表中,而insert...select语句是将另外表中数据查出来并插入 到现成的表中
  • Partition子句代表可以将数据插入到指定的表分区中
  • Tbl_name代表将数据插入到的目标表
  • Col_name代表要插入指定数据的目标表列,如果是多列则用逗号 隔开,如果目标表中的某些列没有在Insert语句中指定,则这些列 会插入默认值,当然可以使用default显视指定插入默认值
  • Values中除了可以指定确定的数值之外,还可以使用表达式expr
INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);         -- 正确
INSERT INTO tbl_name (col1,col2) VALUES(col2*2,15);         -- 错误
mysql> insert into students(sid,sname) values(4,'ddd');
mysql> insert into students(sid) values(5);
mysql> insert into students(sname) values('eee');
mysql> insert into students value(2*3,'fff');
mysql> select * from students;
+------+-------+
|sid        |sname|
+------+-------+
| 1     |aaa    |
| 2     |bbb    |
| 3         | ccc   |
| 4     |ddd    |
| 5         | NULL |
|NULL   |eee    |
| 6     |fff    |
+------+-------+
  • Insert...values语句不光可以插入一条数据,也可以插入多条数据

    INSERT INTO tbl_name(a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
    Insert into students values(7,’abc’),(8,’bcd’);
  • Insert...values和insert...select语句的执行结果如下
  • Records: 100 Duplicates: 0 Warnings: 0
  • Records代表此语句操作了多少行数据,但不一定是多少行被插入的数据,因为如果存 在相同的行数据且违反了某个唯一性,则duplicates会显示非0数值,warning代表语句执 行过程中的一些警告信息
  • low_priority关键词代表如果有其他链接正在读取目标表数据,则此insert语句需要等待读取完成
  • low_priority和high_priority关键词仅在MyISAM, MEMORY, and MERGE三种存储引擎下才生效
  • Ignore关键词代表insert语句如果违反主键和唯一键的约束条件,则不报错而只产生警告信息,违反的行被丢弃,而不是整个语句回退;在数据类型转换
    有问题时如果有ignore则只产生警告信息,而不是语句回退

CREATE TABLE `students` (
`sid` int(11) DEFAULT NULL,
`sname` varchar(20) DEFAULT NULL,
`gender` int(11) DEFAULT NULL,
UNIQUE KEY `idx_st_sid` (`sid`),
KEY `idx_st_union` (`sname`,`sex`)
) ENGINE=InnoDB DEFAULT CHARSET=latin
mysql> select * from students;
+------+-------+--------+
|sid|sname|gender|
+------+-------+--------+
|1|abc| 1|
|2|abc| 1|
|3|abc| 1|
mysql> insert into students values(1,'bbb',0);
ERROR 1062 (23000): Duplicate entry '1' for key 'idx_st_sid'
mysql> insert ignore into students values(1,'bbb',0);
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> show warnings;
+---------+------+------------------------------------------+
| Level     | Code | Message                    |
+---------+------+------------------------------------------+
| Warning   | 1062 | Duplicate entry '1' for key 'idx_st_sid'   |
mysql> insert ignore into students values(1,'aa',0),(5,'bb',1); 
Query OK, 1 row affected, 1 warning (0.03 sec)
Records: 2 Duplicates: 1 Warnings: 1
mysql> select * from students3; 
+------+-------+--------+
|sid |sname|gender|
+------+-------+--------+ 
|1|a|0| 
|2|b|0| 
|4|c|1|
mysql> insert ignore into students select * from students3;
Query OK, 1 row affected, 2 warnings (0.01 sec)
Records: 3 Duplicates: 2 Warnings: 2

Insert...select语句详解

用于从另外的表中查出记录并插入到目标表中

INSERT INTO tbl_temp2 (fld_id)
SELECT tbl_temp1.fld_order_id
FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;

当目标表和select语句中的表相同时,则会先将select语句的结果 存放在临时表中,再插入到目标表中(注意执行顺序)

insert into students select * from students;

Insert delayed语句详解

在5.6.6版本之前,用来表示此插入语句当碰到其他链接正在使用 目标表时就等待,直到目标表没被用时再插入数据
在5.7版本时,delayed关键词就不再支持,但语句执行时不会报 错,只会产生一个警告信息,后续版本会去掉此关键词

insert delayed into students select * from students; 
Query OK, 18 rows affected, 1 warning (0.00 sec)
Records: 18 Duplicates: 0 Warnings: 1

Insert on duplicate key update语句详解

当insert语句中使用on duplicate key update子句时,如果碰到当前 插入的数据违反主键或唯一键的唯一性约束,则Insert会转变成 update语句修改对应的已经存在表中的这条数据。比如如果a字段 有唯一性约束且已经含有1这条记录,则以下两条语句的执行结 果相同

INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;
UPDATE table SET c=c+1 WHERE a=1;

On duplicate key update子句后面可以跟多个修改,用逗号隔开

上述例子中如果b字段也有唯一性约束,则与此语句的执行结果 相同,但一般应该避免出现对应多条的情况

UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;

Insert on duplicate key update语句详解

mysql> create table students2(sid int primary key,sname varchar(20),sex int);
Insert into students2 values(1,’aaa’,1);            -- 插入成功
Insert into students2 values(1,’bbb’,0);            -- 插入失败
mysql> insert into students2 values(1,'bbb',0);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
insert into students2 values(1,‘bbb’,0) on duplicate key update sname=‘bbb’;
+-----+-------+------+
| sid   | sname     | sex | 
+-----+-------+------+ 
| 1 |bbb        | 1 |
insert into students2 values(1,‘ccc’,0) on duplicate key update sname=‘ccc’,sex=0;      -- 执行成功

将如下数据插入到dept表中

1,’computer science’ ; 2,’education’; 4,’accounting’
根据create table ... like语句创建teacher_backup表,并插入如下数 据:
1,’susan’,1; 2,’ruth’,4; 3,’vivian’,4
将teacher_backup表的数据通过insert...select语句插入到teacher表中

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
SQL Oracle 关系型数据库
SQL 数据操作技巧:SELECT INTO、INSERT INTO SELECT 和 CASE 语
SELECT INTO 语句将数据从一个表复制到一个新表中。
680 1
|
SQL 关系型数据库 MySQL
MySQL技能完整学习列表3、SQL语言基础——1、SQL(Structured Query Language)简介——2、基本SQL语句:SELECT、INSERT、UPDATE、DELETE
MySQL技能完整学习列表3、SQL语言基础——1、SQL(Structured Query Language)简介——2、基本SQL语句:SELECT、INSERT、UPDATE、DELETE
236 0
|
SQL 数据库
SQL INSERT INTO SELECT 语句
SQL INSERT INTO SELECT 语句
2307 8
|
9月前
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
2867 11
|
SQL 存储 关系型数据库
SQL的基本语法以及SQL语句的关键字的使用,SELECT、INSERT、UPDATE、DELETE、CREATE、ALTER、DROP等。
SQL的基本语法以及SQL语句的关键字的使用,SELECT、INSERT、UPDATE、DELETE、CREATE、ALTER、DROP等。
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
209 1
|
SQL 关系型数据库 BI
关系型数据库SQL server INSERT 语句
【8月更文挑战第3天】
356 9
|
SQL 关系型数据库 MySQL
INSERT INTO t_a.tableName SELECT * FROM t_b.tableName 如何通过定义一个list对象,包含多个tableName,循环执行前面的sql,用MySQL的语法写
【8月更文挑战第7天】INSERT INTO t_a.tableName SELECT * FROM t_b.tableName 如何通过定义一个list对象,包含多个tableName,循环执行前面的sql,用MySQL的语法写
152 5
|
SQL 数据库
SQL INSERT INTO 语句
【7月更文挑战第12天】SQL INSERT INTO 语句。
254 12
|
SQL 数据库
SQL INSERT INTO 语句
【7月更文挑战第11天】SQL INSERT INTO 语句。
147 2

热门文章

最新文章