翻閱了一下網上關於alter table添加表約束的資料,學習下,而後供本身之後使用。數據庫
僅僅供本身使用。。。編程
總結alter table ### add constraint ## 使用方法網絡
添加表約束學習
首先看下alter table的定義(百度百科):spa
Alter table,網絡程序及編程中所用的術語。經過更改、添加、除去列和約束,或者經過啓用或禁用約束和觸發器來更改表的定義。code
數據庫SQL語言的修改語句,能夠用來修改基本表,其通常表示格式爲:ip
ALTER TABLE<表名>[改變方式]ci
改變方式:get
· 加一個欄位: ADD "欄位 1" "欄位 1 資料種類"產品
· 刪去一個欄位: DROP "欄位 1"
· 改變欄位名稱: CHANGE "本來欄位名" "新欄位名" "新欄位名資料種類"
· 改變欄位的資料種類: MODIFY "欄位 1" "新資料種類"
由上能夠看出,修改基本表提供以下四種修改方式:
(1)ADD方式:用於增長新列和完整性約束,列的定義方式同CREARE TABLE語句中的列定義方式相同,其語法格式:
ALTER TABLE <表名> ADD <列定義>|<完整性約束>。因爲使用此方式中增長的新列自動填充NULL值,因此不能爲增長的新列指定NOT NULL約束。
(2)DROP方式:用於刪除指定的完整性約束條件,或刪指定的列,其語法格式爲:
ALTER TABLE<表名> DROP [<完整性約束名>]
ALTER TABLE<表名> DROP COLUMN <列名>
註釋:某些數據庫系統不容許這種在數據庫表中刪除列的方式 (DROP COLUMN <列名>)。
(3)CHANGE方式,用於修改某些列,其語法格式:
ALTER TABLE [表名] CHANGE <原列名> TO <新列名><新列的數據類型>
(4)MODIFY方式,用於修改某些列的數據類型,其語法格式:
ALTER TABLE [表名] MODIFY [列名] [數據類型]
先建立的庫個表 以下 : 下面示例用到表結構
create database Text_DB
go
use Text_DB
go
create table Teacher
(
TeaId int not null ,
TeaName varchar(20) not null,
TeaAge int ,
TeaAddress varchar(50)
)--爲了更直觀的看到效果 這裏就先不添加約束
一.Alter 主要做用針對是給已經建立的表進行添加和修改刪除約束 的操做
1.給已經建立的表添加約束
分爲兩種方式,一種是在建立約束 並同時給所創約束定義一個名字 這樣能夠再次進行操做,好比刪除時候要用到
另外一種方式是直接建立約束 不命名的,可是再次操做時候是不方便的
第一種:
Alter table 表名 add constraint 約束 字 約束類型(列名)
例:
-----添加約束(命名)-----------
alter table Teacher add constraint PK_1 primary key (TeaId)--主鍵約束
alter table Teacher add constraint UN_1 unique(TeaName)--惟一約束
alter table Teacher add constraint CK_1 check (TeaAge>0)--範圍約束
alter table Teacher add constraint DE_1 default '123' for TeaAddress --默認約束
--外鍵約束,這裏就不一一舉例了,語法以下
alter table 表名 add constraint 約束名 foreign key(關聯字段) references 主表(關聯字段)
第二種:
Alter table 表名 add 約束(列名)
例: 分別給 Teacher表中添加 主鍵 惟一 和範圍約束
alter table Teacher add primary key (TeaId)--主鍵
alter table Teacher add unique(TeaName)--惟一
alter table Teacher add check (TeaAge>0)--範圍約束
alter table Teacher add default '123' for TeaAddress --默認約束
alter table 表名 add foreign key(列名) references 主表(列名)--外鍵
2.刪除約束: 語法
alter table 表名 drop constraint 約束名--刪除約束
例:(刪除Teacher表中的約束)
alter table Teacher drop constraint PK_1 --刪除主鍵約束
alter table Teacher drop constraint UN_1 --刪除惟一約束
alter table Teacher drop constraint CK_1 --刪除範圍約束
alter table Teacher drop constraint DE_1 --刪除默認約束
二. Alter table 用法 針對表結構進行修改,好比添加列刪除列等等...
1.添加列 語法
Alter table 表名 ADD 列名 數據類型
例: (給Teacher 表中添加一列 notes 數據類型爲varchar(200))
alter table Teacher add notes varchar(200)
2.刪除表中的列 語法
Alter table 表名 drop column 列名
例:(刪除表中的notes列)
alter table Teacher drop column notes
3.修改某一列中的數據類型語法
Alter table 表名 alter column 列名 數據類型
例:(將Teacher 表中的notes列更改成int類型)
alter table Teacher alter column notes int
ALTER TABLE ADD增長多個字段外鍵約束
/* 建立表 及設置 主鍵 */
CREATE TABLE TABLE_USER
(USER_ID INT IDENTITY(1,1) NOT NULL,
USER_NAME NVARCHAR(40) NOT NULL,
LAST_UPDATED_BY NVARCHAR(15),
LAST_UPDATED_DATE DATETIME,
CONSTRAINT USER_PK PRIMARY KEY (USER_ID)
);
/*ALTER TABLE 增長多個字段 */
ALTER TABLE TABLE_USER ADD
DEPARTMENT_ID INT NOT NULL,COMPANY_ID INT NOT NULL,TEMP_COL NVARCHAR(10);
/*ALTER TABLE 增長多個外鍵 */
ALTER TABLE TABLE_USER ADD
CONSTRAINT USER_DEPARTMENT_FK FOREIGN KEY(DEPARTMENT_ID) REFERENCES TABLE_DEPARTMENT(DEPARTMENT_ID) ,CONSTRAINT USER_COMPANY_FK FOREIGN KEY(COMPANY_ID) REFERENCES TABLE_COMPANY(COMPANY_ID) ;
/*ALTER TABLE 刪除字段 */
ALTER TABLE TABLE_USER DROP COLUMN TEMP_COL;
--刪除約束 --先查出約束名 EXEC sys.sp_helpconstraint @objname = N'bulkinserttest' --表名 ALTER TABLE dbo.bulkinserttest DROP CONSTRAINT ck_bulkinsert
例子:
向表中增長一個 varchar 列:
ALTER TABLE distributors ADD address varchar(30);
從表中刪除一個字段:
ALTER TABLE distributors DROP COLUMN address RESTRICT;
在一個操做中修改兩個現有字段的類型:
ALTER TABLE distributors
ALTER COLUMN address TYPE varchar(80),
ALTER COLUMN name TYPE varchar(100);
使用一個 USING 子句, 把一個包含 UNIX 時間戳的 integer 字段轉化成 timestamp with time zone:
ALTER TABLE foo
ALTER COLUMN foo_timestamp TYPE timestamp with time zone
USING
timestamp with time zone 'epoch' + foo_timestamp * interval '1 second';
對現存字段更名:
ALTER TABLE distributors RENAME COLUMN address TO city;
更改現存表的名字:
ALTER TABLE distributors RENAME TO suppliers;
給一個字段增長一個非空約束:
ALTER TABLE distributors ALTER COLUMN street SET NOT NULL;
從一個字段裏刪除一個非空約束:
ALTER TABLE distributors ALTER COLUMN street DROP NOT NULL;
給一個表增長一個檢查約束:
ALTER TABLE distributors ADD CONSTRAINT zipchk CHECK (char_length(zipcode) = 5);
刪除一個表和它的全部子表的檢查約束:
ALTER TABLE distributors DROP CONSTRAINT zipchk;
向表中增長一個外鍵約束:
ALTER TABLE distributors ADD CONSTRAINT distfk FOREIGN KEY (address) REFERENCES addresses(address) MATCH FULL;
給表增長一個(多字段)惟一約束:
ALTER TABLE distributors ADD CONSTRAINT dist_id_zipcode_key UNIQUE (dist_id, zipcode);
給一個表增長一個自動命名的主鍵約束,要注意的是一個表只能有一個主鍵:
ALTER TABLE distributors ADD PRIMARY KEY (dist_id);
把表移動到另一個表空間:
ALTER TABLE distributors SET TABLESPACE fasttablespace;
1. 主鍵約束
要對一個列加主鍵約束的話,這列就必需要知足的條件就是非空。由於主鍵約束:就是對一個列進行了約束,約束爲(非空、不重複)。
【格式】alter table 表格名稱 add constraint 約束名稱 增長的約束類型 (列名)
例子:要對一個列加主鍵,列名爲id,表名爲emp
alter table emp add constraint ppp primary key (id)
2. check約束
就是給一列的數據進行了限制
【格式】alter table 表名稱 add constraint 約束名稱 增長的約束類型 (列名)
例子:年齡列的數據都要大於20,表名(emp) 列名(age)
alter table emp add constraint xxx check(age>20)
某一列(sex)取值只能爲「男」和「女」的約束表達式:
ALTER TABLE 表的名稱 ADD CONSTRAINT 約束的名稱 CHECK (sex in ('男','女'))
3. unique約束
這樣的約束就是給列的數據追加的不重複的約束類型
【格式】alter table 表名 add constraint 約束名稱 約束類型(列名)
例子:給ename列加個unique,讓ename列的數據不重複
alter table emp add constraint qwe unique(ename)
4. 默認約束
意思很簡單,就是讓此列的數據默認爲必定的數據
【格式】alter table 表名稱 add constraint 約束名稱 約束類型 默認值 for 列名
例子:emp表中的gongzi列默認爲10000
alter table emp add constraint jfsd default 10000 for gongzi
5. 外鍵約束
這個有點難理解了,外鍵其實就是引用。
由於主鍵實現了實體的完整性,外鍵實現了引用的完整性,應用完整性規定,所引用的數據必須存在!其實就是個引用。
【格式】alter table 表名 add constraint 約束名稱 約束類型 (列名) references 被引用的表名稱 (列名)
例子:
一個表名稱叫dept 裏面有2列數據 一列是ID一列是ENAME
id:表示產品的編號
ename:表示產品的名稱
另一個表格名稱是emp 裏面有2列數據,一列是ID 一列是DID
id:表示用戶號
did:表示購買的產品號
要讓emp表中的did列去引用dept表中的id
能夠用下面的方法
alter table emp add constraint jfkdsj foreign key (did) references dept (id)