4.1、dml操作:

1、查看当前用户下所有的表:

select * from user_tables;

2、查看某表的大小:

select sum(bytes)/(1024*1024) as "size(M)" from <表名>;

3、查看当前用户每个表占用空间的大小:

select segment_name,sum(bytes)/1024/1024 as "SIZE:(MB)" from user_extents group by segment_name;

4、查询插入语句:

(1)把A表中某些字段的数据插入B表中:

insert into <表B>(<字段名a>) (select <字段名a> from <表A>);

(2)如果两张表的字段完全一致:

insert into <表B> (select * from <表A>);

5、查询创表:

(1)保存A表中某些字段的数据为表B:

create table <表B> as (select <字段名> from <表A>);

(2)保存A表中所有字段的数据为表B:

create table <表B> as (select * from <表A>);

6、更新:

update <表名> set <字段名>= '<字符>' WHERE <字段名>!= '<字符>';

update damsup.BHL_SUP_SEARCHREGISTER up set up.sreg_date=(select down.sreg_date from dams.BHL_SUP_SEARCHREGISTER down where down.id=up.id) where id<'7000';

update BHL_SUP_SEARCHREGISTER set sreg_date=replace(sreg_date,substr(sreg_date,1,8),'20190827');

7、计算数据总条数:

select count(*) from <表名>;

8、删除重复数据:

(1)SELECT * FROM (SELECT * FROM <表名> WHERE <判重列> IN (SELECT <判重列> FROM <表名> GROUP BY <判重列> HAVING COUNT(<判重列>) >1) AND

<id号> NOT IN (SELECT MIN(<id号>) FROM <表名>)) WHERE <标识字段>='字段内容';

(2)delete from (SELECT * FROM BHL_ORIGINFILE WHERE ROOTPATH IN (SELECT ROOTPATH FROM BHL_ORIGINFILE GROUP BY ROOTPATH HAVING COUNT(ROOTPATH) >1) AND objno NOT IN (SELECT MIN(objno) FROM BHL_ORIGINFILE)) where dbid='335';

4.2、ddl操作:

添加、修改、删除多列的话,用逗号隔开

1、增加一个字段:

alter table <表名> add <字段名> varchar2(30) default 'lc' not null;

2、修改一个字段:

alter table <表名> modify <字段名> varchar2(16) default 'lc';

#需要注意的是如果某一列中已经存在值,如果你要修改的为比这些值还要小的列宽这样将会报错;

3、重命名字段名:

alter table <表名> rename column <旧字段名> to <新字段名>;

4、删除一个字段:

alter table <表名> drop column <字段名>;

5、重命名表:

ALTER TABLE <表名> RENAME <旧表名> TO <新表名>;

5.1、增加注释:

COMMENT ON TABLE <表名> IS '<描述信息>';

6、创建表的同时创建主键约束:

(1)不命名约束键:

create table student (

id number(10) primary key,

name varchar2(50),

age number(10));

(2)有命名约束键:

create table student1 (

id number(10) constraint student1_id_pk primary key,

name varchar2(50),

age number(10));

7、删除表中已有的主键约束:

(1)不命名约束键:

SELECT * from user_cons_columns where table_name='STUDENT';

alter table student drop constraint SYS_C0013729;

(2)命名约束键:

alter table students1 drop constraint student1_id_pk;

8、向表中添加主键约束:

alter table student add constraint student_id_pk primary key(id);

4.3、sequence 对象:

1、仅限于oracle,在mysql中可以在主键后加auto_increment;

2、sequence是oracle提供的数据库对象,为解决主键值和唯一键值的唯一性,

按照预定义的模式自动生成整数的一种机制,保证数字的自动增长;

3、sequence对象生成数字后,取出插入到表中主键或是唯一键(id序号);

4、在oracle中sequence就是序号,每次取的时候它会自动增加,sequence与表是独立的,

在多张表使用一个sequence时,连续的序号会分散在不同的表中;

5、创建自定义sequence:

(1)用户要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限;

(2)创表:

create table user_table(

user_table_id number(10) primary key,

--主键、自增长

name varchar2(100) not null,

mail varchar2(100) not null,

password varchar2(100)

);

(3)创建sequence:

CREATE SEQUENCE user_table_id_sequence

START WITH 1

--从几开始计数

INCREMENT BY 1

--每次加几个

NOMAXVALUE

--不设置最大值

NOCYCLE

--一直累加,不循环

NOCACHE;

--不设置缓存cache个序列,避免系统down掉或者其它情况导致的序列不连续

补充如下:

删除sequence的方法:drop sequence user_table_id_sequence;

修改sequence的参数:alter sequence user_table_id_sequence increment by 1;

(4)创建触发器:

create or replace trigger user_table_id_trigger

before insert on user_table for each row when (new.user_table_id is null)

begin

select user_table_id_sequence.nextval into:new.user_table_id from dual;

end;

(5)插入数据:

insert into user_table(name,mail,password) values('tom','tom@qq.com','123456');

#在使用触发器的情况下sequence序列会自动插入到user_table_id;

insert into user_table(user_table_id,name,mail,password) values(user_table_id_sequence.nextval,'tom','tom@qq.com','123456');

#在不使用触发器的情况下手动插入sequence序列;

(6)查看sequence当前的序号:

select user_table_id_sequence.currval from dual;

(7)查看哪些表的哪些字段使用了sequence序列:

SELECT

s.TABLE_NAME,

s.TABLE_ID,

s.SEQUENCE_NAME

FROM

(

SELECT

c.table_name AS TABLE_NAME,

A .sequence_name AS SEQUENCE_NAME,

SUBSTR (

b.text,

INSTR (LOWER(b.text), ':new.') + 5,

INSTR (LOWER(b.TEXT), 'from') - INSTR (LOWER(b.text), ':new.') - 5

) AS TABLE_ID

FROM

(

SELECT

sequence_name

FROM

user_sequences

) A,

(

SELECT

text,

NAME

FROM

user_source

WHERE

TYPE = 'TRIGGER'

) b,

(

SELECT

table_name,

TRIGGER_name

FROM

user_triggers

) c

WHERE

c.TRIGGER_name = b. NAME

AND UPPER(b.text) LIKE '%' || upper(A .sequence_name) || '%'

--精髓,oracle有些sequence创建名称是小写,但是数据库里面名称是大写

ORDER BY

table_name ASC

) s

WHERE

s.TABLE_ID IS NOT NULL;

4.4、建表语言:

1、表级约束(constraint):

(1)面临的问题:

1)某列必须有值而且唯一;

2)某列的取值受到另一取值的限制;

(2)数据库提供解决的方法:

1)限制无效的数据进入到表中;

2)数据库层面的"安检;

2、主键约束(primary key):

一张表只有一个pk;

(1)单一主键:

键数据具有唯一性,且不能出现null值;

create table stu_cour(

stu_id number(10) constraint stu_cour_stu_id_pk primary key

)

(2)联合主键:

两个键联合在一起数据具有唯一性,两个键分别可以出现重复值但不能为null;

create table stu_cour(

stu_id number(10),

cour_id number(10),

constraint stu_cour_stu_id_cour_id_pk primary key (stu_id,cour_id)

)

(3)给存在的表增加主键的约束:

alter table stu_cour add constraint stu_cour_stu_id_cour_id_pk primary key(stu_id,cour_id);

alter table stu_cour modify(stu_id constraint stu_cour_stu_id_pk primary key);

alter table stu_cour drop primary key(stu_id);

3、唯一键(unique):

(1)单一唯一键:

键数据具有唯一性,允许null的重复;

create table unique_test(

c1 number(10) constraint unique_test_c1_pk primary key,

c2 number(10) constraint unique_test_c2_uk unique,

c3 number(10) constraint unique_test_c3_uk unique

);

(2)联合唯一键:

两个键联合起来数据具有唯一性,两个键分别可以重复;

两个键联合在一起数据可以都为null,允许重复;

两个键联合在一起数据不允许一边为null一边不为null的重复;

create table unique_test(

c1 number(10) constraint unique_test_c1_pk primary key,

c2 number(10),

c3 number(10),

constraint unique_test_c2_c3_uk unique(c2,c3)

);

4、非空键(not null):

(1)键数据不能出现null值,键数据可以重复;

create table not_null(

c1 number(10) constraint not_null_c1_pk primary key,

c2 number(10) not null,

c3 number(10) not null

);

alter table test modify(c1 null);

#修改列为not null;

5、条件约束(check):

(1)定义条件表达式,每个列值必须满足该条件;

(2)以下表达式不允许使用条件约束:

1)伪例:currval、nextval、level、rownum

2)函数:sysdate、uid、userenv

3)引用其它记录的其它值

(3)条件约束语句:

create table check_table (

c1 number(10) constraint check_table_c1_pk primary key,

c2 number(10) not null,

c3 number(10) not null,

constraint check_table_c2_c3_ck check ( ( c2+c3 ) > 100)

);

6、外键约束(foreign):

(1)外键约束的特点:

1)实现父子表的联系约束,父表被子表引用;

2)保证一对多的关系;

3)通过外键 fk 可以与同一张表的主键 pk 或唯一键 uk 建立引用的关系,也可以与不同表的 pk

或者是 uk 建立引用的关系;

4)外键的取值必须匹配父表中已有的值,外键取值为null(可重复)可以匹配父表中任何值;

5)关键字:

FOREIGN KEY:用表级约束定义外键时使用该关键字;

REFERENCES:表示引用父表中的某列;

ON DELETE CASCADE:级联删除,删除父表的记录前,先删除子表里的相关记录;

ON DELETE SET NULL:删除父表的记录前,先将子表中外键列的相关值置空;

(2)建立主表:

create table parent (

c1 number(10) constraint parent_c1_pk primary key

);

(3)建立子表:

create table child (

c1 number(10) constraint child_c1_pk primary key,

c2 number(10) not null,

/*这里可以不写not null,因为建立外键后null在主表中找不相关的记录*/

constraint child_c2_fk foreign key(c2) references parent(c1)

);

(4)删表操作:

1)

插数据时,先插主表,再插子表;删数据时先删子表,再删父表;

如果使用 drop table cost purge; 命令直接删表会因父表和子表存在引用关系而无法删除,如果想要去除关系使用如下命令:

drop table cost cascade constraint purge;

#去除级联约束,先删除子表的约束再删主表;

分步操作:alter table child drop constraint child_c2_fk; drop table parent;

2)在建表的时候指定当删除父表时子表该做什么:

ON DELETE CASCADE:级联删除,删除父表的记录前,先删除子表里的相关记录;

ON DELETE SET NULL:删除父表的记录前,先将子表中外键列的相关值置空;

(5)建表:

create table cost(

cost_id number(4) constraint cost_cost_id_pk primary key,

cost_name varchar2(50) not null,

cost_base_durattion number(10),

cost_base_cost number(7,2),

cost_unit_cost number(7,4),

cost_status char(1),

constraint cost_cost_status_ck check( cost_status in(0,1)),

cost_descr varchar2(100)

);

desc cost;

(6)小结:

1)pk和uk的区别是对待null上的不同;

2)pk是uk和not null的结合;

3)pk一张表只有一个,uk和not null 一张表可以有多个;

4)用户下不同表的约束名不可以重(用户名+约束名),不同表的列名可以重(用户名+表名+列名);

5)一个用户可以选多个服务,一个服务只能有一个用户;

4、oracle表操作的更多相关文章

  1. Oracle 表操作

    表操作 复制表结构和数据 CREATE TABLE table_name AS SELECT * FROM old_table_name; 复制表结构 CREATE TABLE table_name ...

  2. Oracle表操作 (未完待续)

    1. Oracle 中将一个表中数据导入到另外一个表的方法 insert into scd_data_201007 select * from analog_data_201007 ; 2. 纵表转换 ...

  3. Oracle 表操作(转)

    1.增加新字段:alter table table_name add (name varchar(20) default 'http://www.zangjing.net/');. 2.修改表字段:a ...

  4. Oracle表操作-创建及增删改查

    数据类型: 1.CHAR:定长字符类型,默认长度是1,最长不超过2000字节. 2.CARCHAR2(length):可变字符类型,默认长度是1,最长不超过4000字符. 3.NUMBER(P,S): ...

  5. Oracle创表操作记录

    Oracle表操作 --主键,复合主键 create table example (id number primary key, name varchar2(20)); create table ex ...

  6. oracle学习操作(1)

    一.oracle表及表空间: 1.查看用户.用户表空间等,需要sysdba登陆: select username, default_tablespace from dba_users;   2.一个数 ...

  7. Oracle 数据库基本操作——实用手册、表操作、事务操作、序列

    目录: 0. 参考链接与参考手册1. oracle 实用(常用操作)指令2. 数据库基本操作语法 a) 表操作 1)创建表 2)更新表 3)删除表 4)查询 b) 事务操作 c) 序列操作 1)创建序 ...

  8. Oracle表空间和表的常用操作指令

    查看端口号指令 netstat –a 设置: set pagesize 100; //设置每页显示的行数set linesize 200; //设置每页显示的字符数 空格也算col 列名A for a ...

  9. ORACLE表空间操作实例

    本文主要介绍oracle表空间常见的操作实例,包括创建.查询.增加.删除.修改.表空间和数据文件常用的数据字典和动态性能视图包括v$dbfile.v$datafile.v$tempfile.dba_s ...

随机推荐

  1. Ubuntu 20.04 配置多网卡链路聚合

    Ubuntu 20.04 配置多网卡链路聚合 多网卡IP配置 首先查看网卡信息 root@it:~# ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65 ...

  2. WORD表格中的文字总是靠上居中不了

    WORD表格中的文字总是靠上居中不了 将表格选中 然后,点击格式工具栏里的格式(第一个项目)右侧的小三角(通常显示为正文),选择清除格式,然后,再用表格与边框工具栏中的居中功能设置居中就可以了 将表格 ...

  3. window location href is not a function(Day_36)

    报window location href is not a function错误的解决方案: 原因: JS报错是由于写法问题或浏览器不兼容导致的,具体解决方法如下: 原来报错的写法: window. ...

  4. C#中的数据结构

    Array 连续性的内存空间 快速定位查找元素,随机访问性强,查找效率高 已知的统一的元素类型,减小运行时开销 固定长度,不能再新增元素 ArrayList 连续性的内存空间 快速定位查找元素,随机访 ...

  5. Nextcloud 使用教程

    一.简介 Nextcloud是一个网盘式文件管理系统,多用户权限管理,多客户端,使用简单.可在浏览器中运行,也可下客户端,不论使用哪种方式运行,使用教程都是一样的. 只是在客户端中运行时能及时收到相应 ...

  6. 《MySQL面试小抄》查询缓存机制终面

    <MySQL面试小抄>查询缓存机制终面 我是肥哥,一名不专业的面试官! 我是囧囧,一名积极找工作的小菜鸟! 囧囧表示:小白面试最怕的就是面试官问的知识点太笼统,自己无法快速定位到关键问题点 ...

  7. 面试侃集合 | SynchronousQueue非公平模式篇

    面试官:好了,你也休息了十分钟了,咱们接着往下聊聊SynchronousQueue的非公平模式吧. Hydra:好的,有了前面公平模式的基础,非公平模式理解起来就非常简单了.公平模式下,Synchro ...

  8. 用TVM在硬件平台上部署深度学习工作负载的端到端 IR 堆栈

    用TVM在硬件平台上部署深度学习工作负载的端到端 IR 堆栈 深度学习已变得无处不在,不可或缺.这场革命的一部分是由可扩展的深度学习系统推动的,如滕索弗洛.MXNet.咖啡和皮托奇.大多数现有系统针对 ...

  9. Halide应用开发

    Halide应用开发 1. 基本原理 1.1.介绍 随着人工智能的普及,深度学习网络的不断涌现,为了让各硬件(CPU, GPU, NPU,...)能够支持深度学习应用,各硬件芯片需要软件库去支持高性能 ...

  10. ffmpeg architecture(中)

    ffmpeg architecture(中) 艰苦学习FFmpeg libav 您是否不奇怪有时会发出声音和视觉? 由于FFmpeg作为命令行工具非常有用,可以对媒体文件执行基本任务,因此如何在程序中 ...