表管理

新建表

语法

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. Solr分片机制以及Solrcloud搭建及分片操作

    Solr分片描述 分片是集合的逻辑分区,包含集合中文档的子集,这样集合中的每个文档都正好包含在一个分片中.集合中包含每个文档的分片取决于集合的整体"分片"策略. 当您的集合对于一个 ...

  2. 部署acfs笔记

    acfs问题分析 环境描述 某电力项目创建了两个磁盘组,分别是OGGEXT和OGGREP,利用这两个磁盘组划分了两个acfs文件系统,之后,cloud监控就一直在报磁盘空间不足,但是这两个文件系统的使 ...

  3. javascript严格模式的影响

    针对js严格模式会报错的编码操作进行了整理,避免不严谨的代码习惯,面向未来编程(es6+) 变量 1.定义八进制格式的数字 2.不带var的变量定义--包括函数体内的 3.对变量的delete操作-- ...

  4. LeetCode 十月份题目汇总

    开源地址:点击该链接 前言 十月份共有60道题目,全部属于 Easy 难度的,所以公众号中分享出来的并不多,只是挑了一些感觉还可以的才分享了出来,这60道题目我按照不同类别进行了分类整理,所有源码以及 ...

  5. 面试题-javascript-面向对象编程

    笔者在某次笔试中遇到这个题:印象很深. function ClassA() { var value=4; this.getValue= function() { return value; } thi ...

  6. srync:@ERROR: auth failed on module tee 的解决办法分析

    首先:检查server端和client端的用户名和密码确认都无误: 然后:检查了服务器端/etc/rsyncd.conf 配置文件未发现异常, 再次:通过配置文件找到了log存放目录 $ cat /e ...

  7. Nexus 离线更新中央仓库索引

    nexus可以在线更新中央仓库索引,但是更新速度慢,而且很有可能下载的索引不全.下面介绍一种离线更新中央仓库索引的方式,速度快并且可靠. 1.访问http://repo.maven.apache.or ...

  8. Ubuntu 10.04——boa服务器的搭建

     声明:自从第一次发表博文不知不觉过去了好久了,非常抱歉没能把自己的东西分享出来,但是由于上家公司本月初裁员,所以致使学的新东西成了半成品,无奈又换了一家,目前已工作三周了,自己也很想写博文分享知识, ...

  9. Django学习day8——admin后台管理和语言适应

    Django最大的优点之一,就是体贴的为你提供了一个基于项目model创建的一个后台管理站点admin.这个界面只给站点管理员使用,并不对大众开放. 1. 创建管理员用户 (django) E:\Dj ...

  10. [考试反思]1104csp-s模拟测试100: 终结

    这么好的整数场,就终结了我连续莫名考好的记录. 功德圆满了... 还是炸了啊.而且炸的还挺厉害(自己又上不去自己粘的榜单啦) 说实在的这场考试做的非常差劲.虽说分数不算特别低但是表现是真的特别差. T ...