alter table添加表約束

翻閱了一下網上關於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)

相關文章
相關標籤/搜索