1. 程式人生 > 實用技巧 >MySQL基礎之MySQL必知必會(十九)插入資料

MySQL基礎之MySQL必知必會(十九)插入資料

資料插入

INSERT是用來插入(或新增)行到資料庫表的。插入可以用幾種方式使用:

  • 插入完整的行
  • 插入行的一部分
  • 插入多行
  • 插入某些查詢的結果

插入完整的行

把資料插入表中的最簡單的方法是使用基本的INSERT語法, 它要求指定表名和被插入到新行中的值。

MariaDB [crashcourse]> INSERT INTO Customers 
    -> VALUES(NULL,
    -> 'Pep E. LaPew',
    -> '100 Main Street',
    -> 'Los Angeles',
    -> 'CA',
    
-> '90046', -> 'USA', -> NULL, -> NULL);

如果你不想給出一個值, 又不能省略此列的時候, 可以指定該列為NULL值

雖然這種方法很簡單, 但並不安全, 應該避免使用。上面的SQL語句高度依賴於表中列的定義次序, 並且還依賴於其次序容易獲得的資訊。

INSERT INTO Customers(cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email)  VALUES('Pep E. LaPew', '
100 Main Street', 'Los Angeles', 'CA', '90046', 'USA', NULL, NULL);

使用這種語法, 還可以省略列。這表示可以只給某些列提供值。給其他列不提供值。

INSERT INTO操作可能很耗時(特別是有很多索引需要更新的時候), 而且它可能降低等待處理的SELECT語句的效能。

如果資料檢索是最重要的, 可以通過在INSERT INTO之間新增關鍵字LOW_PRIORITY, 指示MySQL降低INSERT語句的優先順序, 如下所示

INSERT LOW_PRIOPITY INTO

插入多行

如果想要插入多行, 那麼可以使用多條INSERT語句, 甚至一次提交它們, 每條語句用一個分號結束

INSERT INTO Customers(cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email)  VALUES('Pep E. LaPew', '100 Main Street', 'Los Angeles', 'CA', '90046', 'USA', NULL, NULL);INSERT INTO Customers(cust_address, cust_city, cust_state, cust_zip, cust_country) VALUES('M. Martian', '42 Galaxy way', 'New York', 'NY', '11213', 'USA');

或者, 只要每天INSERT語句中的列名(和次序)相同, 可以如下組合個語句

INSERT INTO Customers(cust_address, cust_city, cust_state, cust_zip, cust_country)  VALUES('Pep E. LaPew', '100 Main Street', 'Los Angeles', 'CA', '90046', 'USA'),
'M. Martian', '42 Galaxy way', 'New York', 'NY', '11213', 'USA'

此技術可以提高資料庫處理的效能, 因為MySQL用單條INSERT語句處理多個插入比使用多條INSERT語句快

插入檢索出的資料

INSERT可以將一條SELECT語句的結果插入表中。這就是所謂的INSERT SELECT。

INSERT INTO customers(cust_id, cust_contact, cust_email, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country)SELECT cust_id, cust_contact, cust_email, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country FROM custnew;

INSERT SELECT語句中SELECT語句可包含WHERE子句以過濾插入的資料