Oracle 数据库表和约束条件的增删改查

简介: Oracle 数据库表和约束条件的增删改查

1、创建数据表

1.1 语法

CREATE TABLE <表明>(

   字段1 数据类型 [列级别约束条件] [默认值],

   字段2 数据类型 [列级别约束条件] [默认值],

   ......

   [表级别约束条件]

);

常用的数据:整数,浮点数,精确小数,二进制,日期/时间,字符串等数据类型


示例一

创建TB_EMP1表


CREATE TABLE TB_EMP1 (

   ID NUMBER(11),

   NAME VARCHAR2(25),

   DEPTID NUMBER(11),

   SALARY NUMBER(8,2)

 );

1.2 查询表结构

DESC TB_EMP1;


2、主键约束语法 PRIMARY KEY CONSTRAINT

2.1 概念

主键约束: 数据唯一,并且不不允许空,分为单字段主键和多字段联合主键 类似我们的身份证


2.2 单字段主键语法如下

2.2.1 字段名 数据类型 PRIMARY KEY [默认值]

2.2.2 定义完所有列后采用以下语句

[CONSTRAINT <约束名>]  PRIMARY KEY(字段名)

示例2

创建TB_EMP2表和TB_EMP3表,定义主键为ID


--2.2.1

CREATE TABLE TB_EMP2 (

   ID NUMBER(11) PRIMARY KEY,

   NAME VARCHAR2(25),

   DEPTID NUMBER(11),

   SALARY NUMBER(8,2)

 );

--2.2.2

CREATE TABLE TB_EMP3 (

   ID NUMBER(11),

   NAME VARCHAR2(25),

   DEPTID NUMBER(11),

   SALARY NUMBER(8,2),

   CONSTRAINT PK_ID PRIMARY KEY(ID)

 );

2.3 多字段联合主键

[CONSTRAINT <约束名>] PRIMARY KEY(字段名1,字段2.....字段N)*/

示例3

CREATE TABLE TB_EMP4 (

   ID NUMBER(11),

   NAME VARCHAR2(25),

   DEPTID NUMBER(11),

   SALARY NUMBER(8,2),

   CONSTRAINT PK_ID_NAME PRIMARY KEY(ID,NAME)

);

2.4 使用ALTER TABLE 语句为数据库修改主键约束和删除约束

语法如下


ALTER TABLE <表名> ADD [CONSTRAINTS <约束名称>] PRIMARY KEY(字段名称)

ALTER TABLE <表名> DROP CONSTRAINTS <约束名称>

示例4(主键和联合主键)

ALTER TABLE TB_EMP1 ADD CONSTRAINTS PK_ID1 PRIMARY KEY(ID,NAME);

ALTER TABLE TB_EMP1 DROP CONSTRAINTS SYS_C008827;

ALTER TABLE TB_EMP1 ADD PRIMARY KEY(ID,NAME);

2.5 查询表的约束

根据视图USER_CONSTRAINTS可以查询外键的类型


P 主键


R 外键


U 唯一


3、外键约束 FOREIGN KEY CONSTRAINT

3.1 概念

可以是空值,若不为空值时,必须等于另一个数据库中主键的某一个值,并且数据类型一致


主表:相关联字段中主键所在的表为主表


从表:相关联字段中外键所在的表为从表


3.2 语法如下

[CONSTRAINT <外键名>] FOREIGN KEY (字段) REFERENCES <主表名>(主键列)

示例5

CREATE TABLE TB_DEPT (

 ID NUMBER(11) PRIMARY KEY,

 NAME VARCHAR2(22),

 LOCATION VARCHAR2(50)

);

CREATE TABLE TB_EMP5 (

   ID NUMBER(11),

   NAME VARCHAR2(25),

   DEPTID NUMBER(11),

   SALARY NUMBER(8,2),

   CONSTRAINT ID2 PRIMARY KEY(ID),

   CONSTRAINT FK_ID FOREIGN KEY(DEPTID) REFERENCES TB_DEPT(ID)

 );

SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'TB_EMP5';

--删除数据表

DROP TABLE TB_EMP5;

--重新创建表 经过测试语法[CONSTRAINT <外键名>] 是可以忽略不写

CREATE TABLE TB_EMP5 (

   ID NUMBER(11),

   NAME VARCHAR2(25),

   DEPTID NUMBER(11),

   SALARY NUMBER(8,2),

   PRIMARY KEY(ID),

   FOREIGN KEY(DEPTID) REFERENCES TB_DEPT(ID)

 );


3.3 修改数据表时进行外键的添加

语法如下


ALTER TABLE <表名> ADD [CONSTRAINTS <约束名称>] FOREIGN KEY(外键约束的字段名称) REFERENCE <主表名>(字段名称)[ON DELETE CASCADE]

示例6

CREATE TABLE TB_EMP6 (

   ID NUMBER(11),

   NAME VARCHAR2(25),

   DEPTID NUMBER(11),

   SALARY NUMBER(8,2),

   PRIMARY KEY(ID)

 );

ALTER TABLE TB_EMP6 ADD CONSTRAINTS FK_ID2 FOREIGN KEY (DEPTID) REFERENCES TB_DEPT(ID);

3.4 移除外键约束

语法如下


ALTER TABLE <表名> DROP CONSTRAINTS <约束名称>

示例7

ALTER TABLE TB_EMP6 DROP CONSTRAINTS FK_ID2;

3.5 修改约束键名称

语法如下


ALTER TABLE <表名> RENAME CONSTRAINTS <旧约束名> TO <新约束名>

示例8

ALTER TABLE TB_EMP5 RENAME CONSTRAINTS TEST1 TO TEST2;


4、唯一约束 UNIQUE CONSTRAINT

4.1 概念

要求该列唯一,允许为空,可以确保一列或者多列


4.2 语法如下

4.2.1 在定义好的列之后直接指定唯一约束

字段名 数据类型 UNIQUE

4.2.2 在指定的所有列之后指定唯一约束

[CONSTRAINT <约束名>] UNIQUE (字段1,字段2...字段N)

多字段联合唯一 保证是两个字段值不能相同 可以AB AA BA BB,但是不能两个字段都相同


示例9

--4.2.1

CREATE TABLE TB_DEPT1 (

 ID NUMBER(11) PRIMARY KEY,

 NAME VARCHAR2(22) UNIQUE,

 LOCATION VARCHAR2(50)

);

--测试插入两台NAME字段相同的值

INSERT INTO TB_DEPT1 VALUES(1,'1','1');

INSERT INTO TB_DEPT1 VALUES(2,'1','1');--ORA-00001:违反唯一约束条件(TEST.SYS_C008835) SYS_C008835 约束名称

SELECT * FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'TB_DEPT1'; --SYS_C008835

INSERT INTO TB_DEPT1 VALUES(2,NULL,'1');

INSERT INTO TB_DEPT1 VALUES(3,NULL,'1');

INSERT INTO TB_DEPT1 VALUES(4,NULL,'1');

select * from TB_DEPT1;

desc TB_DEPT1;

-- 4.2.2

CREATE TABLE TB_DEPT2 (

 ID NUMBER(11) PRIMARY KEY,

 NAME VARCHAR2(22),

 LOCATION VARCHAR2(50),

 UNIQUE (NAME,LOCATION)

);

CREATE TABLE TB_DEPT3 (

 ID NUMBER(11) PRIMARY KEY,

 NAME VARCHAR2(22),

 LOCATION VARCHAR2(50),

 CONSTRAINT UNIQUE_NAEM_LOCA UNIQUE (NAME,LOCATION)

);

SELECT * FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'TB_DEPT3';

INSERT INTO TB_DEPT3 VALUES(1,NULL,'1');

INSERT INTO TB_DEPT3 VALUES(2,NULL,'1');

INSERT INTO TB_DEPT3 VALUES(3,NULL,'2');

INSERT INTO TB_DEPT3 VALUES(4,'1','2');

INSERT INTO TB_DEPT3 VALUES(13,'1','1');

INSERT INTO TB_DEPT3 VALUES(14,'2','1');

INSERT INTO TB_DEPT3 VALUES(15,'2','2');

INSERT INTO TB_DEPT3 VALUES(16,'1','2');

select * from TB_DEPT3;


4.3 在修改数据表时添加和删除唯一约束

语法如下


ALTER TABLE <表名> ADD [CONSTRAINTS <约束名称>] UNIQUE (字段1,字段2...字段n);

ALTER TABLE <表名> DROP CONSTRAINTS <约束名称>;

示例10

CREATE TABLE TB_DEPT4 (

 ID NUMBER(11) PRIMARY KEY,

 NAME VARCHAR2(22),

 LOCATION VARCHAR2(50)

);

ALTER TABLE TB_DEPT4 ADD CONSTRAINTS UNIQUE_NAME_LOCATION UNIQUE(NAME,LOCATION);

ALTER TABLE TB_DEPT4 DROP CONSTRAINTS UNIQUE_NAME_LOCATION;

ALTER TABLE TB_DEPT4 ADD UNIQUE(NAME,LOCATION);

总结

UNIQUE 和 PRIMARY KEY区别


UNIQUE 数据表字段中可以拥有多个UNIQUE 字段,但是PRIMARY KEY 只能拥有一个


UNIQUE 数据表字段中可以为NULL,PRIMARY KEY不能为空


5、检查约束 CHECK

5.1 概念

规定每一列能够输入的值,


5.2 语法如下

[CONSTRAINT <约束名称>] CHECK (检查条件)

示例11

CREATE TABLE TB_EMP7 (

   ID NUMBER(11),

   NAME VARCHAR2(25),

   GENDER VARCHAR2(2),

   AGE NUMBER(2),

   PRIMARY KEY(ID),

   CONSTRAINT CHECK_GENDER CHECK (GENDER = '男' OR GENDER = '女')

 );

CREATE TABLE TB_EMP8 (

   ID NUMBER(11),

   NAME VARCHAR2(25),

   GENDER VARCHAR2(2),

   AGE NUMBER(2),

   PRIMARY KEY(ID),

   CHECK (GENDER = '男' OR GENDER = '女')

 );

INSERT INTO TB_EMP7 VALUES(1,'梁自祥','男',30);

INSERT INTO TB_EMP7 VALUES(2,'梁自祥',NULL,30);

INSERT INTO TB_EMP8 VALUES(1,'梁自祥',null,30);--可以null值

INSERT INTO TB_EMP8 VALUES(2,'梁自祥','哈',30);--OCR-02290:违反检查约束条件

5.3 在修改表数据时添加和删除检查约束

语法如下


ALTER TABLE <表名> ADD [CONSTRAINTS <约束名称>[ CHECK (检查条件)

ALTER TABLE <表名> DROP CONSTRAINTS <约束名称>

示例12

CREATE TABLE TB_EMP9 (

   ID NUMBER(11),

   NAME VARCHAR2(25),

   GENDER VARCHAR2(2),

   AGE NUMBER(2),

   PRIMARY KEY(ID)

 );

ALTER TABLE TB_EMP9 ADD CONSTRAINTS CHECK_GENDER_1 CHECK (GENDER = '男' OR GENDER = '女');

ALTER TABLE TB_EMP9 DROP CONSTRAINTS CHECK_GENDER_1;

ALTER TABLE TB_EMP9 ADD CHECK (GENDER = '男' OR GENDER = '女');

总结

CONSTRAINTS <约束名称> 可以省略不写


主键、外键、唯一、检查约束删除语法一致,为 ALTER TABLE <表名> DROP CONSTRAINTS <约束名称>


6、非空约束 NOT NULL CONSTRAINT

6.1 概念

指定的字段不能为空,


6.2 语法如下

字段名 数据类型 NOT NULL

示例13

CREATE TABLE TB_DEPT5 (

 ID NUMBER(11) PRIMARY KEY,

 NAME VARCHAR2(22) NOT NULL ,

 LOCATION VARCHAR2(50)

);

INSERT INTO TB_DEPT5(ID,NAME,LOCATION) VALUES(1,'2','11');

INSERT INTO TB_DEPT5(ID,NAME,LOCATION) VALUES(2,NULL,'11');--ORA-01400:无法将NULL插入

INSERT INTO TB_DEPT5(ID,NAME,LOCATION) VALUES(2,'','11');--ORA-01400:无法将NULL插入

6.3 在修改表数据时添加和删除非空约束

语法如下


ALTER TABLE <表名> MODIFY <字段名> NOT NULL

ALTER TABLE <表名> MODIFY <字段名> NULL*/

示例14

CREATE TABLE TB_DEPT6 (

 ID NUMBER(11) PRIMARY KEY,

 NAME VARCHAR2(22) NOT NULL ,

 LOCATION VARCHAR2(50)

);

DESC TB_DEPT6;

--删除非空约束

ALTER TABLE TB_DEPT6 MODIFY NAME NULL;

INSERT INTO TB_DEPT6(ID,NAME,LOCATION) VALUES(3,NULL,'11');

--添加非空约束

ALTER TABLE TB_DEPT6 MODIFY NAME NOT NULL;--ORA-02296:无法启用非空约束,提示空值,删除数据后重新启用

INSERT INTO TB_DEPT6(ID,NAME,LOCATION) VALUES(3,NULL,'11');--ORA-01400:无法将NULL插入


目录
相关文章
|
22天前
|
存储 Oracle 关系型数据库
数据库数据恢复—ORACLE常见故障的数据恢复方案
Oracle数据库常见故障表现: 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE ASM存储破坏。 3、ORACLE数据文件丢失。 4、ORACLE数据文件部分损坏。 5、ORACLE DUMP文件损坏。
70 11
|
2月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库文件有坏快损坏的数据恢复案例
一台Oracle数据库打开报错,报错信息: “system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。管理员联系我们数据恢复中心寻求帮助,并提供了Oracle_Home目录的所有文件。用户方要求恢复zxfg用户下的数据。 由于数据库没有备份,无法通过备份去恢复数据库。
|
2月前
|
存储 Oracle 关系型数据库
oracle数据恢复—Oracle数据库文件大小变为0kb的数据恢复案例
存储掉盘超过上限,lun无法识别。管理员重组存储的位图信息并导出lun,发现linux操作系统上部署的oracle数据库中有上百个数据文件的大小变为0kb。数据库的大小缩水了80%以上。 取出&并分析oracle数据库的控制文件。重组存储位图信息,重新导出控制文件中记录的数据文件,发现这些文件的大小依然为0kb。
|
27天前
|
存储 Oracle 关系型数据库
服务器数据恢复—华为S5300存储Oracle数据库恢复案例
服务器存储数据恢复环境: 华为S5300存储中有12块FC硬盘,其中11块硬盘作为数据盘组建了一组RAID5阵列,剩下的1块硬盘作为热备盘使用。基于RAID的LUN分配给linux操作系统使用,存放的数据主要是Oracle数据库。 服务器存储故障: RAID5阵列中1块硬盘出现故障离线,热备盘自动激活开始同步数据,在同步数据的过程中又一块硬盘离线,RAID5阵列瘫痪,上层LUN无法使用。
|
2月前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
57 7
|
2月前
|
存储 SQL Oracle
[Oracle]面试官:你简单说说常用的4种约束
本文介绍了数据库表中的几种常见约束,包括主键、唯一键、外键、检查和非空约束。详细说明了每种约束的创建、删除及启用/禁用方法,特别强调了外键约束的级联操作和检查约束的正则表达式应用。建议多练习手写SQL命令以加深理解。
41 2
|
5月前
|
监控 Oracle 关系型数据库
"深度剖析:Oracle SGA大小调整策略——从组件解析到动态优化,打造高效数据库性能"
【8月更文挑战第9天】在Oracle数据库性能优化中,系统全局区(SGA)的大小调整至关重要。SGA作为一组共享内存区域,直接影响数据库处理能力和响应速度。本文通过问答形式介绍SGA调整策略:包括SGA的组成(如数据缓冲区、共享池等),如何根据负载与物理内存确定初始大小,手动调整SGA的方法(如使用`ALTER SYSTEM`命令),以及利用自动内存管理(AMM)特性实现智能调整。调整过程中需注意监控与测试,确保稳定性和性能。
400 2
|
6月前
|
存储 缓存 Oracle
Oracle数据库可扩展性和性能
【7月更文挑战第6天】
98 7
|
存储 SQL 负载均衡
达梦数据库与Oracle数据库:功能、性能和适用场景对比
数据库在现代信息技术领域中扮演着至关重要的角色。在企业级应用中,选择正确的数据库管理系统对于数据存储、处理和查询效率至关重要。本文将对比两个备受关注的数据库管理系统——达梦数据库和Oracle数据库,从功能、性能和适用场景等方面进行深入探讨,以帮助读者在选择合适数据库时做出明智的决策。
2881 1

推荐镜像

更多