一、創建新表
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數據拷貝到表里
