MySQL - INSERT 语句



MySQL INSERT 语句

您可以使用 INSERT 语句向 MySQL 中的现有表添加新行。在此过程中,您需要指定表名、列名和值(列名的顺序相同)。

语法

以下是 MySQL INSERT 语句的语法。

INSERT INTO table_name (column1, column2, column3,...columnN)
VALUES (value1, value2, value3,...valueN);

其中,table_name 是您需要插入数据的表名,(column1, column2, column3,...columnN) 是列名,(value1, value2, value3,...valueN) 是记录中的值。

示例

假设我们使用 CREATE TABLE 语句在 MySQL 数据库中创建了一个名为 **Sales** 的表,如下所示

CREATE TABLE sales(
   ID INT,
   ProductName VARCHAR(255),
   CustomerName VARCHAR(255),
   DispatchDate date,
   DeliveryTime time,
   Price INT,
   Location VARCHAR(255)
);

以下查询在上面创建的表中插入一行:

Insert into sales values
(1, 'Key-Board', 'Raja', DATE('2019-09-01'), TIME('11:00:00'), 7000, 
'Hyderabad');

如果您按照表中的顺序将值传递给 INSERT 语句,则可以省略列名:

Insert into sales values(2, 'Earphones', 'Roja', DATE('2019-05-01'),
TIME('11:00:00'), 2000, 'Vishakhapatnam');

现在,让我们在 **Sales** 表中再插入 3 条记录。

Insert into sales values
(3, 'Mouse', 'Puja', DATE('2019-03-01'), TIME('10:59:59'), 
3000, 'Vijayawada'),
(4, 'Mobile', 'Vanaja', DATE('2019-03-01'), TIME('10:10:52'), 
9000, 'Chennai'),
(5, 'Headset', 'Jalaja', DATE('2019-04-06'), TIME('11:08:59'), 
6000, 'Goa');

验证

如果您使用 SELECT 语句验证 Sales 表的内容,您可以观察到已插入的记录,如下所示:

SELECT * FROM SALES;

输出

以上查询将产生以下输出:

ID 产品名称 客户名称 发货日期 送达时间 价格 地点
1 键盘 Raja 2019-09-01 11:00:00 7000 海德拉巴
2 耳机 Roja 2019-05-01 11:00:00 2000 维沙卡帕特南
3 鼠标 Puja 2019-03-01 10:59:59 3000 维杰亚瓦达
4 手机 Vanaja 2019-03-01 10:10:52 9000 金奈
5 耳机 Jalaja 2019-04-06 11:08:59 6000 果阿

INSERT ... SET

您可以使用 INSERT...SET 语句将值设置为选定的列来插入记录。以下是此语句的语法:

INSERT INTO table_name SET column_name1 = value1, column_name2=value2s...;

其中,table_name 是您需要向其中插入记录的表名,column_name1 = value1, column_name2 = value2 ...... 是选定的列名及其相应的值。

如果您使用此语句插入记录,则其他列的值将为 null。

示例

以下查询使用 INSERT...SET 语句将记录插入 SALES 表。在这里,我们只向 ProductName、CustomerName 和 Price 列传递值(其余值为 NULL):

INSERT INTO
SALES SET ID = 6,
ProductName = 'Speaker',
CustomerName = 'Rahman',
Price = 5500;

验证

如果您使用 SELECT 语句检索 SALES 表的内容,您可以观察到已插入的行,如下所示

SELECT * FROM SALES;

输出

以下是上述程序的输出:

ID 产品名称 客户名称 发货日期 送达时间 价格 地点
1 键盘 Raja 2019-09-01 11:00:00 7000 海德拉巴
2 耳机 Roja 2019-05-01 11:00:00 2000 维沙卡帕特南
3 鼠标 Vanaja 2019-03-01 10:59:59 3000 维杰亚瓦达
4 手机 Vanaja 2019-03-01 10:10:52 9000 金奈
5 耳机 Jalaja 2019-04-06 11:08:59 6000 果阿
6 扬声器 Rahman NULL NULL 5500 NULL

INSERT .... SELECT

您可以从一个表中选择所需的列值,并将它们作为记录插入另一个表中,使用 INSERT .... SELECT 语句,以下是执行此操作的语法:

INSERT INTO table_to (column1, column2,....)
SELECT Column1, column2 .....
FROM Table_from
WHERE condition

示例

假设我们创建了一个表,其中包含销售详情以及客户的联系详情,如下所示:

CREATE TABLE SALES_DETAILS (
   ID INT,
   ProductName VARCHAR(255),
   CustomerName VARCHAR(255),
   DispatchDate date,
   DeliveryTime time,
   Price INT,
   Location VARCHAR(255),
   CustomerAge INT,
   CustomrtPhone BIGINT,
   DispatchAddress VARCHAR(255),
   Email VARCHAR(50)
);

现在,让我们使用 INSERT 语句在上面创建的表中插入 2 条记录,如下所示:

Insert into SALES_DETAILS values
(1, 'Key-Board', 'Raja', DATE('2019-09-01'), TIME('11:00:00'), 7000, 
'Hyderabad',25,'9000012345','Hyderabad - Madhapur','[email protected]'),
(2, 'Mobile','Vanaja', DATE('2019-03-01'), TIME('10:10:52'), 9000, 
'Chennai',30,'90000123654','Chennai- TNagar','[email protected]');

如果我们想要另一个只包含客户联系详情的表,则创建一个表,如下所示:

CREATE TABLE CustContactDetails (
   ID INT,
   Name VARCHAR(255),
   Age INT,
   Phone BIGINT,
   Address VARCHAR(255),
   Email VARCHAR(50)
);

以下查询使用 INSERT INTO SELECT 语句将记录插入 CustContactDetails 表。在这里,我们尝试将 SALES_DETAILS 表中的记录插入 CustContactDetails 表:

INSERT INTO CustContactDetails (ID, Name, Age, Phone, Address, Email)
SELECT
ID, CustomerName, CustomerAge, CustomrtPhone, DispatchAddress, Email
FROM SALES_DETAILS
WHERE ID = 1 AND CustomerName = 'Raja';

INSERT INTO CustContactDetails (ID, Name, Age, Phone, Address, Email)
SELECT 
ID, CustomerName, CustomerAge, CustomrtPhone, DispatchAddress, Email
FROM SALES_DETAILS
WHERE ID = 2 AND CustomerName = 'Vanaja';

验证

您可以验证 CustContactDetails 表的内容,如下所示:

SELECT * FROM CustContactDetails;

输出

上述 mysql 查询将生成以下输出:

ID 姓名 年龄 电话 地址 邮箱
1 Raja 25 9000012345 海德拉巴 - Madhapur [email protected]
2 Vanaja 30 90000123654 金奈 - TNagar [email protected]

INSERT ... TABLE

另一方面,您可以使用 INSERT...TABLE 语句将一个表的内容插入另一个表中,而不是选择特定列。以下是执行此操作的语法:

INSERT INTO table1 TABLE table2;

示例

假设我们使用以下 CREATE 语句创建了一个名为 student 的表:

Create table Student(
   Name Varchar(35), 
   age INT, 
   Score INT
);

现在,让我们向 student 表中插入四条记录:

INSERT INTO student values 
('Jeevan', 22, 8),
('Raghav', 26, -3),
('Khaleel', 21, -9),
('Deva', 30, 9);

假设我们还有另一个名为 columns and types 的表,创建如下:

Create table Data(
   Name Varchar(35), 
   Age INT, 
   Score INT
);

以下查询将 Student 表的内容插入 Data 表:

INSERT INTO Data TABLE Student;

验证

如果您使用 SELECT 语句验证 Data 表的内容,您可以观察到已插入的数据,如下所示:

SELECT * FROM data;

输出

以上查询将产生以下输出:

姓名 年龄 分数
Jeevan 22 8
Raghav 26 -3
Khaleel 21 -9
Deva 30 9

INSERT ... ON DUPLICATE KEY UPDATE 语句

如果表的列之一具有 UNIQUE 或 PRIMARY KEY 约束,并且如果您使用 **ON DUPLICATE KEY UPDATE** 子句以及 **INSERT** 语句将记录插入该特定表中,如果在具有任一约束的列下传递的值是重复的,则不会添加新记录,而是会更新旧记录。

语法

以下是 INSERT ... ON DUPLICATE KEY UPDATE 语句的语法:

INSERT INTO table_name (column1, column2,....) 
VALUES (value1, value2,....) ON DUPLICATE KEY UPDATE update_statement;

示例

假设我们创建了一个名为 empData 的表,并将 ID 列声明为 UNIQUE,如下所示:

CREATE TABLE empData (
   ID INT UNIQUE, 
   Name VARCHAR(15), 
   email VARCHAR(15), 
   salary INT
);

以下查询使用 update 子句将记录插入上述表:

INSERT INTO empData VALUES (1, 'Raja', '[email protected]', 2215)
ON DUPLICATE KEY UPDATE salary = salary+ salary;

插入操作之后,empData 表的内容将如下所示:

SELECT * FROM empData;

输出

以下是上述 MySQL 查询的结果:

ID 姓名 邮箱 薪资
1 Raja [email protected] 2215

如果您再次执行上述语句,由于 ID 值为 1 的记录已存在,则不会插入新记录,而是在现有薪资的基础上添加语句中的薪资值。

INSERT INTO empData VALUES (1, 'Raja', '[email protected]', 2215)
ON DUPLICATE KEY UPDATE salary = salary+ salary;

插入操作之后,empData 表的内容将如下所示:

SELECT * FROM empData;

输出

上述查询生成以下输出:

ID 姓名 邮箱 薪资
1 Raja [email protected] 4430
广告