欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
SQL中的CONSTRAINT(約束)用法總結

主要就是增加數據約束的。

Oracle中的約束簡(jiǎn)單介紹

約束   Including Constraints

    在數據庫中使用約束(constraints)是為了在該數據庫中實(shí)施所謂的'業(yè)務(wù)規則'其實(shí)就是防止非法信息進(jìn)入數據庫,滿(mǎn)足管理員和應用開(kāi)發(fā)人員所定義的規則集.

    ORACLE使用完整性約束(integrity constraints)防止不合法的數據寫(xiě)入數據庫,管理員和開(kāi)發(fā)人員可以定義完整性規則,增強商業(yè)規則,限制數據表中的數據.如果一個(gè)DML語(yǔ)句執行的任何結果破壞了完整性約束,ORACLE就會(huì )回滾語(yǔ)句,返回錯誤信息.

    約束是通過(guò)使用CREATE TABLE或ALTER TABLE語(yǔ)句生成的.(建立表時(shí)或者表建立后修改都可)如果相關(guān)的約束定義在單列上,可以在列這一級指定約束的定義;多列約束必須定義在數據表級,相關(guān)的列要在括號中指定,用逗號分隔.如果沒(méi)有為約束提供一個(gè)名字,那么ORACLE會(huì )分配一個(gè)系統生成的唯一名字,以SYS_開(kāi)頭,你可以使用關(guān)鍵字CONSTRAINTS后面跟隨相關(guān)的約束名字來(lái)為約束指定名字.

ORACLE支持五種類(lèi)型的完整性約束
NOT NULL (非空)--防止NULL值進(jìn)入指定的列,在單列基礎上定義,默認情況下,ORACLE允許在任何列中有NULL值.
CHECK (檢查)--檢查在約束中指定的條件是否得到了滿(mǎn)足.
UNIQUE (唯一)--保證在指定的列中沒(méi)有重復值.在該表中每一個(gè)值或者每一組值都將是唯一的.
PRIMARY KEY (主鍵)--用來(lái)唯一的標識出表的每一行,并且防止出現NULL值,一個(gè)表只能有一個(gè)主鍵約束.
POREIGN KEY (外部鍵)--通過(guò)使用公共列在表之間建立一種父子(parent-child)關(guān)系,在表上定義的外部鍵可以指向主鍵或者其他表的唯一鍵.
以下幾種約束 、并 一一列舉:

1.主鍵約束:
要對一個(gè)列加主鍵約束的話(huà),這列就必須要滿(mǎn)足的條件就是分空
因為主鍵約束:就是對一個(gè)列進(jìn)行了約束,約束為(非空、不重復)
以下是代碼  要對一個(gè)列加主鍵,列名為id,表名為emp

格式為:
alter table 表格名稱(chēng) add constraint 約束名稱(chēng) 增加的約束類(lèi)型 (列名)

例子:
alter table emp add constraint ppp primary key (id)

————————————————————————————————

2.check約束:
就是給一列的數據進(jìn)行了限制
比方說(shuō),年齡列的數據都要大于20的
表名(emp) 列名(age)

格式:
alter table 表名稱(chēng) add constraint 約束名稱(chēng) 增加的約束類(lèi)型 (列名)

例子:
alter table emp add constraint xxx check(age>20)

______________________________________________________________________

3.unique約束:
這樣的約束就是給列的數據追加的不重復的約束類(lèi)型

格式:
alter table 表名 add constraint 約束名稱(chēng) 約束類(lèi)型(列名)
比方說(shuō)可以給ename列加個(gè)unique,讓ename列的數據不重復
例子:
alter table emp add constraint qwe unique(ename)

————————————————————————————————

4.默認約束:
意思很簡(jiǎn)單就是讓此列的數據默認為一定的數據

格式:
alter table 表名稱(chēng) add constraint 約束名稱(chēng) 約束類(lèi)型 默認值) for 列名

比方說(shuō):emp表中的gongzi列默認為10000

alter table emp add constraint jfsd default 10000 for gongzi

————————————————————————————————

5.外鍵約束:
這個(gè)有點(diǎn)難理解了,外鍵其實(shí)就是引用
因為主鍵實(shí)現了實(shí)體的完整性,
外鍵實(shí)現了引用的完整性,
應用完整性規定,所引用的數據必須存在!

其實(shí)就是個(gè)引用,
比方說(shuō)一個(gè)表名稱(chēng)叫dept 里面有2列數據 一列是ID一列是ENAME
id:表示產(chǎn)品的編號
ename:表示產(chǎn)品的名稱(chēng)

另外一個(gè)表格名稱(chēng)是emp 里面有2列數據,一列是ID 一列是DID
id:表示用戶(hù)號
did:表示購買(mǎi)的產(chǎn)品號

要讓emp表中的did列去引用dept表中的id

可以用下面的方法

格式:
alter table 表名 add constraint 約束名稱(chēng) 約束類(lèi)型 (列名) references 被引用的表名稱(chēng) (列名)

例子:

alter table emp add constraint jfkdsj foreign key (did) references dept (id)

約束定義存儲在數據字典中,查詢(xún)USER_CONSTRAINTS可以獲得相關(guān)信息.
定義約束
CREATE TABLE [schema.]table
                  (column datatype [DEFAULT expr]
                  [column_constraint],
                      ...
                  [table_constraint][,...]);
e.g.
CREATE TABLE employees
                  (employee_id NUMBER(6),
                      first_name     VARCHAR2(20),
                      ...
                      job_id           VARCHAR2(10) NOT NULL,
                      CONSTRAINTS emp_emp_id_pk PRIMARY KEY (EMPLOYEE_ID));
列級的約束定義
column [CONSTRAINT constraint_name] constraint_type,
表級約束的定義
column,..
[CONSTRAINT constraint_name] constraint_type (column,...)

NOT NULL約束
只能定義在列級,不能定義在表級.
e.g.
CREATE TABLE employees
                  (employee_id NUMBER(6),
                      last_name     VARCHAR2(25) NOT NULL, //沒(méi)有指定名字,將用系統SYS_命名
                      salary          NUMBER(8,2),
                      commission_pct NUMBER(2,2),
                      hire_date    DATE CONSTRAINT emp_hire_date_nn NOT NULL);   //用戶(hù)定義了名字

UNIQUE約束
用來(lái)保護一個(gè)表中的一個(gè)或者多個(gè)列沒(méi)有任何兩行在收到保護的列中具有重復的數據.ORACLE在唯一鍵列上自動(dòng)生成一個(gè)唯一索引以實(shí)現唯一性
e.g.
CREATE TABLE employees
                  (employee_id NUMBER(6),
                      last_name     VARCHAR2(25) NOT NULL, 
                      salary          NUMBER(8,2),
                      commission_pct NUMBER(2,2),
                      hire_date DATE NOT NULL,
                      CONSTRAINT emp_email_uk UNIQUE(email));

PRIMARY KEY約束
唯一鍵的所有特征都適用于主鍵約束,只是在主鍵列中不允許有NULL值.一個(gè)表只能有一個(gè)主鍵.
e.g.
CREATE TABLE departments
                  (department_id NUMBER(4),
                      department_name VARCHAR2(30) CONSTRAINT dept_name_nn NOT NULL,
                      manager_id       NUMBER(6),
                      location_id           NUMBER(4),
                      CONSTRAINT dept_id_pk PRIMARY KEY(department_id));

FOREIGN KEY 約束
用來(lái)保護一個(gè)表中的一個(gè)或者多個(gè)列,它會(huì )通過(guò)一個(gè)主鍵主鍵或者唯一鍵保證對于每個(gè)非NULL值在數據庫的其他地方都有一個(gè)數據可用.這個(gè)外部鍵就是在生成此約束的表(子表)中的一個(gè)或多個(gè)列,在父級表和子表中,相關(guān)列的數據類(lèi)型必須匹配.外部鍵列和引用鍵(reference key)列可以位于相同的表中(自引用完整性約束).
e.g.
CREATE TABLE employees
                  (employee_id NUMBER(6),
                      last_name     VARCHAR2(25) NOT NULL, 
                      salary          NUMBER(8,2),
                      commission_pct NUMBER(2,2),
                      hire_date DATE NOT NULL,
                      deparment_id NUMBER(4),
                      CONSTRAINT emp_dept_fk FOREIGN KEY(department_id) REFERENCES departments(department_id),
                      CONSTRAINT emp_email_uk UNIQUE(email));

上例中是在表級定義外部鍵約束,如果在列級定義,不同的是:
CREATE TABLE employees
                  (...,
                      department_id NUMBER(4) CONSTRAINT emp_deptid_fk REFERENCES departments(department_id),
                  ...);
                   //沒(méi)有關(guān)鍵字FOREIGN KEY
FOREIGN KEY約束還有兩個(gè)關(guān)鍵字是
ON DELETE CASCADE --當刪除所引用的父表記錄時(shí),刪除子表中相關(guān)的記錄
ON DELETE SET NULL--與上面不同的是刪除時(shí),轉換子表中相關(guān)記錄為NULL值
默認情況下,如果沒(méi)有指定以上兩個(gè)中任一,則父表中被引用的記錄將不能被刪除.

CHECK 約束
[CONSTRAINT <constraint name>] CHECK (<condition>
這里CHECK子句中的CONDITION應該求值為一個(gè)布爾值結果,并且可以引用相同行中其他列的值;不能包含子查詢(xún),序列,環(huán)境函數(SYSDATE,UID,USER,USERENV)和偽列(ROWNUM,LEVEL,CURRVAL,NEXTVAL),一個(gè)列上可以定義多個(gè)CHECK約束,如果所定義的條件為FALSE,則語(yǔ)句將回滾.
CREATE TABLE employees
                  (...,
                      salary NUMBER(8,2) CONSTRAINT emp_salary_min CHECK (salary>0),
                      ...);

添加約束
ALTER TABLE employees
ADD CONSTRAINT emp_manager_fk FOREIGN KEY(manager_id) REFERENCES employees(employee_id);
刪除約束
ALTER TABLE employees
DROP CONSTRAINT emp_manager_fk;
ALTER TABLE departments
DROP PRIMARY KEY CASCADE; //由于departments被employees.department_id引用了
對于NOT NULL約束,用ALTER TABLE MODIFY子句來(lái)刪除
ALTER TABLE employees MODIFY last_name NULL;
關(guān)閉約束
ALTER TABLE employees
DISABLE CONSTRAINT emp_emp_id_pk CASCADE;   //如果沒(méi)有被引用則不需CASCADE關(guān)鍵字
當你生成一個(gè)約束時(shí),約束自動(dòng)打開(kāi)(除非你指定了DISABLE子句0,當用DISABLE關(guān)閉UNIQUE或者PRIMARY KEY約束時(shí),ORACLE會(huì )自動(dòng)刪除相關(guān)的唯一索引,再次打開(kāi)時(shí),ORACLE又會(huì )自動(dòng)建立的.
打開(kāi)約束
ALTER TABLE employees
ENABLE CONSTRAINT emp_emp_id_pk; //注意,打開(kāi)一個(gè)先前關(guān)閉的被引用的主鍵約束,并不能自動(dòng)打開(kāi)相關(guān)的外部鍵約束

可以從USER_CONSTRAINTS表和USER_CONS_COLUMNS視圖中查詢(xún)約束的信息
SELECT constraint_name,constraint_type,search_condition
FROM user_constraints
WHERE   table_name='EMPLOYEES';

約束類(lèi)型
C--CHECK和NOT NULL都算為C TYPE
P--PRIMARY KEY
R--REFERENTIAL INTEGRITY就是外部鍵約束
U--UNIQUE

SELECT constraint_name,column_name
FROM user_cons_columns

WHERE   table_name='EMPLOYEES';

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
關(guān)系模型的三類(lèi)完整性約束
數據庫SQL---數據庫、基本表、視圖、索引的定義、修改、刪除
Oracle中的約束
Oracle約束(Constraint)詳解
Oracle 常見(jiàn)的五種約束
創(chuàng )建和使用約束
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久