SQL INSERT 插入資料

2021-07-11 11:49:21 字數 3839 閱讀 6335

insert 用來將行插入(或新增)到資料庫表。

插入有幾種方式:

插入完整的行;

插入行的一部分;

插入某些查詢的結果。

使用insert語句可能需要客戶端/伺服器dbms中的特定安全許可權。在試圖使用insert前,應該保證自己有足夠的安全許可權。

1. 插入完整的行

insert

into customers

values('1000000006',

'toy land',

'123 any street',

'new york',

'ny',

'11111',

'usa',

null,

null);

各列必須以它們在表中出現的次序填充。

into關鍵字:在某些sql實現中,跟在insert之後的into關鍵字是可選的。

編寫insert語句的更安全(不過更煩瑣)的方法如下:

insert

into customers(cust_id,

cust_name,

cust_address,

cust_city,

cust_state,

cust_zip,

cust_country,

cust_contact,

cust_email)

values('1000000006',

'toy land',

'123 any street',

'new york',

'ny',

'11111',

'usa',

null,

null);

注意:因為提供了列名,values必須以其指定的次序匹配指定的列名,不一定按各列出現在表中的實際次序。其優點是,即使表的結構改變,這條insert語句仍然能正確工作。

insert

into customers(cust_id,

cust_contact,

cust_email,

cust_name,

cust_address,

cust_city,

cust_state,

cust_zip)

values('1000000006',

null,

null,

'toy land',

'123 any street',

'new york',

'ny',

'11111');

總是使用列的列表

一般不要使用沒有明確給出列的insert語句。給出列能使sql**繼續發揮作用,即使表結構發生了變化。

2. 插入部分行

使用insert的推薦方法是明確給出表的列名。使用這種語法,還可以省略列,這表示可以只給某些列提供值,給其他列不提供值。

insert

into customers(cust_id,

cust_name,

cust_address,

cust_city,

cust_state,

cust_zip,

cust_country)

values('1000000006',

'toy land',

'123 any street',

'new york',

'ny',

'11111',

'usa');

省略列

如果表的定義允許,則可以在insert操作中省略某些列。省略的列必須滿足以下某個條件:

該列定義為允許null值(無值或空值)。

在表定義中給出預設值。這表示如果不給出值,將使用預設值。

如果對錶中不允許null值且沒有預設值的列不給出值,dbms將產生錯誤訊息,並且相應的行插入不成功。

不管使用哪種insert語法,values的數目都必須正確。如果不提供列名,則必須給每個表列提供乙個值;如果提供列名,則必須給列出的每個列乙個值。否則,就會產生一條錯誤訊息,相應的行不能成功插入。

3. 插入檢索出的資料

利用insert將select語句的結果插入表中,這就是所謂的insert select。顧名思義,它是由一條insert語句和一條select語句組成。

-- 把另一表中的顧客列合併到customers表中。不需要每次讀取一行再將它用insert插入

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;

如果custnew表為空,則沒有行被插入(也不產生錯誤,因為操作仍然是合法的)。如果這個表確實有資料,則所有資料將被插入到customers。

insert select中的列名

dbms一點兒也不關心select返回的列名。它使用的是列的位置,因此select中的第一列(不管其列名)將用來填充表列中指定的第一列,第二列將用來填充表列中指定的第二列,如此等等。

插入多行

insert通常只插入一行。要插入多行,必須執行多個insert語句。insert select是個例外,它可以用一條insert插入多行,不管select語句返回多少行,都將被insert插入。

4. 從乙個表複製到另乙個表

select into語句:將乙個表的內容複製到乙個全新的表(執行中建立的表)。

db2不支援這裡描述的select into。

insert select 與 select into

它們之間的乙個重要差別是前者匯出資料,而後者匯入資料。

-- 建立乙個名為custcopy的新錶,並把customers表的整個內容複製到新錶中

select * into custcoty from customers;

-- mariadb、mysql、oracle、postgresql和sqlite所使用的語法

create

table custcopy as

select * from customers;

select使用*萬用字元:匯入所有資料。

select使用列名:匯入部分的列。

使用select into複製表,可在複製的資料上測試sql**,而不會影響實際的資料。

注意:

1. 資料庫字串使用單引號。

2. 資料庫大小寫不敏感。

3. cuid演算法是一種可以產生唯一標識的高效演算法,它使用網絡卡mac,位址,奈米級時間、晶元id等算出來的:select newid();

excel資料生成sql insert語句

excel 中有a b c三列資料,希望匯入到資料庫users表中,對應的字段分別是name,age 在你的excel 中增加一列,利用excel的公式自動生成sql語句,方法如下 1 增加一列 d列 2 在第一行的d列,就是d1中輸入公式 concatenate insert into users...

excel資料生成sql insert語句

excel資料生成sql insert語句 excel 中有a b c三列資料,希望匯入到資料庫users表中,對應的字段分別是name,age 在你的excel 中增加一列,利用excel的公式自動生成sql語句,方法如下 1 增加一列 d列 2 在第一行的d列,就是d1中輸入公式 concate...

根據資料庫生成 sql insert 資料

create procedure dbo.uspoutputdata tablename sysname as declare column varchar 1000 declare columndata varchar 1000 declare sql varchar 4000 declare x...