表管理

新建表

语法

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. JS移动端适配(自适应)

    var html = document.querySelector('html'); changeRem(); window.addEventListener('resize', changeRem) ...

  2. angularjs通过ng-bind-html指令和$sce服务绑定html

    代码: <!doctype html> <html lang="en"> <head> <meta charset="UTF-8 ...

  3. 斯坦福机器学习课程 Exercise 习题二

    Exercise 2: Linear Regression 话说LaTex用起来好爽 Matlab代码 迭代并且画出拟合曲线 Linear regression 公式如下 hθ(x)=θTx=∑i=0 ...

  4. 设计模式(二十)Flyweight模式

    当使用new关键字生成类的实例时,需要给其分配足够的内存空间.当程序中需要大量对象时,如果都是用new关键字来分配内存,将会消耗大量内存空间.Flyweight模式就是尽量避免new出实例,而是通过尽 ...

  5. C和C++中的引用传递

    两种引用传递的定义方式 第一种 #include<stdio.h> void changeValue(int *a); int main(){ int a =1; changeValue( ...

  6. python中的列表list练习

    列表: 1.增 1.1 append,在列表的末尾追加元素,使用方法:list.append('元素') li = ['alex', 'wusir', 'eric', 'rain', 'alex'] ...

  7. Java自动化测试框架-07 - TestNG之Factory篇 - 欢快畅游梦幻工厂(详细教程)

    简介 最近忙着装修博客园,没时间更新文章,今天终于抽出时间把上次写的一半的文章给写完了,新的博客园风格,希望大家喜欢.今天继续介绍testng的相关知识--工厂. 工厂允许你动态的创建测试.例如,假设 ...

  8. VMware问题--无法获得 VMCI 驱动程序的版本: 句柄无效

    关于VMware问题:无法获得 VMCI 驱动程序的版本: 句柄无效.驱动程序“vmci.sys”的版本不正确 问题截图: 解决 1.根据配置文件路径找到对应的.vmx文件: 2.用编辑器打开,找到v ...

  9. 【XSY2344】K-th String

    Description Alice有 n(n≤26) 张牌,牌上分别标有前 n 个英文小写字母.例如,如果 n=3 ,则Alice有3张牌,分别标有"a", "b&quo ...

  10. thinkpad p1 gen2 扬声器音量异常问题解决过程

    在弹出 "用户帐户控制" 对话框时的声音明显不对,测试后发现规律:音量在30以内,1分钟内扬声器无声音发出,运行ccleaner弹出 "用户帐户控制" 对话框, ...