SQL 向表中插入資料 單行 多行

2021-07-28 07:12:46 字數 3592 閱讀 7666

單行插入 語法

insert [into] 表名  [(列名)]  values(值列表)

方括號中的內容在某些情況下可以省略

注意事項:

每次插入一行資料,除了標識列和可以為null的列,其餘列一定要插入資料

插入的每個資料值的資料型別,精度和小數字數必須與相應的列匹配

不能為標識列插入值

如果在設計表的時候就指定了某列不允許為空,則必須插入資料

插入的資料項,可以符合檢查約束的要求()

具有預設值的列,可以使用default(預設)關鍵字來代替插入的數值

--[1]向含有標識列的表中插入資料,要求標識列不允許手動插入資料(乙個表最多只能有乙個標誌列)

use e_market

go insert into commoditysort values('手機數碼','電腦數碼')

--因為這張表中只有三列sortid,sortname1,sortname2,第一列為標識列跳過,values對應後序兩列,故列名可省略

select *from commoditysort

go--[2]向表中所有的列插入資料,要求值的順序必須與列的順序完全一致,列名可省略

insert into userinfo values('kkk','iloveyou','張可',1,'[email protected]','北京海定','010-23132')

select *from userinfo

go--[3]向表中非空列插入資料(表中含有允許為空的列),要求列的個數與值的個數完全一致

insert into commodityinfo(sortid,commodityname,inprice,outprice,amount) --指定要插入的列名

values(1,'索尼z3',3333,4299,100)

select *from commodityinfo

go--[4]向有預設值的表中新增資料,用關鍵字default代替預設值

insert into orderinfo(userid,commodityid,amount,paymoney,payway,ordertime,confirm,sendgoods)

values('yoyo',2,2,3333,default,'2011-11-11',1,1)--payway保持預設值

select *from orderinfo

go

後來對[1]有個

小小的疑惑,如果標識列是在中間,我們又不寫出列名會怎麼樣,試過後是,答案是只要相對順序正確,不會有影響

use demo

if exists(select *from sysobjects where name='rrr')

drop table rrr

create table rrr--建立一張新錶rrr

( id int primary key(id),

year int ,

income int identity(2000,10),--標識列在中間

name nvarchar(20))go

insert into rrr

values (3,2,'adasd')--只插入values,我們想讓它對應id year name

select *from rrr

go

結果values按照對應的id year name插入了,跳過了標識列 income

說明如果列中存在標識列,我們填入的資料型別與其餘非標識列列的型別一致,順序相同,無論標識列在哪個位置,values都可以跳過標識列,對應地填寫上去。

總之:以後如果列名不多,我就乾脆用這種方法,除了標識列,把要插入的列名都一一列出來,要用到預設值就用default代替,清楚明了。

多行插入

需要有一張源表,然後再從源表根據需要把其中的幾列或者全部列提取出來,存到另一張表

法一:

語法--藍色為關鍵字

insert into  表名(表中的列名)

select ***,***,***         --***表示源表中的列名,用英文逗號隔開

from 源表名

--舉例:將資料庫e_market中的表userinfo中的列userid,username,useraddress,phone提取出來

-- 存放在另一張已經建立好的表useraddress中

use e_market

if exists(select *from sysobjects where name='useraddress')

drop table useraddress

gocreate table useraddress

( uid varchar(20) primary key(uid) not null,--對應源表userid

uname varchar(50) not null, --username

uaddress varchar(200), --useraddress

uphone varchar(20) not null --phone

)--現已存在表 useraddress(下面簡稱u表)

--語法

--insert into《表名》(列名)

--select《源表中的列名》

--from《源表名》

--新增到u表中,要求這個u表必須存在

--而且u表中列名的個數,順序,資料型別必須與**表中所要提取的列的個數,順序,型別一致

--u表中的列名可以與**表的列名不同

goselect *from useraddress

--一次性將userinfo中的資料插入到表useraddress中

insert into useraddress(uid,uname,uaddress,uphone)

select userid,username,useraddress,phone

from userinfo

go

法二:在插入的過程中,建立新表來儲存提取出來的資訊,注意,新錶實現不能存在

語法:--藍色為關鍵字

select ***,***,***,***       --***表示源表中的列名

into  ntn                --newtable name表示建立的新錶的表名,事先不能存在

from

stn                --sorcetable name,源表表名

--舉例:將表userinfo中的列userid,username,useraddress,phone提取出來

-- 在插入到新錶中,要求新錶的事先不存在,而是在插入過程中新建

select userid,username,useraddress,phone

into addresslist --在過程中新建的表

from userinfo

兩種方法的區別:

1.當存放資料的表中,沒有設定主鍵pk時,就可以重複執行;當表中設定有主鍵,如上面法一的例子,重複插入就會主鍵重複,所以無法再重複執行。

2.方法2不允許多次執行,因為執行第一次就已經建立了新錶,再執行第二次就是重複創表了,自然不行。

sql向表中插入資料

例項 insert into 捲菸庫存表 捲菸品牌,庫存數量,庫存單價,庫存金額 select 紅塔山新勢力 100,12,1200 union all select 紅塔山人為峰 100,22,null union all select 雲南映像 100,60,500 union all sele...

insert語句如何向表中插入多行資料

關於sql 2000中如何使用insert語句插入多行記錄,可是鬱悶壞了我。下面把在sql吧裡一位高手 summonyyq 假設有個表有 學號 姓名 學校 這三列 然後向這個表中插入 040501 孫明 山東大學 040502 李浩 山東師範 040503 王剛 煙台大學 怎麼插入這三行資料啊 in...

向表中批量插入資料的SQL

建立一張表後,有時為了測試,需要向表中批量插入一些資料。如果純手工插入,相信沒有人會幹。一下sql語句可以完成批量資料插入的功能。建表指令碼如下 create table hello id varchar2 64 name varchar2 64 age varchar2 64 資料插入sql如下 ...