TABLE 以及 CONSTRAINT
Oracle数据库通过约束(constraints)防止无效的数据进入到表中,以保护数据的实体完整性。
为了便于约束的使用,往往需要为约束起一个有意义的名字(例如student_id_pk表示student表id列为主键);
如果不显式命名约束,Oracle数据库将以SYS_Cn的格式为约束命名,这里n是唯一的整数。
约束分为字段级别约束和表级别约束:字段级约束:只为单个字段添加约束;表级约束:为多个字段添加约束
创建 TABLE 以及 CONSTRAINT
1、创建表的第一种方式(白手起家)
CREATE TABLE table_name
(
column_name1 DATA_TYPE 无约束名列级约束
column_name2 DATA_TYPE 自定义约束名列级约束
--无约束名表级约束
--自定义约束名表级约束
);
--NOT NULL、UNIQUE、PRIMARY KEY、DEFALUT,NOT NULL和DEFALUT没有表级约束
CREATE TABLE Persons(
P_ID INT NOT NULL PRIMARY KEY,
LastName VARCHAR(255) NOT NULL,
FirstName VARCHAR(255) UNIQUE,
Address VARCHAR(255),
City VARCHAR(255) DEFAULT 'Sandnes'
BIRTHDATE DATE DEFAULT GETDATE() --也可以使用类似 GETDATE()这样的函数
UNIQUE(LastName),
--定义多个列是UNIQUE约束:
CONSTRAINT uc_PersionID UNIQUE(P_id, LastName)
);
--创建外键FOREIGN KEY
CREATE TABLE Orders(
O_ID INT NOT NULL,
OrderNo INT NOT NULL,
P_ID INT FOREIGN KEY REFERENCES Persons(P_ID)
--FOREIGN KEY (P_id) REFERENCES PERSONS(P_is)
--CONSTRAINT fk_PerPrders FOREIGN KEY (P_id) REFERENCES Persons(P_id)
)
--CHECK约束
CREATE TABLE Persons(
P_id INT NOT NULL CHECK (P_id > 0),
LastName VARCHAR(255) NOT NULL,
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255)
--CHECK(P_id > 0)
--CONSTRAIN ck_Persons CHECK(P_id > 0)
)
2、创建表的第二种方式(依托现有的表进行创建)
//这种情况下,创建的表里面会有依托表的数据
CREATE TABLE emp2
AS
SELECT employee_id id, last_name name, hire_date, salary
FROM employees WHERE 子句
修改 TABLE 结构
ALTER TABLE 表名 ADD 列名 数据类型;
ALTER TABLE 表名 MODIFY 列名 数据类型;
ALTER TABLE 表名 DROP COLUMN 列名;
ALTER TABLE 表名 RENAME COLUMN 当前列名 TO 新列名;
ALTER TABLE 当前表名 RENAME TO 新表名;
1、字段的修改包括修改数据类型(只有对应列为空指才可以修改)、大小和默认值,其中默认值的修改只会影响后来插入表的数据,对之前的数据不会产生影响。
2、如果所删除列是另一个表的外键,则该列无法删除
--如:
ALTER TABLE employ ADD weight VARCHAR2(50) ;
ALTER TABLE employ MODIFY weight Number(13,2);
ALTER TABLE employ DROP COLUMN weight;
ALTER TABLE employ RENAME COLUMN weight To weight_new ;
ALTER TABLE employ RENAME TO Employ _new;
建表后添加 CONSTRAINT
1、UNIQUE (两种写法)
ALTER TABLE 表名
ADD UNIQUE(列名);
ALTER TABLE 表名
ADD CONSTRAINT 约束名 UNIQUE(列名1, 列名2,...); //唯一约束,可设置多列值为唯一
2、PRIMARY KEY (两种写法)
ALTER TABLE 表名
ADD PRIMARY KEY(列名);
ALTER TABLE 表名
ADD CONSTRAINT 约束名 PRIMARY KEY(列名1, 列名2,...); //主键,可设置多列为联合主键
3、FOREIGN KEY (两种写法)
ALTER TABLE 表名1
ADD FOREIGN KEY(列名1) REFERENCES 表名2(列名2);
ALTER TABLE 表名1
ADD CONSTRAINT 约束名 FOREIGN KEY(列名1) REFERENCES 表名2(列名2);
注意:表1的列1的值必须包含于表2的列2中,如果不符合,则创建约束失败,就会报:无法验证 (约束) - 未找到父项关键字
4、CHECK (两种写法)
ALTER TABLE 表名
ADD CHECK(列名 > 0);
ALTER TABLE 表名
ADD CONSTRAINT 约束名 CHECK(列名1 > 5 AND 列名2 like 'fe%');
注意:如果你写的约束条件,而你数据库的内容不符合,就会报:无法验证(约束),违反检查约束条件
删除 TABLE 和 CONSTRAINT
删除 TABLE
DROP TABLE table_name;
删除 CONSTRAINT
--撤销 UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK
ALTER TABLE table_name
DROP CONSTRAINT 约束名;
启用或禁用 CONSTRAINT
ALTER TABLE table_name
DISABLE CONSTRAINT 约束名;--禁用约束
ALTER TABLE table_name
ENABLE CONSTRAINT 约束名;--启用约束