oracle表结构
表管理
新建表
语法
create table 表名
(
列名1 类型(长度),
列名2 类型(长度),
列名3 类型(长度)
);
create table:关键字,建表 后跟新建表的表名,表名长度有限制,不超过32位,以英文单词或者缩写组成,单词之间用下划线连接- 表名必须是数据库中唯一的,重复会报错.
- 列名:英文单词缩写组成,长度不超过30位,不能以数字,下划线或特殊字符开头.单词之间以下划线连接.
- 括号后须有分号结束;
SQL> create table stu_test
2 (
3 stu_id number(6),
4 stu_name varchar2(50),
5 stu_age number(3)
6 );
表已创建。
添加注释
SQL> comment on table stu_test is '学生表';
注释已创建。
SQL> comment on column stu_test.stu_id is '学生编号';
注释已创建。
SQL> comment on column stu_test.stu_name is '学生姓名';
注释已创建。
SQL> comment on column stu_test.stu_age is '学生年龄';
注释已创建。
- comment on table:关键字,即表的注释
- comment on column:关键字,列的注释
复制表
复制表结构,不包含数据
复制表结构,不包含数据,也不包含索引,约束,注释
SQL> create table stu_test1 as
2 select stu_id,stu_name from stu_test
3 where 1=2;
表已创建。
复制表结构,包含数据
复制表结构,并包含数据,但不包括索引,约束,注释
SQL> create table stu_test2 as
2 select stu_id,stu_name from stu_test
3 where 1=1;
表已创建。
新建分区表
- 分区原则:当数据量超过2000W时,可以考虑使用分区表
| 分区类型 | 类型描述 |
|---|---|
| range: | 按照范围分区,通常是按照时间字段分区,比如申请时间,入职时间 |
| list: | 按照分布分区,比如身份证号码最后一位 |
| hash: | 按照hash值分配分区,不保证是均匀分配 |
range分区范例
SQL> create table emp_info
2 (
3 emp_no number(10),
4 join_date date
5 )
6 partition by range(join_date)
7 (
8 partition P1 values less than(to_date('20191120','YYYYMMDD')),
9 partition P2 values less than(to_date('20191121','YYYYMMDD')),
10 partition P3 values less than(to_date('20191122','YYYYMMDD')),
11 partition P_MAX values less than(maxvalue)
12 );
表已创建。
| 关键字 | 描述 |
|---|---|
| partition by | 指明是分区表,range确定分区方式,join_date是分区键,必须是表中的一列 |
| partition | 后跟分区名字,分区名字必须全库唯一,不能重复 |
| values less than | 即当分区键的值小于其后的值时,数据落入本分区 |
| maxvalue | 用于最大分区 |
当插入数据的join_date时间日期小于20日,放入p1分区
当时间日期大于22放入P_MAX
list分区范例
SQL> create table LIST_TAB_TEST
2 (
3 id_no number(10),
4 partition_id varchar2(2)
5 )
6 partition by list(partition_id)
7 (
8 partition P_0 values('0'),
9 partition P_1 values('1'),
10 partition P_2 values('2'),
11 partition P_default values(default)
12 );
表已创建。
| 关键字 | 描述 |
|---|---|
| values: | 即值是. 表示当分区键的值是其后的值时,数据落入本分区 |
| default: | 关键字,默认值,当分区键的值不在之前分区值内时,数据落入本分区 |
查询每个分区的数据
语法
select * from 表名 partition(分区名);
SQL> insert into emp_info
2 values(1,sysdate);
已创建 1 行。
SQL> select * from emp_info partition(p3);
EMP_NO JOIN_DATE
---------- --------------
1 21-11月-19
SQL> insert into list_tab_test
2 values(1,6);
已创建 1 行。
SQL> select * from list_tab_test partition(P_default);
ID_NO PART
---------- ----
1 6
查看分区建select * from dba_part_key_columns where owner='SCOTT';
临时表
oracle的临时表创建完就是真实存在的,无需每次都创建
1提交删除数据
语法
create global temporary table 表名
(
列1 类型(长度),
列2 类型(长度),
列3 类型(长度)
) on commit delete rows;
范例
SQL> create global temporary table temp_tab1
2 (
3 colu_1 number(5),
4 colu_2 date
5 ) on commit delete rows;
表已创建。
SQL> insert into temp_tab1 values(1,sysdate);
已创建 1 行。
SQL> select * from temp_tab1;
COLU_1 COLU_2
---------- --------------
1 25-11月-19
SQL> commit;
提交完成。
SQL> select * from temp_tab1;
未选定行
2关闭窗口删除数据
语法
create global temporary table 表名
(
列1 类型(长度),
列2 类型(长度),
列3 类型(长度)
) on commmit preserve rows;
范例
SQL> create global temporary table temp_tab2
2 (
3 colu_1 date,
4 colu_2 varchar2(10)
5 ) on commit preserve rows;
表已创建。
SQL> insert into temp_tab2 values(sysdate,'logs');
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from temp_tab2;
COLU_1 COLU_2
-------------- --------------------
25-11月-19 logs
SQL> conn scott/scott;
已连接。
SQL> select * from temp_tab2;
未选定行
删除表
SQL> drop table emp_info;
表已删除。
SQL> drop table list_tab_test;
表已删除。
增加列
SQL> create table student6
2 (
3 id number primary key
4 );
表已创建。
增加单列
SQL> alter table student6
2 add s_mpno number(6);
表已更改。
增加多列
SQL> alter table student6
2 add(s_name varchar2(50),s_deptno number(2));
表已更改。
修改表列的名称和属性
修改表名和列名
修改表名
SQL> alter table student6 rename to student_6;
表已更改。
修改列名
SQL> alter table student_6 rename column id to s_id;
表已更改。
修改列的属性
将s_id的number改为number(6)
SQL> alter table student_6 modify s_id number(6);
表已更改。
将s_mpno设置为唯一的,s_name设置为非空的
SQL> alter table student_6
2 modify(s_mpno number(6) unique,
3 s_name varchar2(50) not null);
表已更改。
已有数据情况下,更改列的属性
将stu_info表的stu_no列属性由number改为varchar2
SQL> select * from stu_info;
STU_NO STU_NAME STU_AGE
------- -------- ---
1 张三 50
2 李四 50
3 王五 51
方法1,将stu_no列清空,然后修改类型,最后数据恢复
第一步,清空数据,但数据不能丢失
SQL> alter table stu_info add stu_no1 number(20);
表已更改。
SQL> update stu_info set stu_no1=stu_no;
已更新3行。
SQL> update stu_info set stu_no=null;
已更新3行。
SQL> commit;
提交完成。
SQL> select * from stu_info;
STU_NO STU_NAME STU_AGE STU_NO1
---------- -------------- -------------- ----------
张三 50 1
李四 50 2
王五 51 3
第二步,修改类型
SQL> alter table stu_info modify stu_no varchar(10);
表已更改。
第三步,将数据恢复,并将新增列删除
SQL> update stu_info set stu_no=stu_no1;
已更新3行。
SQL> alter table stu_info drop column stu_no1;
表已更改。
删除列
删除单列
SQL> alter table stu_info drop column stu_no;
表已更改。
删除多列
SQL> alter table student_6 drop(s_mpno,s_deptno);
表已更改。
oracle表结构的更多相关文章
- oracle表结构和表内容差异比对
oracle表结构和表内容差异比对 oracle中有三种集合操作,他们会把左边和右边的select 结果集进行集合操作. union 并集 intersect 交集 minus 差集 假设有如下两张表 ...
- oracle表结构和表内容差异比对【原】
oracle表结构和表内容差异比对 oracle中有三种集合操作,他们会把左边和右边的select 结果集进行集合操作. union 并集 intersect 交集 minus 差集 假设有如下两张表 ...
- Oracle 表结构、索引以及分区信息查询
Oracle 表结构.索引以及分区信息查询 /* 获取表:*/ select table_name from user_tables; --当前用户的表 select table_name from ...
- Oracle表结构转换SqlSERVER表结构 脚本
在审计工作中,有时需要将Oracle的表结构修改后再SqlSERVER中创建表结构,然后将数据导入到SqlSERVER中,在修改表结构的过程中方法狠多.手工修改,最蠢的方法,或者用工具UE批量修改,还 ...
- oracle表结构和数据导出时的一些勾选项说明
使用pl/sql developer导出oracle数据库的表结构和表数据时,有一些勾选项供用户选择,需要用户根据实际情况进行勾选或取消. 导出方法如下:一.只导出表结构1.使用pl/sql deve ...
- (Oracle)误删oracle表结构恢复
在操作数据库时,我们常常会不小心把表结构删除了.有时候建表很麻烦大到100多个字段,而又找不到当初的建表语句.其实这时候不用担心,oracle和咱们widows一样,他也有个回收站,只要你没有清除回收 ...
- 【oracle】oracle表结构导出到Word
因为需要写数据库文档,所以需要把数据库里边的表结构在word中用表格列出来,之前一直用powerdesigner,感觉有些麻烦,后来在网上找到了一段sql语句,经测试完全符合我的需求,不敢独享,语句如 ...
- plsql 工具怎样导出 oracle 表结构
一.双击 plsql 工具,输入登陆用户.登陆密码以及登陆数据库名称,如下图: 二.菜单 Tools --> Export User Objects...,如下图: 三.进入导出界面后,可以选择 ...
- Oracle表结构转Mysql表结构
1. fnc_table_to_mysql 主体程序 create or replace function fnc_table_to_mysql ( i_owner in string, i_tabl ...
随机推荐
- 疯狂Java:突破程序员基本功的16课-李刚编著 学习笔记(未完待续)
突破程序员基本功(16课) 数组 静态语言: 在编译的时候就能确定数据类型的语言,大多静态语言要求在使用变量之前必须声明数据类型(少数具有强推导能力的现代语言不用) 动态语言: 在程序运行时确定数据类 ...
- 最简破解-java代码热加载热部署IDEA插件JRebel
如果经济实力允许的话,还是建议大家去购买收费版.支持原创作者,才能有更好的产品出现. 一.Jrebel插件介绍 JRebel一款帮助我们在开发过程中实现热加载的插件,目前来说,在IDEA中实现热加载最 ...
- unityevent与持续按键触发
上一篇中提到一种鼠标按下时的事件触发,即采用eventtrigger设定pointerdown和pointerup并绑定相应事件.但是若要实现持续按键则需要对绑定的每个方法都添加实现持续按键方法.所以 ...
- BFM模型介绍及可视化实现(C++)
BFM模型介绍及可视化实现(C++) BFM模型基本介绍 Basel Face Model是一个开源的人脸数据库,其基本原理是3DMM,因此其便是在PCA的基础上进行存储的. 目前有两个版本的数据库( ...
- mysql实现海量数据的存储、访问的解决方案
mysql实现海量数据的存储.访问的解决方案: mysql数据库水平切分的实现原理可分为以下几个:分库,分表,主从,集群,负载均衡器等 第1章 引言 随着互联网应用的广泛普及,海量数据的存储和访问成为 ...
- Vue躬行记(5)——组件通信
组件之间除了保持独立之外,还需要相互通信,本章将介绍几种通信的方式. 一.直接访问 Vue提供了三个实例属性,可直接访问父组件.子组件和根实例,如下所列. (1)$parent:父组件. (2)$ro ...
- 2018.8.9 python中的动态传参与命名空间
主要内容: 1.函数参数 ----动态传参 2.名称空间与作用域 3.函数的嵌套 4.global,nonlocal关键字 一.函数参数 ------动态传参 形参的第三种:动态传参 动态传参分为两种 ...
- 面向对象的7个设计原则->开车理解->贴近生活
设计模式在我们的开发中是不可或缺的一部分,很多人会说,我没用那些设计模式啊,我也开发的挺好的,其实不然,我们在开发中都用到了这些设计模式,只不过我们并没有在意这些,今天我就用开车的方法来解释一下我们的 ...
- 使用ASP.NET Core 3.x 构建 RESTful API - 1.准备工作
以前写过ASP.NET Core 2.x的REST API文章,今年再更新一下到3.0版本. 先决条件 我在B站有一个非常入门的ASP.NET Core 3.0的视频教程,如果您对ASP.NET Co ...
- MIT线性代数:18.行列式及其特性