(先簡單說一下什麼是表,表是一種結構化的文件,能夠用來存儲特定類型的數據。另外,在一個數據庫中,表的名稱是惟一的,不能重複。)前端
①主鍵約束 (primary key):主鍵能夠由一個字段或多個字段構成,可是設置爲主鍵的字段在表中一般是惟一的值,而且不能隨便修改也不能爲空。 ②惟一約束(unique) :該列的值是唯一的,且能夠爲空 ③檢查約束 (check): 規定該列的取值範圍,格式限制等,好比年齡的取值範圍,郵件的格式等等 ④默認約束(default): 設置該列的默認值 ⑤外鍵約束(foreign key) :用於兩個表之間創建關係,須要規定引用主表的那列,定義外鍵的那張表稱之爲子表,另外一張表稱之爲主表,在表的建立過程當中,應該先建立主表,後建立子表。sql
說完了表約束,萬事俱備,只欠一張表了。 語法格式:數據庫
create table 表名(
列名稱 類型 約束,
列名稱 類型 約束,
.........
)
複製代碼
例如咱們建一張學生表,再加上約束:bash
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_字段」)
注:若是約束是在建立表時建立的,則不能用這種命令刪除,只能在企業管理器裏面刪除大數據
添加字段: Alter table [表名] add [列名] 類型
修改字段類型: Alter table [表名] alter column [列名] 類型
##2、臨時表和表變量 ####一、先說說如何聲明和插入數據 表變量:ui
聲明:
DECLARE @tb_table TABLE(
........
........
)
插入:
insert into @tb_table
select name from Student
複製代碼
臨時表:spa
聲明:
create table #tb_table ((
........
........
)
插入:
insert into #tb_table
select name from Student
複製代碼
平時用的最多的地方就是在存儲過程裏,簡單說一下他倆的區別。臨時表是利用了硬盤(tempdb數據庫) ,表變量是佔用內存,所以小數據量固然是內存中的表變量更快。當大數據量時,就不能用表變量了,太耗內存了。大數據量時適合用臨時表。表變量在執行完批處理語句後就會自動清理,而臨時表須要手動刪除。code
前面既然提到了外鍵約束,那咱們就來講說如何查詢多張存在關聯的表cdn
先直接上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後查詢的字段最好是加上這個代號,由於若是查詢的字段在兩張表中都存在時,它沒法區分你查的是哪張表裏的,因此會報錯。
它所鏈接的兩張表是主表與次表的關係,主表的數據,必須所有顯示,次表的數據,只在與主表中的數據有關聯的才能顯示。 ①左外連接:左邊的表是主表,必須所有顯示,右邊的表是次表,關聯上才能夠顯示。
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#,若是感興趣的朋友能夠關注一下,一同加油~