表的建立有4個(gè)步驟
1.表名
2.列名
3.主鍵,外鍵,非空,唯一約束
4.外鍵表,外鍵列
5.數(shù)據(jù)類型
6.數(shù)據(jù)
建表語句
create table lujl11
(id number(7),
start_date DATE DEFAULT SYSDATE)
在同一個(gè)用戶表空間,不能有同名的表。
========================================
RDBMS
---|---------------------------|-------------------|
DB1(TLAB1)
|-----------------------------|-------------------------|
Table Space(users) T.S(temp)
|---------------------|
schema(s0510) (j0510)其他用戶的目錄讀權(quán)限
|---------|
s_emp s_dept
為什么sqlplus,一登陸就是某個(gè)庫,1個(gè)用戶只能登陸一個(gè)庫,那么這個(gè)庫在.cshrc環(huán)境變量中,ORACLE_SID表明。在登錄到對(duì)應(yīng)用戶,使用對(duì)應(yīng)用戶的表空間。
openlab上。
SQL> !more .cshrc
# @(#)cshrc 1.11 89/11/29 SMI
umask 022
setenv ORACLE_BASE /tarenadb
setenv ORACLE_HOME /tarenaora/software/9.0.1
setenv ORACLE_SID TARENADB
=======================================
數(shù)據(jù)類型
VARCHAR2(size)
CHAR(size)
NUMBER(p,s) p為有效位數(shù),s為小數(shù)位數(shù),那么NUMBER(5,2),整數(shù)位為3位。
DATE 日期與時(shí)間值。
LONG 大文本
RAW和LONG RAW 圖像或者聲音
約束類型
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
約束起名,如果不起名,系統(tǒng)會(huì)分配一個(gè)名字,SYS_Cxxxx。
約束 最好是 表名_列名_約束類型
lujl11_dept_id_fk 外鍵
lujl11_id_pk主鍵
lujl11_name_nn非空
lujl11_title_uk唯一
lujl11_salary_ckCHECK約束
定義,有列一級(jí)定義也有表一級(jí)定義,但是效果完全一樣。
約束與數(shù)據(jù)是一對(duì)矛盾。誰先存在,誰有理,數(shù)據(jù)已存在,那么得添加約束要符合數(shù)據(jù)情況。
非空約束,列級(jí)約束。
create table friend
(phone varchar2(15) constraint friend_phone_nn NOT NULL,
)
create table lujl04
(
id number(5) constraint lujl04_id_uk unique,
last_name varchar2(10),
first_name varchar2(20),
salary number(10,2),
constraint lujl04_first_last_name_uk
unique(last_name,first_name)
);
表一級(jí)約束,constraint開頭。
constraint lujl11_dept_id_fk
foreign key(dept_id)
references s_dept(id)
on delete cascade
級(jí)聯(lián)刪除
沒有級(jí)聯(lián)更新。
create table emp_41
as
select id,last_name..
from s_emp
where..
除了非空約束存在,其他丟失。
數(shù)據(jù)字典
user users
all ------->_-------->views
dba indexs
constraints
user_tables
user_views
user_indexs
user_constraints
user_sequeces
DML
insert into table
values (102,null,....)
insert into table(id)
values(102)
時(shí)間問題,依然要重視
insert into s_emp(id,first_name,last_name,start_date)
values
(25,'Donna','Smith',TO_DATE('01-JAN-99 09:00','DD-MON-YY HH:MI'));
update s_emp
set dept_id = 100
where id = 2;
delete from s_emp;
delele from s_emp
where start_date>TO_DATE('01.01.1996','DD.MM.YYYY')
Transaction 事務(wù)
一個(gè)事務(wù)
多個(gè)DML語句
但是一旦遇到DCL(grant),DDL(alter,drop)就會(huì)自動(dòng)提交事物
或者COMMIT提交,
或者ROLLBACK回滾到事物開始。
也就是說,如果先插入了很多記錄,再刪很多記錄,沒有commit或者退出,或者DCL,DDL,那么ROLLBACK可以回滾到插入數(shù)據(jù)之前。
sqlplus--->另外的buff保存著,當(dāng)前事務(wù)涉及到的行,這是操作修改的是buff中的數(shù)據(jù),但是這些行記錄被鎖定,行級(jí)所,所以可以rollback,一旦提交,就更新到數(shù)據(jù)庫中了。
除非實(shí)時(shí)修復(fù)DBA能恢復(fù)數(shù)據(jù)。
可以SAVEPOINT,保存事物中間某個(gè)標(biāo)志為,回滾到該標(biāo)志地方。
ALTER table s_emp
ADD
MODIFY
DROP
約束只能添加和刪除,不能修改(除了alter table jerry03 modify (id null))。
ALTER TABLE s_dept
DROP PRIMARY KEY CASCADE
一個(gè)表一個(gè)主鍵約束,可以不指定列。正常有外鍵關(guān)聯(lián)主鍵,主鍵約束不能刪除,除非CASCADE。
ALTER TABLE s_emp
ENABLE CONSTRAINT s_emp_id_pk;
恢復(fù)需要一個(gè)一個(gè)將外鍵的表恢復(fù)外鍵約束。
DROP TABLE table CASCADE CONSTRAINTS
Truncate table s_emp;
刪除所有數(shù)據(jù),不同于delete from s_emp;,它釋放了表占據(jù)的空間。磁盤空間。
建Sequences,序列獨(dú)立于表,沒關(guān)系,,誰都能用該序列。
create sequence lujl11_id
increment by 1
start with 54
maxvalue 9999999
nocache
nocycle
user_sequences
drop sequence lujl11_id;
View
一面墻上有一幅畫(數(shù)據(jù)),前面是一面墻,墻上有窗,那就是視圖,不是數(shù)據(jù)本身,就是select語句,
兩類,簡(jiǎn)單視圖(可以DML),復(fù)雜視圖(不能DML)。
CREATE OR REPLACE VIEW empvu45
(id_number,employee,job)
as select id,last_name,title
from s_emp
where dept_id = 45
CREATE OR REPLACE VIEW empvu44
AS SELECT *
FROM s_emp
WHERE dept_id = 41
WITH CHECK OPTION CONSTRAINT empvu41_ck;一個(gè)約束!
就是條件中(where)出現(xiàn)的列不能修改。
WITH READ ONLY 只讀
INDEX
B*Tree,就是平分法排序,實(shí)現(xiàn)快速查找。
索引會(huì)提高查詢速度,但會(huì)降低插入速度。
1.值分散
2.空值多
3.多列
4.表大
5.更多索引不能提速更多。
1 select rowid,s_dept.*
2* from s_dept
SQL> /
ROWID ID NAME REGION_ID
------------------ ---------- ------------------------- ----------
AAAIlTAAIAAABeqAAA 10 Finance 1
AAAIlTAAIAAABeqAAB 31 Sales 1
AAAIlTAAIAAABeqAAC 32 Sales 2
AAAIlTAAIAAABeqAAD 33 Sales 3
AAAIlTAAIAAABeqAAE 34 Sales 4
AAAIlTAAIAAABeqAAF 35 Sales 5
rowid是地址,天生的主鍵。非空,唯一。