MySQL INSERT 用法与实例

在本文中,我们通过实例介绍了在 MySQL 中使用 INSERT 语句将数据插入到表中。

在 MySQL 中,INSERT 语句用于将一行或者多行数据插入到数据表中。

INSERT 语法

我们可以使用一个 INSERT 语句插入一行或多行数据。

INSERT 语句的插入单行数据语法:

INSERT INTO table_name (column_1, column_2, ...)
VALUES (value_1, value_2, ...);

INSERT 语句的插入多行数据语法:

INSERT INTO table_name (column_1, column_2, ...)
VALUES (value_11, value_12, ...),
       (value_21, value_22, ...)
       ...;

说明:

  • INSERT INTOVALUES 都是关键字。
  • INSERT INTO 后跟表名 table_name
  • 表名 table_name 后跟要插入数据的列名列表。列名放在小括号中,多个列表使用逗号分隔。
  • VALUES 关键字之后的小括号中是值列表。值的数量要和字段的数量相同。值的位置和列的位置一一对应。
  • 当插入多行数据时,多个值列表之间使用逗号分隔。
  • INSERT 语句返回插入的行数。

MySQL INSERT 实例

为了演示 INSERT 的用法,我们通过以下 CREATE TABLE 语句创建一个表命名为 user。如下:

CREATE TABLE user (
    id INT AUTO_INCREMENT,
    name VARCHAR(255) NOT NULL,
    age INT,
    birthday DATE,
    PRIMARY KEY (id)
);

插入单行数据

以下语句向 user 表中插入一个新行:

INSERT INTO user (name, age)
VALUES ("Jim", 18);
Query OK, 1 row affected (0.00 sec)

注意:输出中的 1 row affected 代表已经成功插入了一行数据到 user 表中。

我们也可以通过以下 SQL 查询 user 表的数据,以验证是否成功插入。

SELECT * FROM user;
+----+------+------+----------+
| id | name | age  | birthday |
+----+------+------+----------+
|  1 | Jim  |   18 | NULL     |
+----+------+------+----------+
1 row in set (0.00 sec)

注意:

  • id 列的值是自动生成的,因为它是 AUTO_INCREMENT 列。
  • birthday 列值为 NULL,因为我们只插入了 nameage 列。

插入多行数据

以下语句向 user 表中插入 2 个新行:

INSERT INTO user (name, age)
VALUES ("Tim", 19), ("Lucy", 16);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

注意:

  • 输出中的 2 row affected 代表已经成功插入了 2 行数据到 user 表中。
  • Records: 2 代表有 2 行数据要插入到表中。
  • Duplicates: 0 代表重复的行数是 0。
  • Warnings: 0 代表需要注意的行数是 0。

我们也可以通过以下 SQL 查询 user 表的数据,以验证是否成功插入。

SELECT * FROM user;
+----+------+------+----------+
| id | name | age  | birthday |
+----+------+------+----------+
|  1 | Jim  |   18 | NULL     |
|  2 | Tim  |   19 | NULL     |
|  3 | Lucy |   16 | NULL     |
+----+------+------+----------+
3 rows in set (0.00 sec)

插入日期字段

如果要插入日期类型的字段,可以使用 YYYY-MM-DD 格式的文本字符串。以下是对这种日期格式的说明:

  • YYYY 代表四位数年份,例如 2020
  • MM 代表两位数的月份,例如 010212
  • DD 表示两位数的日期,例如 01023031

以下语句向 user 表中插入一个行带有 birthday 字段的数据:

INSERT INTO user(name, age, birthday)
VALUES('Jack', 20, '2000-02-05');
Query OK, 1 row affected (0.00 sec)

我们可以通过以下 SQL 查询 user 表的数据,以验证是否成功插入。

SELECT * FROM user;
+----+------+------+------------+
| id | name | age  | birthday   |
+----+------+------+------------+
|  1 | Jim  |   18 | NULL       |
|  2 | Tim  |   19 | NULL       |
|  3 | Lucy |   16 | NULL       |
|  4 | Jack |   20 | 2000-02-05 |
+----+------+------+------------+
4 rows in set (0.00 sec)

INSERT 修饰符

在 MySQL 中, INSERT 语句支持 4 个修饰符:

  • LOW_PRIORITY: 如果你指定了 LOW_PRIORITY 修饰符,MySQL 服务器将延迟执行 INSERT 操作直到没有客户端对表进行读操作。

    LOW_PRIORITY 修饰符影响那些只支持表级锁的存储引擎,比如: MyISAM, MEMORY, 和 MERGE

  • HIGH_PRIORITY: 如果你指定了 HIGH_PRIORITY 修饰符,它会覆盖掉服务器启动时的 --low-priority-updates 选项。

    HIGH_PRIORITY 修饰符影响那些只支持表级锁的存储引擎,比如: MyISAM, MEMORY, 和 MERGE

  • IGNORE: 如果你指定了 IGNORE 修饰符,MySQL 服务器会在执行 INSERT 操作期间忽略那些可忽略的错误。这些错误最终会作为 WARNING 返回。

  • DELAYED: 这个修饰符已经在 MySQL 5.6 版本中弃用,将来会被删除。在 MySQL 8.0 中,这个修饰符可用但会被忽略。

修饰符的用法如下:

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
INTO table_name
...

INSERT 限制

在 MySQL 中,max_allowed_packet 配置了服务器和客户端任何单个消息大小的上限。这同样适用于 SELECT 语句。当一个 SELECT 语句的大小超过 max_allowed_packet 值时,服务器就会给出一个错误。

以下语句显示了当前服务器上的 max_allowed_packet 配置:

SHOW VARIABLES LIKE 'max_allowed_packet';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| max_allowed_packet | 67108864 |
+--------------------+----------+
1 row in set (0.00 sec)

max_allowed_packet 以字节为单位。并且不同服务器上的值可能不同。

结论

在本文中,我们通过实例介绍了在 MySQL 中使用 INSERT 语句将数据插入到表中。以下是 INSERT 语句的要点:

  • INSERT 语句用于将一行或者多行数据插入到数据表中。
  • INSERT INTO 后跟要插入数据表名。
  • 表名后跟要插入数据的列名列表。列名放在小括号中,多个列表使用逗号分隔。
  • VALUES 关键字之后的小括号中是值列表。值的数量要和字段的数量相同。值的位置和列的位置一一对应。
  • 当插入多行数据时,多个值列表之间使用逗号分隔。
  • 如果想忽略插入过程中一些错误行,可使用 IGNORE 标识符。