表的建立有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 阅读(432)
评论(0) 编辑 收藏 所属分类:
达内学习总结