oracle表結構

表管理

新建表

語法數據庫

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:關鍵字,列的註釋

複製表

複製表結構,不包含數據

複製表結構,不包含數據,也不包含索引,約束,註釋less

SQL> create table stu_test1 as
  2  select stu_id,stu_name from stu_test
  3  where 1=2;

表已建立。
複製表結構,包含數據

複製表結構,幷包含數據,但不包括索引,約束,註釋code

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: 關鍵字,默認值,當分區鍵的值不在以前分區值內時,數據落入本分區

查詢每一個分區的數據

語法hash

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';it

刪除表

SQL> drop table emp_info;
表已刪除。

SQL> drop table list_tab_test;
表已刪除。

增長列

SQL> create table student6
  2  (
  3  id number primary key
  4  );

表已建立。

增長單列io

SQL> alter table student6
  2  add s_mpno number(6);

表已更改。

增長多列table

SQL> alter table student6
  2  add(s_name varchar2(50),s_deptno number(2));

表已更改。

修改表列的名稱和屬性

修改表名和列名

修改表名class

SQL> alter table student6 rename to student_6;

表已更改。

修改列名test

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);

表已更改。
相關文章
相關標籤/搜索