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','pujasharma@gmail.com'),
(2, 'Mobile','Vanaja', DATE('2019-03-01'), TIME('10:10:52'), 9000, 
'Chennai',30,'90000123654','Chennai- TNagar','vanajarani@gmail.com');

如果我們想要另一個只包含客戶聯絡詳情的表,則建立一個表,如下所示:

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 pujasharma@gmail.com
2 Vanaja 30 90000123654 金奈 - TNagar vanajarani@gmail.com

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', 'raja@gmail.com', 2215)
ON DUPLICATE KEY UPDATE salary = salary+ salary;

插入操作之後,empData 表的內容將如下所示:

SELECT * FROM empData;

輸出

以下是上述 MySQL 查詢的結果:

ID 姓名 郵箱 薪資
1 Raja raja@gmail.com 2215

如果您再次執行上述語句,由於 ID 值為 1 的記錄已存在,則不會插入新記錄,而是在現有薪資的基礎上新增語句中的薪資值。

INSERT INTO empData VALUES (1, 'Raja', 'raja@gmail.com', 2215)
ON DUPLICATE KEY UPDATE salary = salary+ salary;

插入操作之後,empData 表的內容將如下所示:

SELECT * FROM empData;

輸出

上述查詢生成以下輸出:

ID 姓名 郵箱 薪資
1 Raja raja@gmail.com 4430
廣告
© . All rights reserved.