SQL Server,Oracle,DB2上約束建立語句對比
上次我們介紹了:SQL Server,Oracle,DB2索引建立語句的對比,本文我們介紹一下SQL Server,Oracle,DB2上約束建立語句的對比,接下來我們就開始介紹。
約束用于強制行數據滿足特定的商業規則(數據類型是強制列的數據滿足規則)
約束有五種類型:
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
SQL SERVER上的NOT NULL約束:
- CREATE TABLE U_emp(
- empno bigint,
- ename VARCHAR(10) NOT NULL,
- job VARCHAR(9),
- mgr bigint,
- hiredate DATE,
- sal decimal(7,2),
- comm decimal(7,2),
- deptno decimal(7,2) NOT NULL);
ORACLE上的NOT NULL約束:
- CREATE TABLE emp(
- empno NUMBER(4),
- ename VARCHAR2(10) NOT NULL,
- job VARCHAR2(9),
- mgr NUMBER(4),
- hiredate DATE,
- sal NUMBER(7,2),
- comm NUMBER(7,2),
- deptno NUMBER(7,2) NOT NULL);
DB2上的NOT NULL約束:
- CREATE TABLE U_emp(
- empno INTEGER,
- ename VARCHAR(10) NOT NULL,
- job VARCHAR(9),
- mgr INTEGER,
- hiredate DATE,
- sal DECIMAL(7,2),
- comm DECIMAL(7,2),
- deptno DECIMAL(7,2) NOT NULL);
SQL SERVER上的UNIQUE約束:
- CREATE TABLE U_dept(
- deptno INTEGER,
- dname VARCHAR(14),
- loc VARCHAR(13),
- CONSTRAINT dept_dname_uk UNIQUE(dname));
ORACLE上的UNIQUE約束:
- CREATE TABLE dept(
- deptno NUMBER(2),
- dname VARCHAR2(14),
- loc VARCHAR2(13),
- CONSTRAINT dept_dname_uk UNIQUE(dname));
DB2上的UNIQUE約束:
- CREATE TABLE U_dept(
- deptno INTEGER,
- dname VARCHAR(14) not null,
- loc VARCHAR(13),
- CONSTRAINT dept_dname_uk UNIQUE(dname));
SQL SERVER上的PK 約束:
- CREATE TABLE P_dept(
- deptno INTEGER,
- dname VARCHAR(14),
- loc VARCHAR(13),
- CONSTRAINT dept_dname_uk1 UNIQUE (dname),
- CONSTRAINT dept_deptno_pk1 PRIMARY KEY(deptno));
ORACLE上的PK約束
- CREATE TABLE dept(
- deptno NUMBER(2),
- dname VARCHAR2(14),
- loc VARCHAR2(13),
- CONSTRAINT dept_dname_uk UNIQUE (dname),
- CONSTRAINT dept_deptno_pk PRIMARY KEY(deptno));
DB2和的PK約束:
- CREATE TABLE P_dept(
- deptno INTEGER not null,
- dname VARCHAR(14) not null,
- loc VARCHAR(13),
- CONSTRAINT dept_dname_uk1 UNIQUE (dname),
- CONSTRAINT dept_deptno_pk1 PRIMARY KEY(deptno));
SQL SERVER上的FK 約束:
- CREATE TABLE F_emp(
- empno INTEGER,
- ename VARCHAR(10) NOT NULL,
- job VARCHAR(9),
- mgr INTEGER,
- hiredate DATE,
- sal DECIMAL(7,2),
- comm DECIMAL(7,2),
- deptno INTEGER NOT NULL,
- CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno)
- REFERENCES p_dept (deptno));
ORACLE上的FK約束:
- CREATE TABLE emp(
- empno NUMBER(4),
- ename VARCHAR2(10) NOT NULL,
- job VARCHAR2(9),
- mgr NUMBER(4),
- hiredate DATE,
- sal NUMBER(7,2),
- comm NUMBER(7,2),
- deptno NUMBER(7,2) NOT NULL,
- CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno)
- REFERENCES dept (deptno));
DB2上的FK約束:
- CREATE TABLE F_emp(
- empno INTEGER,
- ename VARCHAR(10) NOT NULL,
- job VARCHAR(9),
- mgr INTEGER,
- hiredate DATE,
- sal DECIMAL(7,2),
- comm DECIMAL(7,2),
- deptno INTEGER NOT NULL,
- CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno)
- REFERENCES p_dept (deptno));
FK約束的幾個特點:
1.FOREIGN KEY:在表級定義時需要
2.REFERENCES:指定主表及其主鍵列
3.ON DELETE CASCADE:級聯刪除選項
SQL SERVER上的CHECK約束:
- create table test ( deptno bigint constraint emp_deptno_ck check (deptno
- between 10 and 99))
ORACLE上的CHECK約束:
- create table test ( deptno number(2) constraint emp_deptno_ck check (deptno
- between 10 and 99))
DB2 上的CHECK約束:
- create table test ( deptno number(2) constraint emp_deptno_ck check (deptno
- between 10 and 99))
關于SQL Server,Oracle,DB2上約束建立語句的對比就介紹到這里了,希望本次的介紹能夠對您有所收獲!
【編輯推薦】

















