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 INTO和VALUES都是关键字。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,因为我们只插入了name和age列。
插入多行数据
以下语句向 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代表两位数的月份,例如01、02和12。DD表示两位数的日期,例如01、02、30、31。
以下语句向 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标识符。