表管理

新建表

语法

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. 哈夫曼树C++实现详解

    哈夫曼树的介绍 Huffman Tree,中文名是哈夫曼树或霍夫曼树,它是最优二叉树. 定义:给定n个权值作为n个叶子结点,构造一棵二叉树,若树的带权路径长度达到最小,则这棵树被称为哈夫曼树. 这个定 ...

  2. 用Python编写简单的发红包程序和计算器原理

    用Python编写简单的发红包程序: 第一种解法:数轴方法解决 import random def red_packet(money,num): money = money * 100 #将钱数转换成 ...

  3. 来玩一局CS吗?UE4射击游戏的独立服务器构建

    前言   根据UE4官方文档的介绍,UE4引擎在架构时就已经考虑到了多人游戏的情景,多人游戏基于客户端-服务器模式(CS模式).也就是说,会有一个服务器担当游戏状态的主控者,而连接的客户端将保持近似的 ...

  4. Java设计模式:23种设计模式

    1. 软件设计模式概述 2. GoF 的 23 种设计模式的分类和功能 3. UML中的类图及类图之间的关系 4. 开闭原则——面向对象设计原则 5. 里氏替换原则——面向对象设计原则 6. 依赖倒置 ...

  5. API gateway 之 kong 安装 (二)

    一.系统环境 [root@kong ~]# service iptables status iptables: Firewall is not running. [root@kong ~]# gete ...

  6. 关于self

    关于self 就像C++的this 但是不同之处是他不是关键字,只代表第一个参数,可以用任何一个普通变量代替 self在对象的方法中表示当前对象本身,如果通过对象调用一个方法,那么该对象会自动传入到当 ...

  7. MIT线性代数:18.行列式及其特性

  8. javascript创建一个基于数组的栈结构

    栈是一种遵从后进先出(LIFO)原则的有序集合.新添加或待删除的元素都保存在栈的同 一端,称作栈顶,另一端就叫栈底.在栈里,新元素都靠近栈顶,旧元素都接近栈底. 栈拥有以下方法: push(eleme ...

  9. 使用Typescript重构axios(十二)——增加参数

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

  10. Vmware虚拟机的安装

    Vmware WorkStation是一款桌面计算机虚拟软件,能够让用户在单一主机上同时运行多个不同的操作系统.每个虚拟操作系统的硬盘分区.数据配置都是独立的,同时又可以将多台虚拟机构建为一个局域网. ...