表的建立有4個步驟
1.表名
2.列名
3.主鍵,外鍵,非空,唯一約束
4.外鍵表,外鍵列
5.數據類型
6.數據
建表語句
create table lujl11
(id number(7),
start_date DATE DEFAULT SYSDATE)
在同一個用戶表空間,不能有同名的表。
========================================
RDBMS
---|---------------------------|-------------------|
DB1(TLAB1)
|-----------------------------|-------------------------|
Table Space(users) T.S(temp)
|---------------------|
schema(s0510) (j0510)其他用戶的目錄讀權限
|---------|
s_emp s_dept
為什么sqlplus,一登陸就是某個庫,1個用戶只能登陸一個庫,那么這個庫在.cshrc環境變量中,ORACLE_SID表明。在登錄到對應用戶,使用對應用戶的表空間。
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
=======================================
數據類型
VARCHAR2(size)
CHAR(size)
NUMBER(p,s) p為有效位數,s為小數位數,那么NUMBER(5,2),整數位為3位。
DATE 日期與時間值。
LONG 大文本
RAW和LONG RAW 圖像或者聲音
約束類型
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
約束起名,如果不起名,系統會分配一個名字,SYS_Cxxxx。
約束 最好是 表名_列名_約束類型
lujl11_dept_id_fk 外鍵
lujl11_id_pk主鍵
lujl11_name_nn非空
lujl11_title_uk唯一
lujl11_salary_ckCHECK約束
定義,有列一級定義也有表一級定義,但是效果完全一樣。
約束與數據是一對矛盾。誰先存在,誰有理,數據已存在,那么得添加約束要符合數據情況。
非空約束,列級約束。
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)
);
表一級約束,constraint開頭。
constraint lujl11_dept_id_fk
foreign key(dept_id)
references s_dept(id)
on delete cascade
級聯刪除
沒有級聯更新。
create table emp_41
as
select id,last_name..
from s_emp
where..
除了非空約束存在,其他丟失。
數據字典
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)
時間問題,依然要重視
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 事務
一個事務
多個DML語句
但是一旦遇到DCL(grant),DDL(alter,drop)就會自動提交事物
或者COMMIT提交,
或者ROLLBACK回滾到事物開始。
也就是說,如果先插入了很多記錄,再刪很多記錄,沒有commit或者退出,或者DCL,DDL,那么ROLLBACK可以回滾到插入數據之前。
sqlplus--->另外的buff保存著,當前事務涉及到的行,這是操作修改的是buff中的數據,但是這些行記錄被鎖定,行級所,所以可以rollback,一旦提交,就更新到數據庫中了。
除非實時修復DBA能恢復數據。
可以SAVEPOINT,保存事物中間某個標志為,回滾到該標志地方。
ALTER table s_emp
ADD
MODIFY
DROP
約束只能添加和刪除,不能修改(除了alter table jerry03 modify (id null))。
ALTER TABLE s_dept
DROP PRIMARY KEY CASCADE
一個表一個主鍵約束,可以不指定列。正常有外鍵關聯主鍵,主鍵約束不能刪除,除非CASCADE。
ALTER TABLE s_emp
ENABLE CONSTRAINT s_emp_id_pk;
恢復需要一個一個將外鍵的表恢復外鍵約束。
DROP TABLE table CASCADE CONSTRAINTS
Truncate table s_emp;
刪除所有數據,不同于delete from s_emp;,它釋放了表占據的空間。磁盤空間。
建Sequences,序列獨立于表,沒關系,,誰都能用該序列。
create sequence lujl11_id
increment by 1
start with 54
maxvalue 9999999
nocache
nocycle
user_sequences
drop sequence lujl11_id;
View
一面墻上有一幅畫(數據),前面是一面墻,墻上有窗,那就是視圖,不是數據本身,就是select語句,
兩類,簡單視圖(可以DML),復雜視圖(不能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;一個約束!
就是條件中(where)出現的列不能修改。
WITH READ ONLY 只讀
INDEX
B*Tree,就是平分法排序,實現快速查找。
索引會提高查詢速度,但會降低插入速度。
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是地址,天生的主鍵。非空,唯一。
posted on 2005-11-22 22:57
北國狼人的BloG 閱讀(436)
評論(0) 編輯 收藏 所屬分類:
達內學習總結