資料庫基本操作—表
一、建立表
(先簡單說一下什麼是表,表是一種結構化的檔案,可以用來儲存特定型別的資料。另外,在一個數據庫中,表的名稱是唯一的,不能重複。)
1、表約束
①主鍵約束 (primary key):主鍵可以由一個欄位或多個欄位構成,但是設定為主鍵的欄位在表中通常是唯一的值,並且不能隨便修改也不能為空。
②唯一約束(unique) :該列的值是惟一的,且可以為空
③檢查約束 (check): 規定該列的取值範圍,格式限制等,比如年齡的取值範圍,郵件的格式等等
④預設約束(default): 設定該列的預設值
⑤外來鍵約束(foreign key) :用於兩個表之間建立關係,需要規定引用主表的那列,定義外來鍵的那張表稱之為子表,另一張表稱之為主表,在表的建立過程中,應該先建立主表,後建立子表。
2、建立表
說完了表約束,萬事俱備,只欠一張表了。
語法格式:
create table 表名( 列名稱 型別 約束, 列名稱 型別 約束, ......... )
例如我們建一張學生表,再加上約束:
create table Student( studentid int primary key,--主鍵 name varchar(20) not null,--不能為空 age int check(age between 1 and 120),--檢查約束(年齡在1-120之間) gender varchar(2) check(gender='男' or gender='女'), --檢查約束 address varchar(50) default 青島市,--預設約束 idcard char(18) unique,--唯一約束 classid int foreign key references Class(classid)--外來鍵約束 )
上面這種方式是在建立表時直接給欄位新增約束,當然還可以在表建立好了之後再新增約束:
主鍵: alter table 表名 add constraint PK_欄位名 primary key (欄位名) 唯一: alter table 表名 add constraint UQ_欄位名 unique (欄位名) 檢查: alter table 表名 add constraint CK_欄位名 check (條件表示式) 預設: alter table 表名 add constraint DF_欄位名 default '預設值' for 欄位名 外來鍵: alter table 表名 add constraint FK_欄位名 foreign key(欄位名) references 關聯的表名(關聯的欄位名)
已上就是建立表的一些操作,既然能建立這些約束,那也肯定可以刪除
alter table 表名 drop constraint 約束名(約束名就是在前面建立的,如 “PK_欄位”)
注:如果約束是在建立表時建立的,則不能用這種命令刪除,只能在企業管理器裡面刪除
3、新增、修改欄位
新增欄位:
Alter table [表名] add [列名] 型別
修改欄位型別:
Alter table [表名] alter column [列名] 型別
二、臨時表和表變數
1、先說說如何宣告和插入資料
表變數:
宣告: DECLARE @tb_table TABLE( ........ ........ ) 插入: insert into @tb_table select name from Student
臨時表:
宣告: create table #tb_table (( ........ ........ ) 插入: insert into #tb_table select name from Student
2、區別
平時用的最多的地方就是在儲存過程裡,簡單說一下他倆的區別。臨時表是利用了硬碟(tempdb資料庫) ,表變數是佔用記憶體,因此小資料量當然是記憶體中的表變數更快。當大資料量時,就不能用表變量了,太耗記憶體了。大資料量時適合用臨時表。表變數在執行完批處理語句後就會自動清理,而臨時表需要手動刪除。
三、多表連線查詢
前面既然提到了外來鍵約束,那我們就來說說如何查詢多張存在關聯的表
1、內連線(inner join)
先直接上sql語句吧:
select a.name,a.age,b.classname from Student a inner join Class b on a.classid=b.classid where studentid=0001
這是關聯學生和班級表,查詢出學號為0001的學生的姓名、年齡、班級。這兩張表是通過classid這個欄位關聯的,所以用a和b來區分這兩張表(a,b相當於一個代號),在select後查詢的欄位最好是加上這個代號,因為如果查詢的欄位在兩張表中都存在時,它無法區分你查的是哪張表裡的,所以會報錯。
2.外連結
它所連線的兩張表是主表與次表的關係,主表的資料,必須全部顯示,次表的資料,只在與主表中的資料有關聯的才能顯示。
①左外連結:左邊的表是主表,必須全部顯示,右邊的表是次表,關聯上才可以顯示。
select a.name,a.age,b.classname from Student a left outer join Class b on a.classid=b.classid where studentid=0001
①右外連結:右邊的表是主表,必須全部顯示,左邊的表是次表,關聯上才可以顯示。
select a.name,a.age,b.classname from Student a right outer join Class b on a.classid=b.classid where studentid=0001
③完全外連結:兩張表都是主表,不管是否關聯上,都要顯示
select a.name,a.age,b.classname from Student a full outer join Class b on a.classid=b.classid where studentid=0001
尾聲
我是一個18年應屆生,最近和朋友們維護了一個公眾號,內容是我們在從應屆生過渡到開發這一路所踩過的坑,以及我們一步步學習的記錄,這裡有前端、安卓、Java、C#,如果感興趣的朋友可以關注一下,一同加油~

個人公眾號:鹹魚正翻身