摘要:在本教程中,您将学习如何使用 MySQL INSERT
语句向表中插入一行或多行。
MySQL INSERT
语句简介
INSERT
语句允许您向表中插入一行或多行。下面说明了INSERT
语句的语法:
INSERT INTO table(c1,c2,...)
VALUES (v1,v2,...);
在这个语法中,
- 首先,在
INSERT INTO
子句后面的括号内指定表名和逗号分隔列的列表。 - 然后,将相应列的值的逗号分隔列表放在
VALUES
关键字后面的括号内。
列数和值必须相同。此外,列的位置必须与其值的位置相对应。
要使用单个INSERT
语句将多行插入表中,请使用以下语法:
INSERT INTO table(c1,c2,...)
VALUES
(v11,v12,...),
(v21,v22,...),
...
(vnn,vn2,...);
Code language: SQL (Structured Query Language) (sql)
在此语法中,行在VALUES
子句中用逗号分隔。
MySQL INSERT
示例
让我们创建一个名为tasks
的新表来练习INSERT
语句。
CREATE TABLE IF NOT EXISTS tasks (
task_id INT AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
start_date DATE,
due_date DATE,
priority TINYINT NOT NULL DEFAULT 3,
description TEXT,
PRIMARY KEY (task_id)
);
Code language: SQL (Structured Query Language) (sql)
1) MySQL INSERT
– 简单的INSERT
示例
以下语句将新行插入到tasks
表中:
INSERT INTO tasks(title,priority)
VALUES('Learn MySQL INSERT Statement',1);
Code language: SQL (Structured Query Language) (sql)
MySQL 返回以下消息:
1 row(s) affected
Code language: SQL (Structured Query Language) (sql)
这意味着已成功将一行插入到tasks
表中。
此查询从tasks
表返回数据:
SELECT * FROM tasks;
Code language: SQL (Structured Query Language) (sql)
这是输出:

在此示例中,我们仅指定了title
和priority
列的值。对于其他列,MySQL 使用默认值。
task_id
列是一个AUTO_INCREMENT
列。这意味着每当向表中插入一行时,MySQL 都会生成一个连续整数。
start_date
、 due_date
和description
列使用NULL
作为默认值,因此,如果您未在INSERT
语句中指定它们的值,MySQL 将使用NULL
插入到这些列中。
2) MySQL INSERT
– 使用默认值插入行示例
如果要在列中插入默认值,有两种方法:
- 忽略
INSERT
语句中的列名和值。 - 在
INSERT INTO
子句中指定列名,并在VALUES
子句中使用DEFAULT
关键字。
下面的例子演示了第二种方式:
INSERT INTO tasks(title,priority)
VALUES('Understanding DEFAULT keyword in INSERT statement',DEFAULT);
Code language: SQL (Structured Query Language) (sql)
在此示例中,我们指定了priority
列和DEFAULT
关键字。
因为表定义中声明的列priority
的默认值为 3:
priority TINYINT NOT NULL DEFAULT 3
Code language: SQL (Structured Query Language) (sql)
MySQL 使用数字 3 插入priority
列。
以下语句返回插入后tasks
表的内容:
SELECT * FROM tasks;
Code language: SQL (Structured Query Language) (sql)

3) MySQL INSERT
– 将日期插入表示例
要将文字日期值插入到列中,请使用以下格式:
'YYYY-MM-DD'
Code language: SQL (Structured Query Language) (sql)
在这种格式中:
YYYY
代表四位数年份,例如 2018。-
MM
代表两位数月份,例如 01、02 和 12。 -
DD
代表两位数的日期,例如 01、02、30。
以下语句将包含开始日期和截止日期值的新行插入到tasks
表中:
INSERT INTO tasks(title, start_date, due_date)
VALUES('Insert date into table','2018-01-09','2018-09-15');
Code language: SQL (Structured Query Language) (sql)
下图是插入后tasks
表的内容:

可以在VALUES
子句中使用表达式。例如,以下语句使用当前日期作为开始日期和截止日期列添加新任务:
INSERT INTO tasks(title,start_date,due_date)
VALUES('Use current date for the task',CURRENT_DATE(),CURRENT_DATE())
Code language: SQL (Structured Query Language) (sql)
在此示例中,我们使用CURRENT_DATE()
函数作为start_date
和due_date
列的值。请注意, CURRENT_DATE()
函数是一个返回当前系统日期的日期函数。
以下是插入后tasks
表的内容:

4) MySQL INSERT
– 插入多行示例
以下语句将三行插入tasks
表中:
INSERT INTO tasks(title, priority)
VALUES
('My first task', 1),
('It is the second task',2),
('This is the third task of the week',3);
Code language: SQL (Structured Query Language) (sql)
在此示例中,每行数据都被指定为VALUES
子句中的值列表。
MySQL 返回以下消息:
3 row(s) affected Records: 3 Duplicates: 0 Warnings: 0
Code language: SQL (Structured Query Language) (sql)
这意味着三行已成功插入,没有重复或警告。
SELECT * FROM tasks;
Code language: SQL (Structured Query Language) (sql)
表tasks
具有以下数据:

在本教程中,您学习了如何使用 MySQL INSERT
语句向表中添加一行或多行。