1. 程式人生 > >Oracle資料庫—表(table)操作

Oracle資料庫—表(table)操作

資料型別

字元類

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;

約束

標題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(sex='男' or sex='女'), -- 預設約束+檢查約束

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,enterdate,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 (snoenterdate,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 sid='1001';

刪除記錄

delete from 表名 where 條件
刪除表所有記錄
delete from 表名

truncate from 表名 (!!!!!慎用,刪除記錄不可恢復)

主表 從表

主鍵表是被引用的表,外來鍵表是引用其他表的表

主表:在資料庫中建立的表格(table),其中存在主鍵(primary key)用於與其它表相關聯,並且作為在主表中的唯一性標識

從表:以主表的主鍵(primary key)值為外來鍵 (foreign key)的表,有外來鍵的表是外來鍵表,從表

刪除主表前,先解除與從表關係,然後才能刪除(除非外來鍵中設定級聯或者置空)