INSERT

本文介绍MySQL中插入记录的三种方法,包括使用VALUES批量插入多条记录、使用SET插入单条记录以及通过SELECT从其他表中选择性地插入数据。

插入记录的几种方法

  1. INSERT [INTO] tbl_name [(col_name,…)] {VALUES|VALUE} ({expr | DEFAULT}), (),….

    • 可以插入多条。
    • INSERT users VALUES(DEFAULT, ‘Json’,’123’,23,1),(NULL,’Rose’,md5(‘123’),DEFAULT,0);
  2. INSERT [INTO] tbl_name SET col_name={expr | DEFAULT} ,…

    • ps:与第一种方式的区别在于,此方法可以使用子查询(SubQuery), 一次只能插入一条记录。
    • INSERT users SET username=’Ben’,password=’456’;
  3. INSERT [INTO] tbl_name [(col_name,…)] SELECT…
    • 此方法可以将查询结果插入到指定数据表中
    • INSERT test2(username) SELECT username FROM users WHERE age>=25

// 自增修饰的值可以设置为null 或default
// 插入的值可以是表达式、函数。

1

mysql> USE test;
Database changed
mysql> CREATE TABLE users(
    -> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    -> username VARCHAR(20) NOT NULL,
    -> password VARCHAR(32) NOT NULL,
    -> age TINYINT UNSIGNED NOT NULL DEFAULT 10,
    -> sex BOOLEAN
    -> );
Query OK, 0 rows affected (0.21 sec)

//
//
//
mysql> INSERT users VALUES(NULL, 'Tom','123',23,1);
Query OK, 1 row affected (0.05 sec)

mysql> SELECT * FROM users;
+----+----------+----------+-----+------+
| id | username | password | age | sex  |
+----+----------+----------+-----+------+
|  1 | Tom      | 123      |  23 |    1 |
+----+----------+----------+-----+------+
1 row in set (0.00 sec)

//
//
//
mysql> INSERT users VALUES(NULL, 'Json','123',23,1);
Query OK, 1 row affected (0.05 sec)

mysql> SELECT * FROM users;
+----+----------+----------+-----+------+
| id | username | password | age | sex  |
+----+----------+----------+-----+------+
|  1 | Tom      | 123      |  23 |    1 |
|  2 | Json     | 123      |  23 |    1 |
+----+----------+----------+-----+------+
2 rows in set (0.00 sec)

//
//
//
mysql> INSERT users VALUES(DEFAULT, 'Json','123',23,1);
Query OK, 1 row affected (0.04 sec)

mysql> SELECT * FROM users;
+----+----------+----------+-----+------+
| id | username | password | age | sex  |
+----+----------+----------+-----+------+
|  1 | Tom      | 123      |  23 |    1 |
|  2 | Json     | 123      |  23 |    1 |
|  3 | Json     | 123      |  23 |    1 |
+----+----------+----------+-----+------+
3 rows in set (0.00 sec)

//
//
//
mysql> SELECT * FROM users;
+----+----------+----------+-----+------+
| id | username | password | age | sex  |
+----+----------+----------+-----+------+
|  1 | Tom      | 123      |  23 |    1 |
|  2 | Json     | 123      |  23 |    1 |
|  3 | Json     | 123      |  23 |    1 |
|  4 | Json     | 123      |  10 |    1 |
+----+----------+----------+-----+------+
4 rows in set (0.00 sec)

//
//
//
mysql> INSERT users VALUES(DEFAULT, 'Json','123',23,1),(NULL,'Rose',md5('123'),DEFAULT,0);
Query OK, 2 rows affected (0.06 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM users;
+----+----------+----------------------------------+-----+------+
| id | username | password                         | age | sex  |
+----+----------+----------------------------------+-----+------+
|  1 | Tom      | 123                              |  23 |    1 |
|  2 | Json     | 123                              |  23 |    1 |
|  3 | Json     | 123                              |  23 |    1 |
|  4 | Json     | 123                              |  10 |    1 |
|  5 | Json     | 123                              |  23 |    1 |
|  6 | Rose     | 202cb962ac59075b964b07152d234b70 |  10 |    0 |
+----+----------+----------------------------------+-----+------+
6 rows in set (0.00 sec)

mysql>

2

mysql> SELECT * FROM users;
+----+----------+----------------------------------+-----+------+
| id | username | password                         | age | sex  |
+----+----------+----------------------------------+-----+------+
|  1 | Tom      | 123                              |  23 |    1 |
|  2 | Json     | 123                              |  23 |    1 |
|  3 | Json     | 123                              |  23 |    1 |
|  4 | Json     | 123                              |  10 |    1 |
|  5 | Json     | 123                              |  23 |    1 |
|  6 | Rose     | 202cb962ac59075b964b07152d234b70 |  10 |    0 |
+----+----------+----------------------------------+-----+------+
6 rows in set (0.00 sec)

mysql> INSERT users SET username='Ben',password='456';
Query OK, 1 row affected (0.05 sec)

mysql> SELECT * FROM users;
+----+----------+----------------------------------+-----+------+
| id | username | password                         | age | sex  |
+----+----------+----------------------------------+-----+------+
|  1 | Tom      | 123                              |  23 |    1 |
|  2 | Json     | 123                              |  23 |    1 |
|  3 | Json     | 123                              |  23 |    1 |
|  4 | Json     | 123                              |  10 |    1 |
|  5 | Json     | 123                              |  23 |    1 |
|  6 | Rose     | 202cb962ac59075b964b07152d234b70 |  10 |    0 |
|  7 | Ben      | 456                              |  10 | NULL |
+----+----------+----------------------------------+-----+------+
7 rows in set (0.00 sec)

3

把users表中年龄大于25的用户名写入到test2表中

users表:

mysql> SELECT * FROM users;
+----+----------+----------------------------------+-----+------+
| id | username | password                         | age | sex  |
+----+----------+----------------------------------+-----+------+
|  1 | Tom      | 123                              |  27 |    0 |
|  3 | Json     | 123                              |  25 |    0 |
|  4 | Json     | 123                              |  21 |    0 |
|  5 | Json     | 123                              |  23 |    0 |
|  6 | Rose     | 202cb962ac59075b964b07152d234b70 |  19 |    0 |
|  7 | Ben      | 456                              |   8 |    0 |
|  8 | Hek      | 11111                            |  33 | NULL |
+----+----------+----------------------------------+-----+------+
7 rows in set (0.00 sec)

test2 表:

mysql> CREATE TABLE test2(
    -> id TINYINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    -> username VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.19 sec)

操作

mysql> INSERT test2(username) SELECT username FROM users WHERE age>=25;
Query OK, 3 rows affected (0.04 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM test2
    -> ;
+----+----------+
| id | username |
+----+----------+
|  1 | Tom      |
|  2 | Json     |
|  3 | Hek      |
+----+----------+
在数据库操作中,insert 操作主要用于向数据库表中插入数据,以下是关于 insert 操作的相关信息: - **应用场景**:在向数据库插入数据时,有时需要保留插入数据的 id,以便进行后续的 update 操作或者将 id 存入其他表作为外键。不过,默认情况下,insert 操作返回的是一个 int 值,代表当前 SQL 语句影响的行数,并非主键 id [^1]。 - **特殊语法**:在 MySQL 中,INSERT ON DUPLICATE KEY UPDATE 是强大的语法。当执行 INSERT 操作遇到主键或唯一索引冲突(即数据已存在)时,会自动执行更新操作,适用于需插入数据且在数据已存在时更新其值的场景。语法格式为:INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...) ON DUPLICATE KEY UPDATE column1 = value1, column2 = value2, ... [^2]。 - **DELAYED 调节符**:DELAYED 调节符可应用于 INSERT 和 REPLACE 语句。当 DELAYED 插入操作到达,服务器把数据行放入队列并立即给客户端返回状态信息,客户端能在数据表真正插入记录前继续操作。若有读取者从该数据表读取数据,队列中的数据会被保持,直到无读取者。接着服务器插入延迟数据行,插入时会检查有无新读取请求,若有,延迟数据行队列挂起,允许读取者操作,无读取者时再继续插入,直到队列清空 [^3]。 - **MyBatis 注解实现**:在 MyBatis 框架中,简单的 insert 语句可通过注解实现,相关注解有 @Insert、@select、@update、@delete 等 [^4]。 示例代码: ```sql -- 普通 insert 语句 INSERT INTO users (name, age) VALUES ('John', 25); -- INSERT ON DUPLICATE KEY UPDATE 示例 INSERT INTO users (id, name, age) VALUES (1, 'John', 26) ON DUPLICATE KEY UPDATE name = 'John', age = 26; ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值