oracle中的约束

Oracle中的约束有五种,分别为:

主键:primary key

外键:foreign key

非空:not null

唯一:unique

检查:check

在数据字典视图 user_constraint,里面显示当前用户所有的约束信息

①主键和外键

用于定义主表和从表之间的关系,外键是定义在从表上,主表则必须具有主键或者unique约束,当定义外键约束后,要求外键列的数据必须在
主表的主键列存在或者为NULL

主键和外键的数据类型一致

在删除主键约束的时候,要注意:
因为如果两张表存在主从关系,那么在删除主表的主键约束时,必须带上cascade选项
alter table 表名 drop primary key cascade
这样表示把两个表之间的主从关系破坏掉

②非空

oracle中的空包括 null和‘’  ;区别与sqlserver ,在sqlserver中  null和‘’是不一样的

所以:在Oracle中只要某一列定义为 NOT NULL ,那么 null和 '' 都插入不进去;但是SqlServer某一列定义为 NOT NULL, 那么null插入不进去, '' 可以插入进去。

语法:alter table employees modify deptno not null/null  

注意:如果表中已经存在null,就不能更改其为not null约束

③索引

单列索引
create index 索引名 on 表名(列名)
create index ghindex on emp(empid)

复合索引
create index emp_index1 on emp(ename,job)

创建主键或唯一约束后,ORACLE会自动创建一个与约束同名的索引。

例如:create table stu(name varchar2(20) primary key ,age int unique,home varchar2(20) not null)

里面就会有两个索引:name 和 age上分别都有索引

 
 

 

 

### Oracle 数据库约束类型及用法 #### 非约束 (NOT NULL) 非约束用于确保特定列不允许存储 `NULL` 值。创建表时可以定义此约束,也可以在现有表上添加。 ```sql CREATE TABLE employees ( id NUMBER PRIMARY KEY, name VARCHAR2(100) NOT NULL, salary NUMBER ); ``` 对于已有表格,可以通过 `ALTER TABLE` 添加非约束: ```sql ALTER TABLE employees MODIFY name NOT NULL; ``` #### 主键约束 (PRIMARY KEY) 主键约束唯一标识每一行数据,并且自动设置为非。通常由单个或多个字段组成。 ```sql CREATE TABLE departments ( department_id NUMBER PRIMARY KEY, department_name VARCHAR2(50) ); ``` 如果要修改已存在的表来增加主键,则需先确认该列无重复值和 `NULL` 值[^3]。 #### 外键约束 (FOREIGN KEY) 外键用来建立两个表之间的关系,即子表中的某列参照父表的一列或多列组合而成的关键字。 ```sql CREATE TABLE employee_departments ( emp_dept_id NUMBER PRIMARY KEY, dept_id REFERENCES departments(department_id), emp_id REFERENCES employees(id) ); ``` 当删除父记录前应考虑级联操作选项,如 `ON DELETE CASCADE` 或者 `ON UPDATE CASCADE`. #### 唯一性约束 (UNIQUE) 唯一性约束保证指定的一个或几个字段在整个表内具有唯一的值集合;允许存在 `NULL` 值但是每列仅能有一个 `NULL` 项。 ```sql CREATE TABLE projects ( project_code CHAR(8) UNIQUE, description CLOB ); ``` 同样支持对多列联合施加唯一性限制: ```sql CREATE UNIQUE INDEX idx_unique ON users(username, email); ``` #### 检查约束 (CHECK) 检查约束验证插入到某一列的数据是否满足给定条件表达式的要求。 ```sql CREATE TABLE products ( product_id NUMBER GENERATED BY DEFAULT AS IDENTITY, price NUMBER CHECK(price >= 0), stock_quantity NUMBER CHECK(stock_quantity BETWEEN 0 AND 9999) ); ``` 这些约束有助于维护数据库内部逻辑一致性并防止非法输入破坏业务规则.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值