创建Oracle数据库的字段约束:
- 1、表
- 1.1、创建表
- 1.2、表重命名 & 删除表
- 2、字段
- 2.1、添加字段
- 2.2、修改字段 & 删除字段
- 3、注释
- 4、约束
- wns9778.com,4.1、添加主键约束
- 4.2、添加外键约束
- 4.3、添加唯一约束
- 4.4、添加 CHECK 约束
- 4.5、空约束和非空约束
- 4.6、禁用约束 & 启用约束 & 删除约束
- 5、索引
- 5.1、创建索引
- 5.2、修改索引 & 删除索引
- 6、总结
非空约束 唯一约束 对字段的取值的约束 默认值 外键约束
在 Oracle 中表的类型有 9 种,但实际应用中 99% 以上的情况下用的可能都是堆组织表,也就是我们常说的“普通”表。执行普通 CREATE TABLE 语句时,默认得到的表就是堆组织表。表是数据库中一个非常重要的对象,是其他对象的基础。数据库只是一个框架,表才是其实质内容。本文内容将围绕表及表相关的 SQL 操作展开。
create table tab_class( class_id number primary key, class_name varchar2(10) not null unique );
create table tab_stu( stu_id number, --学生姓名,不能为空,不能重复 stu_name varchar2(20) not null unique, --学生姓名只能是male或female stu_gender varchar2(6) not null check(stu_gender='male' or stu_gender='female'), --学生年龄只能在18到60之间 stu_age number check(stu_age 18 and stu_age 60), --邮箱可以不填写,填写的话不能相同 stu_email varchar2(30) unique, stu_address varchar2(30), --外键约束 class_id number not null references tab_class(class_id) );
1、表
维护已经创建好的约束:
1.1、创建表
在 Oracle 中创建表语法有两种,一种是不依赖现有表创建全新的表,另一种是根据现有表创建类似的新表。无论是哪一种写法,都得遵守一些最基本的规则:
- 1、表名和列名都必须是字母开头。
- 2、表名和列名的长度都必须是 1~30 个字符。
- 3、表名和列表中必须由 A~Z、a~z、0~9、_、$、# 组成,不能使用空格和单引号等特殊字符。
- 4、同一 Schema 下不能有重复的表名,同一张表中不能有重复的列名。
- 5、表名和列表不能是部分关键字,如 TABLE、VIEW、AUDIT 等。
- 6、创建表的用户必须具有 CREATE TABLE 的权限。
- 7、必须要有足够的存储空间。
方式 1:如要创建一张课程表,字段包含:课程ID、课程名称、课程描述。示例:
CREATE TABLE t_course(
course_id NUMBER(10) PRIMARY KEY,
course_name VARCHAR2(50),
course_desc VARCHAR2(2000)
);
方式 2:如要创建一张只包含职员姓名和生日的表,示例:
CREATE TABLE t_staff_mini AS
SELECT t1.staff_id, t1.birthday FROM t_staff t1;
方式 2:如要创建一张只包含 90 后员工数据的职员表,示例:
CREATE TABLE t_staff90 AS
SELECT * FROM t_staff t1 WHERE t1.birthday>=TO_DATE('1990-01-01','yyyy-mm-dd');
如上例所示,根据已有表创建一张新表的语法是——CREATE TABLE ... AS SELECT * FROM ...
,关于这个语法有两点需要注意:
- 只创建表结构并拷贝表数据,不拷贝任何约束。
- 当 WHERE 条件不成立时,只创建表结构,不拷贝表数据。
可添加或删除约束,但不能直接修改。 可使约束启用和禁用。 非空约束必须使用MODIFY子句增加。 为表增加主键约束:
1.2、表重命名 & 删除表
将表名从 t_staff_mini
改成 t_staff2
,示例:
ALTER TABLE t_staff_mini RENAME TO t_staff2;
删除 t_staff90
表,示例:
DROP TABLE t_staff90; -- 普通删除,将表放入回收站
DROP TABLE t_staff90 PURGE; -- 彻底删除,将清除相关表信息
--维护约束 --创建约束 create table tab_check( che_id number, che_name varchar2(20) ); --为表增加主键约束 alter table tab_check add constraints tab_check primary key(che_id);
2、字段
添加唯一约束
2.1、添加字段
向 t_staff2
表中添加 is_disabled
字段,默认值
0,表示职员未被禁用,即启用状态,示例:
ALTER TABLE t_staff2 ADD(is_disabled NUMBER(1) DEFAULT(0)); -- DEFAULT 的括号可以省略
向 t_staff
表中添加性别、身高和体重 3
个字段,写三条语句分别来添加当然是可以的,但 Oracle
提供了更简洁的语法,示例:
ALTER TABLE t_staff2 ADD(gender NUMBER(1), height NUMBER(4,1), weight NUMBER(4,1));
--添加唯一约束,tab_check_unique表示约束的名称 alter table tab_check add constraints tab_check_unique unique(che_name);
2.2、修改字段 & 删除字段
把 t_staff
表中的 is_disabled
字段的字段名改为
staff_status
,示例:
ALTER TABLE t_staff2 RENAME COLUMN is_disabled TO staff_status;
把 t_staff
表中的 gender
字段的数据类型改为 VARCHAR2
,示例:
ALTER TABLE t_staff2 MODIFY(gender VARCHAR2(10)); -- MODIFY 的括号可以省略
把 t_staff
表中的 gender
字段的数据类型长度扩大 5 倍,示例:
ALTER TABLE t_staff2 MODIFY(gender VARCHAR2(50));
把 t_staff
表中的 staff_status
字段的默认值改为字符串 1,示例:
ALTER TABLE t_staff2 MODIFY(staff_status DEFAULT('1'));
删除 t_staff
表中的 gender
字段,示例:
ALTER TABLE t_staff2 DROP(gender);
删除 t_staff
表中的身高和体重两个字段,与添加多个字段同理,示例:
ALTER TABLE t_staff2 DROP(height,weight);
添加检查约束:
3、注释
注释表示例:
COMMENT ON TABLE t_staff IS '职员表'; -- 给 t_staff 表添加注释
COMMENT ON TABLE t_staff IS ''; -- 清空 t_staff 表的注释,可利用这个思路实现删改表注释的效果
注释字段示例:
COMMENT ON COLUMN t_staff.staff_name IS '职员姓名'; -- 给 t_staff.staff_name 字段添加注释
COMMENT ON COLUMN t_staff.staff_name IS ''; -- 清空 staff_name 字段的注释,可利用这个思路实现删改字段注释的效果
--添加一个字段 alter table tab_check add che_age number; --添加检查约束 alter table tab_check add constraints tab_check_age check(che_age18 and che_age60);
4、约束
数据的完整性用于确保数据库数据遵从一定的商业和逻辑规则。在 Oracle 中数据完整性可以通过约束、触发器、存储过程、函数等方式来实现,而约束易于维护,并且具有最好的性能,一般作为确保数据完整性的首选。
删除约束:
4.1、添加主键约束
要求给 t_staff_copy
表添加一个主键,主键字段为 staff_id
,示例:
ALTER TABLE t_staff_copy ADD CONSTRAINT pk_staff_copy PRIMARY KEY(staff_id);
如要根据职员姓名和性别创建一个联合主键,示例:
ALTER TABLE t_staff_copy DROP CONSTRAINT pk_staff_copy; -- 表只能有一个主键,所以要先把刚才建的主键删除掉
ALTER TABLE t_staff_copy ADD CONSTRAINT pk_staff_copy PRIMARY KEY(staff_name,gender);
实际开发中一般都会给表设置主键,而且大部分都是在创建表的时候一块儿创建,示例:
-- 语法一
CREATE TABLE t_staff3(
staff_id NUMBER(10) PRIMARY KEY,
staff_name VARCHAR2(20)
);
-- 语法二
CREATE TABLE t_staff4(
staff_id NUMBER(10),
staff_name VARCHAR2(20),
CONSTRAINT pk_staff4 PRIMARY KEY(staff_id)
);
本文由wns9778.com发布于计算机教程,转载请注明出处:.Net程序员学用Oracle系列(6):表、wns9778.com字段、
关键词: wns9778.com