当前位置: 首页 > news >正文

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 emp

create 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 标记remark

create 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】修改非空约束 modify
     alter table 表名 modify 列 类型长度 not null/null

【3】删除约束 drop
     alter table 表名 drop constraint 约束名

【4】修改约束名 rename
     alter table 表名 rename constraint 旧约束名 to 新约束名

【5】约束的禁用和启用 disable/enable
     alter 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;

相关文章:

  • 数据仓库 - 转转 - 一面凉经
  • JavaScript基础-navigator 对象
  • git-- github的使用--账户和本地连接
  • Python实现图片文字识别-OCR
  • 【面试八股】:CAS指令
  • UE5 学习笔记 FPS游戏制作30 显示击杀信息 水平框 UI模板(预制体)
  • Docker学习之服务编排(day9)
  • 将 wasm-game-of-life 发布到 npm
  • Javaweb后端 登录校验 拦截器interceptor 快速入门 令牌校验 拦截路径 执行流程
  • 文心一言与 DeepSeek 的竞争分析:技术先发优势为何未能转化为市场主导地位?
  • SQL EXISTS 与 NOT EXISTS 运算符
  • 从责任链模式聊到aware接口
  • 页面重构过程中如何保证良好的跨浏览器一致性?
  • 域名解析:从基础概念到安全风险全面指南
  • .net平台C#对于2D/二维点云处理用哪些库?
  • 数字诗意(java)
  • 基于FPGA的ESP8266无线数据传输(温湿度DTH11、光照强度BH1750、WIFI模块)连接中国移动onenet云平台,仿真+上板通过+可视化平台搭建
  • RCE复现
  • 深度学习查漏补缺:3.从 Sigmoid 到 GELU
  • 【LeetCode Solutions】LeetCode 101 ~ 105 题解
  • 网站建设费用IP/深圳博惠seo
  • 微信微网站是什么/百度推广seo效果怎么样
  • wordpress主题 时间轴/长沙专业竞价优化公司
  • 做视频直播网站/百度账号登录个人中心
  • 专业做辅助的网站/现在广告行业好做吗
  • 学做面包到什么网站/郑州网站关键词优化公司