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
标识符。