欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > Oracle数据库数据编程SQL<2.1 DDL、DCL表、列及约束>

Oracle数据库数据编程SQL<2.1 DDL、DCL表、列及约束>

2025/4/3 5:43:21 来源:https://blog.csdn.net/2302_81846649/article/details/146557887  浏览:    关键词:Oracle数据库数据编程SQL<2.1 DDL、DCL表、列及约束>

目录

一、对表的操作

(一)复制表

1、语法

2、练习

3、仅复制表格式--在where后加一个不成立的条件

(二)自建表

1、数据类型

(1)字符类型:char2、varchar/varchar2

char (数)固定长度类型

varchar/varchar2 (数)可变长度类型

(2)数值类型:number、int

number(数1,数2)

int(数)

(3)日期类型:date、timestamp

date不用加长度

timestamp 时间戳

(4)大对象类型

BLOB 二进制大对象

CLOB 字符大对象

2、自建表

(1)语法

(2)练习

(二)删除表

(三)清空表

(四)给表重新命名

(五)查看垃圾桶

(六)查看用户所有的表信息

(七)闪回表(恢复表)

(八)修改表

二、对列的DCL操作alter,table的存在是前提

(一)增加列alter...add

(二)修改列类型长度modify:修改更改但是不能更改类型

(三)删除列alter...drop

(四)给列重命名alter..rename

三、约束

(一)约束的作用

(二)约束的分类

(三)建立约束

1、不带约束名称的--系统会分配一个SYS开头的名字

2、带约束名称的

(四)列模式

(五)约束的一些常规操作(增加、修改、重命名、禁用/启用)

(六)外键约束(只能用列模式)

1、语法

2、重点说明

(七)以下对约束的四种状态说明

1、enable validate :正常的启用约束

2、enable novalidate :--check(只能用在检查约束)

3、disable novalidate :正常的禁用约束

4、disable validate :锁表

(八)启用约束

(九)禁用约束


一、对表的操作

(一)复制表

1、语法

create table 表名 as select语句(列 from 表)create table emp1 as select * from empcreate table emp2 as select * from emp

2、练习

--创建三张表,分别包含10部门20部门30部门的信息
create table "10部门的弟弟" as select * from emp where deptno=10
create table "20部门的弟弟" as select * from emp where deptno=20
create table "30部门的弟弟" as select * from emp where deptno=30

3、仅复制表格式--在where后加一个不成立的条件

--创建一张只有emp表名字段的空表
create table emp空 as select * from emp where 1=2

(二)自建表

1、数据类型

(1)字符类型:char2、varchar/varchar2
char (数)固定长度类型

是指输入的字段虽然小于该字段的限制长度,但实际存储时会自动补充空格后才把字段内容存储到数据块中。

char字段最多可以存储2000字节,char不写参数默认为char(1)

比较浪费空间但是存储效率比可变字符高。即读取快但浪费空间

varchar/varchar2 (数)可变长度类型

当输入的值小于该字段的限定长度时,直接将该字段的值输入存储到数据库中,不会补上空格

vachar2最多可以存储4000字节信息

节省空间但是存储效率低于固定长度。即不浪费空间但读取慢

(2)数值类型:number、int
number(数1,数2)

数1:是总长度,数2是小数点后的位数。数1数2不写默认126位

数2:会四舍五入

如:number(3,2)代表总长度为3,小数2位。

int(数)

只存放整数,int 相当于number(22)

(3)日期类型:date、timestamp
date不用加长度

一个10个字节的定宽日期、时间的数据类型。

其中包含7个属性:世纪、年、月、日、时、分、秒

select length(sysdate)from dual

timestamp 时间戳
(4)大对象类型
BLOB 二进制大对象

二进制保存数据 如:保存位图,4GB*数据块大小

CLOB 字符大对象

使用char来保存数据 如:保存xml文档,4GB*数据块大小

2、自建表

(1)语法
create table 表名 (字段名1 类型长度,字段名2 类型长度,........)create table emp2 (empno number(4),ename varchar2(20),job varchar2(20),sal number(7,2),hiredate date,deptno number(2))
(2)练习
--手动创建一张学生表 我要炸学校 学生编号stuno 姓名name 出生日期 birthday科目 subject 成绩score 标记remarkcreate table school (stuno number(8),name varchar2(20),birthday date,subject varchar2(8),score number(4,1),remark varchar2(20))·建表时,建议吧较小的不为空的字段放到前面,可能为空的放到后面
·表名和字段名可以用中文但是建议使用英文
·一个表的最大字段数是254个

(二)删除表

drop table 表名 {purge}·不加purge逻辑删除
·加purge物理删除

(三)清空表

truncate table emp1

(四)给表重新命名

rename 旧表名 to 新表名

(五)查看垃圾桶

select * from user_recyclebin

(六)查看用户所有的表信息

select * from user_tables

(七)闪回表(恢复表)

flashback table 原来的名字/"在回收站里的对象名" to before drop rename to 新表名

(八)修改表

alter:改变性质modify:修改更改add:增加column:列constraint:限制约束

二、对列的DCL操作alter,table的存在是前提

(一)增加列alter...add

--语法
alter table 表名 add 新列名 类型长度
--举例
alter table emp2 add comm number(6,2)
select * from emp2

(二)修改列类型长度modify:修改更改但是不能更改类型

alter table 表名 modify 列名 修改后的类型长度·同类型修改变长直接修改
·同类型修改变短不能短于已有数据最长长度
·不同类型修改,必须此列为空,否则不能修改alter table emp2 modify deptno varchar2(20)

(三)删除列alter...drop

alter table 表名 drop column 列名alter table emp2 drop column sal

(四)给列重命名alter..rename

【1】语法
alter table 表 rename column 旧列名 to 新列名
【2】举例
--新建一张emp3和emp表数据完全一致create table emp3 as select * from emp;--修改表名为员工表,列名全部改成对应的中文rename emp3 to 员工表;--修改列名alter table 员工表 rename column deptno to 部门编号;alter table 员工表 rename column comm to 提成;alter table 员工表 rename column sal to 工资;alter table 员工表 rename column hiredate to 入职日期;alter table 员工表 rename column mgr to 经理编号;alter table 员工表 rename column job to 职位;alter table 员工表 rename column ename to 名字;alter table 员工表 rename column empno to 员工编号;
--查看结果select * from 员工表

三、约束

(一)约束的作用

1. 用来确保数据库满足业务规则的手段,不过真正的企业开发中,除了主键

2. 约束这种具有强需求的约束,像外键约束、检查约束更多的时候仅仅出现在数据库的设计阶段。

3. 约束是保障数据和理性的最后一道防线!

4. 同一用户下不同表的约束名称不可以重复

(二)约束的分类

约束的分类

主键约束

唯一且非空

primary key PK

唯一约束

唯一可以为空但只能有一个空

unique UN

检查约束

加一个where条件

check CK

非空约束

不能为空

not null NN

外键约束

foreign key FK

默认值约束

default

在emp表的deptno列建立外键约束链接到dept的主键列(deptno)

子表emp表的deptno列的值必须在父表dept对应的主键列deptno 里存在,否则报错插不进去。

(三)建立约束

1、不带约束名称的--系统会分配一个SYS开头的名字

create table laogong1 (id number(6) primary key,--主键name varchar2(20) not null,--非空age number(3) check(age>=18),--检查约束phone int unique,--唯一job varchar2(20) default 'CLERK',--默认值idcard char(18) unique not null--可以两个约束一起用)

2、带约束名称的

create table laogong2 (id number(6) constraint PK_1 primary key,--主键name varchar2(20) constraint NN_1 not null,--非空age number(3) constraint CK_1 check(age>=18),--检查phone int constraint UQ_1 unique,--唯一job varchar2(20) default 'CLERK',--默认值不可以取别名idcard char(18) constraint UN_2 unique not null--可以两个约束一起用)

(四)列模式

【1】分带约束名字和不带约束名字的create table laogong3 (id number (6) ,name varchar2 (20) ,age number (3) ,phone int ,job varchar(20) default 'CLERK',constraint PK_1 primary key(id),constraint CK_1 check(age>18),constraint phone UQ_1 unique (phone))【2】不可写非空和默认约束
【3】复合约束和外键约束只能通过列模式创建

(五)约束的一些常规操作(增加、修改、重命名、禁用/启用)

【1】增加约束(不能修改非空和默认值)alter table 表名 add {constraint 约束名} 约束类型 (加约束的列)【2】修改非空约束 modifyalter table 表名 modify 列 类型长度 not null/null【3】删除约束 dropalter table 表名 drop constraint 约束名【4】修改约束名 renamealter table 表名 rename constraint 旧约束名 to 新约束名【5】约束的禁用和启用 disable/enablealter table 表名 disable constraint 约束名 ---禁用alter table 表名 enable constraint 约束名 ---启用

(六)外键约束(只能用列模式)

1、语法

constraint 约束名 foreign key(外键列的列名)
references 父表(主键列列名)
{on delete cascade}--级联删除/{on delete set null}--指定级联删除为空

2、重点说明

(1)子表:创建外键约束的表是子表

(2)父表:参考哪张表,那张表就是父表

(3)外键可以为空,也可以不唯一

(4)更新/插入数据到子表时,必须更新/插入是父表参考列已有的值,否则报错

(5)emp表是子表,dept是父表,对emp表的deptno列创建了外键约束

(6)向emp表添加数据,新数据的部门必须是in(10,20,30,40)插入50部门就不行

(7)删除时,如果没有级联删除,必须先删除子表的相关项再删除父表的对应行

(8)删除时,如果有级联删除,子表的相关项和父表的对应列一起删除

(9)如果指定了级联删除为空,则删除父表信息后子表对应的值变成空其他值不变。

(10){on delete set null}--级联删除为空

(11)父表可以插入新的数据(符合主键约束即可)

(七)以下对约束的四种状态说明

validate英 [ˈvalɪdeɪt] 美 [ˈvæləˌdeɪt] v.确证;验证;证实;使合法有效;宣布合法有效

1、enable validate :正常的启用约束

--无法输入违反约束的行,而且表中所有行都要符合约束。

2、enable novalidate :--check(只能用在检查约束)

--表中可以存在不合约束的状态,

--但对新加入数据必须符合约束条件。

3、disable novalidate :正常的禁用约束

--可以输入任何数据,

--表中或已存在不符合约束条件的数据。

4、disable validate :锁表

--不能对表进行插入/更新/删除等操作,

--相当于对整个表的read only 设定。

--对其他列进行更新也不可以。

(八)启用约束

alter table 表明 enable constraint 约束名ALTER TABLE EMP001 enable novalidate CONSTRAINT CK_age;select * from emp001

(九)禁用约束

alter table 表明 disable constraint 约束名ALTER TABLE EMP001 disable validateCONSTRAINT u_1;alter table emp001 add constraint CK_age check(empno between 7369 and 7934);insert into emp001(empno) values(7999);
insert into emp001(empno) values(7965);update emp001 set sal=sal+1;delete from emp001 where empno=7788;

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词