4-1.數據的插入(INSERT語句的使用方法)


 

 

 

什么是INSERT

INSERT(插入)的流程

INSERT語句的基本語法

INSERT 語句的基本語法如下所示。

例如,我們要向 ProductIns 表中插入一行數據,各列的值如下所示。

向表中插入一行數據如下

由於 product_id 列(商品編號)和 product_name 列(商品 名稱)是字符型,所以插入的數據需要像 '0001' 這樣用單引號括起來。 日期型的 regist_date(登記日期)列也是如此。

將列名和值用逗號隔開,分別括在()內,這種形式稱為清單。上面代碼清單中的 INSERT 語句包含如下兩個清單。

A 列清單→ (product_id, product_name, product_type, sale_price, purchase_price, regist_date)

B 值清單→ ('0001', 'T恤衫', '衣服', 1000, 500,'2009-09-20')

當然,表名后面的列清單和 VALUES 子句中的值清單的列數必須保 持一致。如下所示,列數不一致時會出錯,無法插入數據。

此外,原則上,執行一次 INSERT 語句會插入一行數據 C。因此, 插入多行時,通常需要循環執行相應次數的 INSERT 語句。

但它也僅僅是原則而已,其實很多 RDBMS 都支持一 次插入多行數據,這樣的功能稱為多行 INSERT(multi row INSERT)。

該語法很容易理解,並且減少了書寫語句的數量,非常方便。但是要確定INSERT 語句的書寫內容及插入的數據是否正確。若不正確會發生 INSERT 錯誤,但是由於是多行插入,和特定的單一行插入相比,想要找出到底是 哪行哪個地方出錯了,就變得十分困難。

 

列清單的省略

 對表進行全列 INSERT 時,可以省略表名后的列清單。這時 VALUES 子句的值會默認按照從左到右的順序賦給每一列。因此,下列代碼清單中的兩個 INSERT 語句會插入同樣的數據。

 

插入NULL

INSERT 語句中想給某一列賦予 NULL 值時,可以直接在 VALUES 子句的值清單中寫入 NULL。例如,要向 purchase_price 列(進貨 單價)中插入 NULL,就可以使用下列代碼清單中的 INSERT 語句。

 

但是,想要插入 NULL 的列一定不能設置 NOT NULL 約束。向設置 了 NOT NULL 約束的列中插入 NULL 時,INSERT 語句會出錯,導致 數據插入失敗。

插入失敗指的是希望通過 INSERT 語句插入的數據無法正常插入到表中,但之前已經插入的數據並不會被破壞。

 

插入默認值

我們還可以向表中插入默認值(初始值)。可以通過在創建表的 CREATE TABLE 語句中設置 DEFAULT 約束來設定默認值。

開頭創建的 ProductIns 表的定義部分。 其中 DEFAULT 0 就是設置 DEFAULT 約束的部分。像這樣,我們可以 通過“DEFAULT < 默認值 >”的形式來設定默認值。

通過顯式方法設定默認值

這樣一來,RDBMS 就會在插入記錄時自動把默認值賦給對應的列。

省略INSERT語句中的列名,就會自動設定為該列的默認值(沒有默認值時會設定 為NULL)。

 

從其他表中復制數據

要插入數據,除了使用 VALUES 子句指定具體的數據之外,還可以 從其他表中復制數據。

INSERT ... SELECT語句

接下來我們嘗試一下使用包含 GROUP BY 子句的 SELECT 語句進 行插入。

創建ProductType表的CREATE TABLE語句

該表是用來存儲根據商品種類(product_type)計算出的銷售單 價合計值以及進貨單價合計值的表。下面就讓我們使用代碼清單 4-12 中 的 INSERT … SELECT 語句,從 Product 表中選取出數據插入到這張 表中吧。

插入其他表中數據合計值的INSERT ... SELECT語句

 通過 SELECT 語句對插入結果進行確認,我們發現 ProductType 表 中插入了以下 3 行數據。

 

INSERT語句的SELECT語句中,可以使用WHERE子句或者GROUP BY子句等任 何 SQL語法(但使用ORDER BY子句並不會產生任何效果)。

 

 

 

表的復制
語法:
create table 表名 as select語句;
將查詢結果當做表創建出來。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM