MySQL Insert

摘要:在本教程中,您将学习如何使用 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) affectedCode language: SQL (Structured Query Language) (sql)

这意味着已成功将一行插入到tasks表中。

此查询从tasks表返回数据:

SELECT * FROM tasks;Code language: SQL (Structured Query Language) (sql)

这是输出:

MySQL 插入示例

在此示例中,我们仅指定了titlepriority列的值。对于其他列,MySQL 使用默认值。

task_id列是一个AUTO_INCREMENT列。这意味着每当向表中插入一行时,MySQL 都会生成一个连续整数。

start_datedue_datedescription列使用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 3Code language: SQL (Structured Query Language) (sql)

MySQL 使用数字 3 插入priority列。

以下语句返回插入后tasks表的内容:

SELECT * FROM tasks;Code language: SQL (Structured Query Language) (sql)
MySQL 插入默认值

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表的内容:

MySQL 将日期插入表中

可以在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_datedue_date列的值。请注意, CURRENT_DATE()函数是一个返回当前系统日期的日期函数

以下是插入后tasks表的内容:

MySQL INSERT 当前日期示例

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: 0Code language: SQL (Structured Query Language) (sql)

这意味着三行已成功插入,没有重复或警告。

SELECT * FROM tasks;Code language: SQL (Structured Query Language) (sql)

tasks具有以下数据:

MySQL INSERT multiple rows into table

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

本教程有帮助吗?