随笔-159  评论-114  文章-7  trackbacks-0

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

只有注册用户登录后才能发表评论。


网站导航: