Oracle-table表操作
阿新 • • 發佈:2019-01-13
資料型別
字元類
select lengthb('字') from dual; (可以在資料庫中查詢一個漢字站多少位元組) char(?) 長度固定,最多容納2000個字元。 例:char(10) ,UT8中一個漢字佔3個字,前六個字元放‘張三’,後添4個空格補全,如‘張三 ’ 注:char 查詢的速度極快,浪費空間,適合查詢比較頻繁的資料欄位 varchar2(?) 長度可變,最多容納4000個字元。不要使用varchar資料型別,使用varchar2資料型別 例:varchar2(10),‘張三’ Oracle中只分配6個字元。varchar2 節省空間 clob(character large object) 字元型大物件,最多容納4g
數字型
number(?) 或者 number(?,?) 範圍 10^(-130) —— 10^126,可以表示整數,也可以表示小數
例:number(5,2)表示一位小數有5位有效數,2位小數,範圍:-999.99 到999.99,number(5)表示一個5位整數,範圍99999到-99999
日期型別
date 包含 年月日和時分秒,oracle預設格式:1-1月-1999 也可以用 to_date('2018-09-27','yyyy-mm-dd')
timestamp 這是oracle9i對date資料型別的擴充套件。可以精確到毫秒。
lob資料型別
包括blob、clob、nclob、bfile(外部儲存)的大型化和非結構化資料,如文字、影象、視屏、空間資料儲存。
建立表
create table table_name(
欄位1 型別1,
欄位2 型別2,
欄位n 型別n
);
根據結果集建立資料庫
create table 表名 as select 語句
複製表
-- 有結構有資料
create table emp_01 as select * from emp;
-- 有結構沒有資料
create table emp_02 as select * from emp where 1=2;
約束
英文 | 中文 |
---|---|
primary key | 主鍵約束 |
unique | 唯一約束 |
not null | 非空約束 |
check(約束條件) | 檢查約束 |
foreign key | 外來鍵約束 |
default | 預設約束 |
注意:Oracle中 default 不是約束,是一個值
給已建立的表新增約束
alter table 表名 add constraint 約束名 約束內容
新增主鍵約束
alter table emp add constraint pk_emp_id primary key(eid);
新增非空約束
alter table emp modify ename not null;
新增唯一約束
alter table emp add constraint uq_emp_ecode unique(ecode);
新增檢查約束
alter table emp add constraint ck_emp_esex check(esex in('男','女'));
新增外來鍵約束
----普通外來鍵約束(如果存在子表引用父表主鍵,則無法刪除父表記錄)
alter table emp add constraint fk_emp_dep foreign key(did) references dep (did);
----級聯外來鍵約束(可刪除存在引用的父表記錄,而且同時把所有有引用的子表記錄也刪除)
alter table emp add constraint fk_emp_dep foreign key(did) references dep (did) on delete cascade;
----置空外來鍵約束(可刪除存在引用的父表記錄,同時將子表中引用該父表主鍵的外來鍵欄位自動設為NULL,但該欄位應允許空值)
alter table emp add constraint fk_emp_dep foreign key(did) references dep (did) on delete set null;
刪除約束
alter table 表名 drop constraint 約束名
建立員工表
create table employee(
eid varchar2(10) primary key, -- 主鍵約束
ename varchar2(12) not null, -- 非空約束
esex char(3) default '男' check(esex='男' or esex='女'), -- 預設約束+檢查約束
ebrithday date unique,-- 唯一約束
eage number(3),
esalary number(8,2),
depid varchar2(10),
constraint fk_employee_department_depid foreign key(depid) references department(depid) --外來鍵約束
);
刪除表
drop table 表名;
修改表的欄位
新增一個classid欄位
alter table student add (classid number(2));
修改一個name欄位的長度
alter table student modify (name varchar2(30));
修改name欄位的型別或是名字(不能有資料)
alter table student modify (name char(30));
刪除一個欄位
alter table student drop salary;
修改表的名字
rename student to stu;
插入記錄
insert into 表名(欄位1,欄位2,欄位3,...) values(值1,值2,值3,...);
當插入全部欄位的資料時:
insert into 表名(欄位1,欄位2,欄位3,...) values(值1,值2,值3,...);
insert into student (sno,age,edate,classname,email)values(1, 18, '23-12月-1293','wd003','[email protected]')
可以簡寫為(可以省略表名後面的欄位標識):
insert into 表名 values(值1,值2,值3,...);
insert into student values(1,18, '23-12月-1293','wd003','[email protected]'); 與上一個insert語句效果相同
當插入部分欄位時(一定要在表名後新增標識,下面例子新增記錄時欄位2沒有新增資料):
insert into 表名(欄位1,欄位3) values(值1,值3);
insert into student (sno,sdate,classname,email)values(1, '23-12月-1293','wd003','[email protected]');
(沒有新增學號為1同學的年齡)
修改記錄
update 表名 set 修改欄位1 = 修改後內容1,修改欄位2 = 修改後內容2 where 條件
update student set sname='CR7',sage='33' where sno='1001';
刪除記錄
delete from 表名 where 條件
刪除表所有記錄
delete from 表名
truncate table 表名 (!!!!!慎用,刪除記錄不可恢復)
主表 從表
主鍵表是被引用的表,外來鍵表是引用其他表的表
主表:在資料庫中建立的表格(table),其中存在主鍵(primary key)用於與其它表相關聯,並且作為在主表中的唯一性標識
從表:以主表的主鍵(primary key)值為外來鍵 (foreign key)的表,有外來鍵的表是外來鍵表,從表
刪除主表前,先解除與從表關係,然後才能刪除(除非外來鍵中設定級聯或者置空)