alter table添加表約束


翻閱了一下網上關於alter table添加表約束的資料,學習下,然后供自己以后使用。

僅僅供自己使用。。。

 

 

總結alter table ### add constraint ## 使用方法

添加表約束

 

首先看下alter table的定義(百度百科):

Alter table,網絡程序及編程中所用的術語。通過更改、添加、除去列和約束,或者通過啟用或禁用約束和觸發器來更改表的定義。

 

數據庫SQL語言的修改語句,可以用來修改基本表,其一般表示格式為:

ALTER TABLE<表名>[改變方式]

改變方式:

· 加一個欄位: 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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM