Oracle-創建新表,創建備份表,對表中插入多條數據


一、創建新表

0、基本語法

create table 表名稱

(
id varchar2(50) primary key ,
name char(200) not null,
phone number(11) unique,
class varchar(10),
foreign key (name)
)

tablespace USERS ----表放在USERS表空間
pctfree 10 ----保留10%空間給更新該塊數據使用
initrans 1 -----初始化事物槽的個數
maxtrans 255 ----最大事務槽的個數
storage ----存儲參數

(initial 64K ---區段一次擴展64k
next 1M
minextents 1 ---最小區段數
maxextents unlimited --最大區段無限制
);

說明:
varchar2() ----0-4000,可變長度
varchar()
char() ----0-2000,固定長度,用空格在數據的右邊補到固定長度
number(6,2) ---6位整數、2位小數
number(2) --2位整數
clob ---txt文本
blob ---圖片、視頻、聲音等轉換過來的二進制對象
date ---sysdate

1、創建備份表(變相的創建新表)

creact table  新表名稱 as select 字段1,字段2 from  舊表名稱                                    #變相的創建新表+插入數據
create table 新表名稱 as select * from 舊表名稱 where 1=2; ---復制結構,不要數據 #變相的創建新空表

2、增列減列

添加列  alter table 表名稱 add  (name  varchar2(100),code varchar(20));   
刪除列 alter table 表名稱 drop (name,code) ;

3、表重命名

表重命名 rename table 新表名稱 to 舊表名稱;  

4、添加約束(add constraint)

4-0、添加主鍵約束(將stuNo作為主鍵)

alter table stuInfo

add constraint PK_stuNo primary key (stuNo)

4-2、添加外鍵約束 (主表stuInfo和從表stuMarks建立關系,關聯字段stuNo)
alter table stuInfo
add constraint FK_stuNo foreign key(stuNo) references stuMarks(stuNo)

4-3、添加唯一約束(身份證號唯一)
alter table stuInfo
add constraint UQ_stuID unique(stuID)

4-4、添加默認約束(如果地址不填 默認為“地址不詳”)
alter table stuInfo
add constraint DF_stuAddress default (‘地址不詳’) for stuAddress

4-5、添加檢查約束 (對年齡加以限定 15-40歲之間)
alter table stuInfo
add constraint CK_stuAge check (stuAge between 15 and 40)

5、添加表注釋:學生信息表

comment on table STUINFO 

is '學生信息表';

6、添加列名稱:學號、學生姓名

comment on column STUINFO.stuid 
is '學號';
comment on column STUINFO.stuname
is '學生姓名';

 

 

二、對表中插入多條數據

 

1、采用insert into values 語句插入一條,寫很多條語句即可多條數據,這種主要針對於離散值以及一些基礎信息的錄入,

     插入一條:     insert into Write_back_tiche_sheet (Collection_task)   VALUES   (100);   

  插入多條: 插入多條數據Oracle語法與MySQL語法有差異(如果想知道如何批量操作insert插入、update更新、delete刪除https://blog.csdn.net/yh869585771/article/details/80191157):                        

                 mysql : insert into tablename (column1,column2) values
                 ('aa','bb'),
                 ('dd','cc'),
                 ('ee','ff');


                oracle:insert all into tablename (column1,column2) values ('aa','bb')      #第一句用的是insert all into 不是 insert into
                into tablename (column1,column2) values ('dd','cc')                                  #和mysql的寫法不一樣,多個values之間不用逗號分隔,但是需要加into tablename的形式的語句在每個values前面 
                into tablename (column1,column2) values ('ee,'ff')
                select 1 from dual;                                                                                      #最后跟的select 1 from dual語句中的dual表可以被替換為任何一個只要不是tablename的表

           #只適合於Oralce 9i以上版本

 

 

      如果插入的數據有規律,可利用for、loop循環插入,主要用於批量生成測試數據beginfor i in 1 .. 100 loopinsert into test(xh,mc) values(i||'','測試');end loop;end ;

 

2、采用insert into select from 語句來一次性插入一個集合,這種主要依據於要插入的數據源已經存儲於數據庫對象中,或者利用dual虛表來構造數據,經過加工后寫入一個集合。insert into test (xh,mx) select '123','測試' from dual;

      2-0、兩個表存在字段一樣,復制數據

  insert into  新表 select from  舊表;     <=>    select into 新表 from 舊表;

   2-1、兩個表存在字段一樣,只復制表結構,不復制數據  

     insert into 新表 select * from 舊表 where 1=2;        <=>              select into   新表    from    舊表   where 1=2;

   2-2、新表只有舊表的部分字段,復制部分字段數據 

  insert into  新表 (field1,field2,.....) select field1,field2,field3 from  舊表;     

  說明:

        以上只復制數據和結構,不能復制約束/索引等信息

        如果where條件滿足時,查詢結果有數據,即復制表數據

        如果 where 條件不成立時,查詢結果為空,只復制表結構,沒有數據

             如果新表與舊表字段不一致,要說明取舊表的哪些字段,賦予新表

 

3、采用plsql等工具、或者oracle的imp、impdp命令來導入,這種主要用數據庫與數據庫之間的大批量數據導入,導入的數據格式為plsql的pde、oracle的dmp等。dmp文件可使用table_exists_action參數控制導入動作:replace替換原表,truncate清除原表數據再導入,append增量導入數據,當然impdp數據泵的導入要依賴於directory路徑。

impdp 用戶名/密碼 dumpfile=123.dmp logfile=123.log directory=imp_dir tables=test table_exists_action=append

 

4、使用excel文件直接拷貝。這種主要用於要寫入的數據已是excel文件或者行列分明的其它格式文件,每一列的值和表結構相對應,可直接打開表的行級鎖,把數據拷貝進入。

     打開行級鎖方法:select t.*,rowid from 表名 t where 1=2;select * from  表名  where 1=2 for update;直接把excel數據拷貝到表里


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM