TABLE 以及 CONSTRAINT(创建TABLE以及CONSTRAINT、修改TABLE结构、建表后添加CONSTRAINT、删除TABLE和CONSTRAINT)


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 约束名;--启用约束
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值