表管理

新建表

语法

  1. create table 表名
  2. (
  3. 列名1 类型(长度),
  4. 列名2 类型(长度),
  5. 列名3 类型(长度)
  6. );
  • create table:关键字,建表 后跟新建表的表名,表名长度有限制,不超过32位,以英文单词或者缩写组成,单词之间用下划线连接
  • 表名必须是数据库中唯一的,重复会报错.
  • 列名:英文单词缩写组成,长度不超过30位,不能以数字,下划线或特殊字符开头.单词之间以下划线连接.
  • 括号后须有分号结束;
  1. SQL> create table stu_test
  2. 2 (
  3. 3 stu_id number(6),
  4. 4 stu_name varchar2(50),
  5. 5 stu_age number(3)
  6. 6 );
  7. 表已创建。

添加注释

  1. SQL> comment on table stu_test is '学生表';
  2. 注释已创建。
  3. SQL> comment on column stu_test.stu_id is '学生编号';
  4. 注释已创建。
  5. SQL> comment on column stu_test.stu_name is '学生姓名';
  6. 注释已创建。
  7. SQL> comment on column stu_test.stu_age is '学生年龄';
  8. 注释已创建。
  • comment on table:关键字,即表的注释
  • comment on column:关键字,列的注释

复制表

复制表结构,不包含数据

复制表结构,不包含数据,也不包含索引,约束,注释

  1. SQL> create table stu_test1 as
  2. 2 select stu_id,stu_name from stu_test
  3. 3 where 1=2;
  4. 表已创建。
复制表结构,包含数据

复制表结构,并包含数据,但不包括索引,约束,注释

  1. SQL> create table stu_test2 as
  2. 2 select stu_id,stu_name from stu_test
  3. 3 where 1=1;
  4. 表已创建。

新建分区表

  • 分区原则:当数据量超过2000W时,可以考虑使用分区表
分区类型 类型描述
range: 按照范围分区,通常是按照时间字段分区,比如申请时间,入职时间
list: 按照分布分区,比如身份证号码最后一位
hash: 按照hash值分配分区,不保证是均匀分配

range分区范例

  1. SQL> create table emp_info
  2. 2 (
  3. 3 emp_no number(10),
  4. 4 join_date date
  5. 5 )
  6. 6 partition by range(join_date)
  7. 7 (
  8. 8 partition P1 values less than(to_date('20191120','YYYYMMDD')),
  9. 9 partition P2 values less than(to_date('20191121','YYYYMMDD')),
  10. 10 partition P3 values less than(to_date('20191122','YYYYMMDD')),
  11. 11 partition P_MAX values less than(maxvalue)
  12. 12 );
  13. 表已创建。
关键字 描述
partition by 指明是分区表,range确定分区方式,join_date是分区键,必须是表中的一列
partition 后跟分区名字,分区名字必须全库唯一,不能重复
values less than 即当分区键的值小于其后的值时,数据落入本分区
maxvalue 用于最大分区

当插入数据的join_date时间日期小于20日,放入p1分区

当时间日期大于22放入P_MAX

list分区范例

  1. SQL> create table LIST_TAB_TEST
  2. 2 (
  3. 3 id_no number(10),
  4. 4 partition_id varchar2(2)
  5. 5 )
  6. 6 partition by list(partition_id)
  7. 7 (
  8. 8 partition P_0 values('0'),
  9. 9 partition P_1 values('1'),
  10. 10 partition P_2 values('2'),
  11. 11 partition P_default values(default)
  12. 12 );
  13. 表已创建。
关键字 描述
values: 即值是. 表示当分区键的值是其后的值时,数据落入本分区
default: 关键字,默认值,当分区键的值不在之前分区值内时,数据落入本分区

查询每个分区的数据

语法

  1. select * from 表名 partition(分区名);
  1. SQL> insert into emp_info
  2. 2 values(1,sysdate);
  3. 已创建 1 行。
  4. SQL> select * from emp_info partition(p3);
  5. EMP_NO JOIN_DATE
  6. ---------- --------------
  7. 1 21-11月-19
  1. SQL> insert into list_tab_test
  2. 2 values(1,6);
  3. 已创建 1 行。
  4. SQL> select * from list_tab_test partition(P_default);
  5. ID_NO PART
  6. ---------- ----
  7. 1 6

查看分区建select * from dba_part_key_columns where owner='SCOTT';

临时表

oracle的临时表创建完就是真实存在的,无需每次都创建

1提交删除数据

语法

  1. create global temporary table 表名
  2. (
  3. 1 类型(长度),
  4. 2 类型(长度),
  5. 3 类型(长度)
  6. ) on commit delete rows;

范例

  1. SQL> create global temporary table temp_tab1
  2. 2 (
  3. 3 colu_1 number(5),
  4. 4 colu_2 date
  5. 5 ) on commit delete rows;
  6. 表已创建。
  1. SQL> insert into temp_tab1 values(1,sysdate);
  2. 已创建 1 行。
  3. SQL> select * from temp_tab1;
  4. COLU_1 COLU_2
  5. ---------- --------------
  6. 1 25-11月-19
  1. SQL> commit;
  2. 提交完成。
  3. SQL> select * from temp_tab1;
  4. 未选定行

2关闭窗口删除数据

语法

  1. create global temporary table 表名
  2. (
  3. 1 类型(长度),
  4. 2 类型(长度),
  5. 3 类型(长度)
  6. ) on commmit preserve rows;

范例

  1. SQL> create global temporary table temp_tab2
  2. 2 (
  3. 3 colu_1 date,
  4. 4 colu_2 varchar2(10)
  5. 5 ) on commit preserve rows;
  6. 表已创建。
  7. SQL> insert into temp_tab2 values(sysdate,'logs');
  8. 已创建 1 行。
  1. SQL> commit;
  2. 提交完成。
  3. SQL> select * from temp_tab2;
  4. COLU_1 COLU_2
  5. -------------- --------------------
  6. 25-11月-19 logs
  1. SQL> conn scott/scott;
  2. 已连接。
  3. SQL> select * from temp_tab2;
  4. 未选定行

删除表

  1. SQL> drop table emp_info;
  2. 表已删除。
  3. SQL> drop table list_tab_test;
  4. 表已删除。

增加列

  1. SQL> create table student6
  2. 2 (
  3. 3 id number primary key
  4. 4 );
  5. 表已创建。

增加单列

  1. SQL> alter table student6
  2. 2 add s_mpno number(6);
  3. 表已更改。

增加多列

  1. SQL> alter table student6
  2. 2 add(s_name varchar2(50),s_deptno number(2));
  3. 表已更改。

修改表列的名称和属性

修改表名和列名

修改表名

  1. SQL> alter table student6 rename to student_6;
  2. 表已更改。

修改列名

  1. SQL> alter table student_6 rename column id to s_id;
  2. 表已更改。

修改列的属性

将s_id的number改为number(6)

  1. SQL> alter table student_6 modify s_id number(6);
  2. 表已更改。

将s_mpno设置为唯一的,s_name设置为非空的

  1. SQL> alter table student_6
  2. 2 modify(s_mpno number(6) unique,
  3. 3 s_name varchar2(50) not null);
  4. 表已更改。

已有数据情况下,更改列的属性

将stu_info表的stu_no列属性由number改为varchar2

  1. SQL> select * from stu_info;
  2. STU_NO STU_NAME STU_AGE
  3. ------- -------- ---
  4. 1 张三 50
  5. 2 李四 50
  6. 3 王五 51
方法1,将stu_no列清空,然后修改类型,最后数据恢复

第一步,清空数据,但数据不能丢失

  1. SQL> alter table stu_info add stu_no1 number(20);
  2. 表已更改。
  3. SQL> update stu_info set stu_no1=stu_no;
  4. 已更新3行。
  5. SQL> update stu_info set stu_no=null;
  6. 已更新3行。
  7. SQL> commit;
  8. 提交完成。
  9. SQL> select * from stu_info;
  10. STU_NO STU_NAME STU_AGE STU_NO1
  11. ---------- -------------- -------------- ----------
  12. 张三 50 1
  13. 李四 50 2
  14. 王五 51 3

第二步,修改类型

  1. SQL> alter table stu_info modify stu_no varchar(10);
  2. 表已更改。

第三步,将数据恢复,并将新增列删除

  1. SQL> update stu_info set stu_no=stu_no1;
  2. 已更新3行。
  3. SQL> alter table stu_info drop column stu_no1;
  4. 表已更改。

删除列

删除单列

  1. SQL> alter table stu_info drop column stu_no;
  2. 表已更改。

删除多列

  1. SQL> alter table student_6 drop(s_mpno,s_deptno);
  2. 表已更改。

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. 阿里云和微软共同开源的 OAM 对 Kubernetes 开发人员意味着什么?

    上周,微软和阿里巴巴共同推出了开放应用模型(OAM),用于定义部署在任何地方的应用模型的一种规范.Rudr是Microsoft基于Kubernetes环境的OAM标准实现. 我用了一个周末来了解OAM ...

  2. 致Java星球程序员兄弟们的一封信

    致Java星球程序员兄弟们的一封信 亲爱的Java星球的程序员兄弟们: 你们好!我是来自地球的一名Java程序员,首先我代表地球人对贵星球的高司令来到地球传授Java语言,造福了全人类,造福了整个地球 ...

  3. javadoc的使用

    在进行项目开发过程中,项目接口文档是很重要的一块内容,在java项目中我们可以用swagger,asciidoc,javadoc等方式来生产文档,而其中最基本的文档生成方式就是javadoc,它一般用 ...

  4. [2018-01-12] laravel--路由(路由与控制器)

    路由只用来接收请求 目前我们大致了解了laravel,在开始一个Http程序需要先定义路由.之前的例子中,我们的业务逻辑都是在路由里实现的,这对于简单的网站或web应用没什么问题,当我们需要扩大规模, ...

  5. Python实现王者荣耀小助手(一)

    简单来说网络爬虫,是指抓取万维网信息的程序或者脚本,Python在网络爬虫有很大优势,今天我们用Python实现获取王者荣耀相关数据,做一个小助手: 前期准备,环境搭建: Python2.7 sys模 ...

  6. Opencv python(3)| cv. VideoCapture.get() 参数介绍

    cv2.VideoCapture.get ()  的 (0-18)参数 cv2.VideoCapture.get(0)            视频文件的当前位置(播放)以毫秒为单位 cv2.Video ...

  7. 你了解MySQL中的日志吗?

    MySQL中有两类非常重要的日志,一类是redo log(重做日志),一类是bin log(归档日志) redo log 重做日志利用的,是MySQL中,常见的WAL技术,WAL技术的全程是:Writ ...

  8. python模块——socket

    实例一. server: #socket套接字(IP + 端口号)(qq,wechat 发送接收消息依靠socket模块),cs架构import socketserver = socket.socke ...

  9. 从多维卷积说起,比较CNN中的全连接和全卷积

    一幅图像里包含三个通道,分别是RGB通道.三通道在卷积时是通过累加三个卷积结果得到的. CNN中全连接层的卷积核大小是feature map的大小.比如feature是3*3的,那么该全连接层的卷积核 ...

  10. 在控制器中如何对frxml的控件初始化

    如果在控制器中实现Initializable这个接口,并重iInitializable这个方法 对于一个fxml文件来说它首先执行控制器的构造函数,这个时候它是无法对@FXML修饰的方法进行访问的,然 ...