語法數據庫
create table 表名 ( 列名1 類型(長度), 列名2 類型(長度), 列名3 類型(長度) );
create table
:關鍵字,建表 後跟新建表的表名,表名長度有限制,不超過32位,以英文單詞或者縮寫組成,單詞之間用下劃線鏈接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 '學生年齡'; 註釋已建立。
複製表結構,不包含數據,也不包含索引,約束,註釋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; 表已建立。
分區類型 | 類型描述 |
---|---|
range: | 按照範圍分區,一般是按照時間字段分區,好比申請時間,入職時間 |
list: | 按照分佈分區,好比身份證號碼最後一位 |
hash: | 按照hash值分配分區,不保證是均勻分配 |
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索引
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
第一步,清空數據,但數據不能丟失
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); 表已更改。