表管理

新建表

语法

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表结构的更多相关文章

  1. oracle表结构和表内容差异比对

    oracle表结构和表内容差异比对 oracle中有三种集合操作,他们会把左边和右边的select 结果集进行集合操作. union 并集 intersect 交集 minus 差集 假设有如下两张表 ...

  2. oracle表结构和表内容差异比对【原】

    oracle表结构和表内容差异比对 oracle中有三种集合操作,他们会把左边和右边的select 结果集进行集合操作. union 并集 intersect 交集 minus 差集 假设有如下两张表 ...

  3. Oracle 表结构、索引以及分区信息查询

    Oracle 表结构.索引以及分区信息查询 /* 获取表:*/ select table_name from user_tables; --当前用户的表 select table_name from ...

  4. Oracle表结构转换SqlSERVER表结构 脚本

    在审计工作中,有时需要将Oracle的表结构修改后再SqlSERVER中创建表结构,然后将数据导入到SqlSERVER中,在修改表结构的过程中方法狠多.手工修改,最蠢的方法,或者用工具UE批量修改,还 ...

  5. oracle表结构和数据导出时的一些勾选项说明

    使用pl/sql developer导出oracle数据库的表结构和表数据时,有一些勾选项供用户选择,需要用户根据实际情况进行勾选或取消. 导出方法如下:一.只导出表结构1.使用pl/sql deve ...

  6. (Oracle)误删oracle表结构恢复

    在操作数据库时,我们常常会不小心把表结构删除了.有时候建表很麻烦大到100多个字段,而又找不到当初的建表语句.其实这时候不用担心,oracle和咱们widows一样,他也有个回收站,只要你没有清除回收 ...

  7. 【oracle】oracle表结构导出到Word

    因为需要写数据库文档,所以需要把数据库里边的表结构在word中用表格列出来,之前一直用powerdesigner,感觉有些麻烦,后来在网上找到了一段sql语句,经测试完全符合我的需求,不敢独享,语句如 ...

  8. plsql 工具怎样导出 oracle 表结构

    一.双击 plsql 工具,输入登陆用户.登陆密码以及登陆数据库名称,如下图: 二.菜单 Tools --> Export User Objects...,如下图: 三.进入导出界面后,可以选择 ...

  9. Oracle表结构转Mysql表结构

    1. fnc_table_to_mysql 主体程序 create or replace function fnc_table_to_mysql ( i_owner in string, i_tabl ...

随机推荐

  1. 文本查重算法SimHash

    1.介绍 爬虫采集了大量的文本数据,如何进行去重?可以使用文本计算MD5,然后与已经抓取下来的MD5集合进行比较,但这种做法有个问题,文本稍有不同MD5值都会大相径庭, 无法处理文本相似问题.另一种方 ...

  2. c# winform用sharpGL(OpenGl)解析读取3D模型obj

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11783026.html 自己写了个简单的类读取解析obj模型,使用导入类,然后new个对象,在 ...

  3. Oracle ADG环境搭建

    部署 环境介绍 1,软件安装前基础部署 (两台做同样操作) 1.1,关闭selinux和防火墙 因为centos7里面没有/etc/sysconfig/iptables这个配置文件所以我们首先用yum ...

  4. Oracle运行脚本:exp,hist 和 err

    上一篇我们讲到:首次使用rman备份数据库时,为了安全起见,我们应将整个数据库exp出来. 显而易见,每次都手敲exp代码是不可取的. ----费时费力还不规范! 为此,我们可以写一个exp脚本,之后 ...

  5. ArcGIS Engine空间分析之拓扑分析的实现

    简单介绍: 拓扑学是一门研究几何图形位置关系的科学. GIS所关注的拓扑主要集中在拓扑关系——存在于地理实体间的拓扑关系. 拓扑关系在GIS中起着描述两个地理实体的相对空间位置的重要作用.它是GIS空 ...

  6. 使用position设置经典的网站前端结构

    能脱离文档流的设置: float:left/right position:absolute; 绝对定位 position:fixed; 固定定位 //搞清楚position的属性值的意思就容易明白 使 ...

  7. 监控tomcat,自动启动

    tomcatID=`ps -ef |grep tomcat |grep -v 'grep'|awk '{print $2}'`  tomcatCount=`ps -ef|grep tomcat |gr ...

  8. 获取Ubuntu的Docker CE

    Docker文档 Docker提供了一种在容器中运行安全隔离的应用程序的方法,它与所有依赖项和库打包在一起. 获取Ubuntu的Docker CE 一.OS要求 需要以下Ubuntu版本的x86_64 ...

  9. 【倒腾HTTPS】Nginx for Docker自签名SSL证书

    前言 合格的web程序员, 必须能自由在 IIS. Nginx. Nginx for Docker上配置Https服务, 博客最近将专题记录 Https  &   Hsts 如何申请适用于生产 ...

  10. Vue的指令以及组件化开发

    一. 自定义指令 如何: 1. 创建指令 Vue.directive("指令名",{ inserted(elem){//指令所在的元素被加载到DOM树上后自动执行指令 //elem ...