您的位置:首页 > 数据库 > Oracle

《Oracle从入门到精通》读书笔记第九章 数据表对象

2014-03-18 11:36 435 查看
9.1 数据表概述9.2 创建数据表9.2.1 数据表的逻辑结构列的5种常用数据类型1、字符类型a、char类型b、varchar2类型
2、数值类型3、日期时间类型
4、LOB类型用于大型的,未被结构化的数据,如二进制文件,图片文件和其他类型的外部文件a、BLOB类型:存储二进制对象,包括图像,音频,视频等b、CLOB类型:存储字符格式的大型对象c、BFILE类型:存储二进制格式的文件
5、ROWID数据类型伪列类型
9.2.2 创建一个数据表SQL> create table students( 2 stuno number(10) not null, 3 stuname varchar2(8), 4 sex char(2), 5 age int, 6 departno varchar2(2) not null, 7 classno varchar2(4) not null, 8 regdate date default sysdate);Table created.SQL> desc students; Name Null? Type ----------------------------------------------------- -------- ------------------------------------ STUNO NOT NULL NUMBER(10) STUNAME VARCHAR2(8) SEX CHAR(2) AGE NUMBER(38) DEPARTNO NOT NULL VARCHAR2(2) CLASSNO NOT NULL VARCHAR2(4) REGDATE DATE
SQL> create table students_2 2 as select * from students;Table created.SQL> desc students_2; Name Null? Type ----------------------------------------------------- -------- ------------------------------------ STUNO NOT NULL NUMBER(10) STUNAME VARCHAR2(8) SEX CHAR(2) AGE NUMBER(38) DEPARTNO NOT NULL VARCHAR2(2) CLASSNO NOT NULL VARCHAR2(4) REGDATE DATE
9.2.3 数据表的特性1、存储参数三个参数:initial,next,minextents,主要设置initial参数,为表指定分配的第一个盘区大小
2、数据块管理参数(1)PCTFREE和PCTUSED这两个参数用于控制数据块中空闲空间的使用方法,对于本地化管理的表空间而言,如果使用segment space management子句设置段的管理方式为auto,则无需设置这两个参数,如果表空间的段管理方式为manual,则需要设置。(2)initrans参数指定一个数据块所允许的并发事物数目(3)重做日志参数nologging和logging参数(4)缓存参数cache和nocache
9.3 维护数据表9.3.1 增加和删除字段SQL> desc students; Name Null? Type ----------------------------------------------------- -------- ------------------------------------ STUNO NOT NULL NUMBER(10) STUNAME VARCHAR2(8) SEX CHAR(2) AGE NUMBER(38) DEPARTNO NOT NULL VARCHAR2(2) CLASSNO NOT NULL VARCHAR2(4) REGDATE DATE
SQL> alter table students add (province varchar2(10));Table altered.SQL> desc students; Name Null? Type ----------------------------------------------------- -------- ------------------------------------ STUNO NOT NULL NUMBER(10) STUNAME VARCHAR2(8) SEX CHAR(2) AGE NUMBER(38) DEPARTNO NOT NULL VARCHAR2(2) CLASSNO NOT NULL VARCHAR2(4) REGDATE DATE PROVINCE VARCHAR2(10)删除单列SQL> alter table students drop colunm province;alter table students drop colunm province *ERROR at line 1:ORA-00905: missing keywordSQL> alter table students drop column province;Table altered.SQL> desc students; Name Null? Type ----------------------------------------------------- -------- ------------------------------------ STUNO NOT NULL NUMBER(10) STUNAME VARCHAR2(8) SEX CHAR(2) AGE NUMBER(38) DEPARTNO NOT NULL VARCHAR2(2) CLASSNO NOT NULL VARCHAR2(4) REGDATE DATE
删除多列SQL> alter table students drop (sex,age);Table altered.SQL> desc students; Name Null? Type ----------------------------------------------------- -------- ------------------------------------ STUNO NOT NULL NUMBER(10) STUNAME VARCHAR2(8) DEPARTNO NOT NULL VARCHAR2(2) CLASSNO NOT NULL VARCHAR2(4) REGDATE DATE
9.3.2 修改字段语法格式:alter table table_name modify column_name column_propertySQL> desc students; Name Null? Type ----------------------------------------------------- -------- ------------------------------------ STUNO NOT NULL NUMBER(10) STUNAME VARCHAR2(8) DEPARTNO NOT NULLVARCHAR2(2) CLASSNO NOT NULL VARCHAR2(4) REGDATE DATESQL> alter table students modify departno varchar2(4);Table altered.SQL> desc students; Name Null? Type ----------------------------------------------------- -------- ------------------------------------ STUNO NOT NULL NUMBER(10) STUNAME VARCHAR2(8) DEPARTNO NOT NULLVARCHAR2(4) CLASSNO NOT NULL VARCHAR2(4) REGDATE DATE
9.3.3 重命名表和列语法格式:alter table table_old_name rename to table_new_namealter table table_name rename column column_old_name to column_new_name
SQL> alter table students_2 rename to students_1;Table altered.
9.3.4 改变表空间和存储参数1、修改表空间SQL> col table_name for a20;SQL> select table_name,tablespace_name from user_tables;TABLE_NAME TABLESPACE_NAME-------------------- --------------------DEPT USERSEMP USERSBONUS USERSSALGRADE USERSSTUDENTS TBS_TEST_1STUDENTS_1 TBS_TEST_1STUDENTS_3 TBS_TEST_17 rows selected.
SQL> alter table students_1 move tablespace tbs_test_2;Table altered.SQL> select table_name,tablespace_name from user_tables;TABLE_NAME TABLESPACE_NAME-------------------- --------------------DEPT USERSEMP USERSBONUS USERSSALGRADE USERSSTUDENTS TBS_TEST_1STUDENTS_3 TBS_TEST_1STUDENTS_1 TBS_TEST_27 rows selected.
2、修改储存参数主要是指修改数据块参数pctfree和pctused
9.3.5 删除表语法格式:drop table table_name [cascade constraints];SQL> drop table students_3 cascade constraints;Table dropped.SQL> select table_name,tablespace_name from user_tables;TABLE_NAME TABLESPACE_NAME-------------------- --------------------DEPT USERSEMP USERSBONUS USERSSALGRADE USERSSTUDENTS TBS_TEST_1STUDENTS_1 TBS_TEST_26 rows selected.
SQL> col object_name for a30;SQL> col original_name for a20;SQL> select object_name,original_name 2 from recyclebin 3 where original_name='STUDENTS_3';OBJECT_NAME ORIGINAL_NAME------------------------------ --------------------BIN$7YshJM6SsALgQPrc4kAUGg==$0 STUDENTS_3
SQL> flashback table students_3 to before drop;Flashback complete.SQL> select table_name,tablespace_name from user_tables;TABLE_NAME TABLESPACE_NAME-------------------- --------------------DEPT USERSEMP USERSBONUS USERSSALGRADE USERSSTUDENTS TBS_TEST_1STUDENTS_3 TBS_TEST_1STUDENTS_1 TBS_TEST_27 rows selected.
9.3.6 修改表的状态将表置于read only状态SQL> select table_name,read_only from user_tables;TABLE_NAME READ_ONLY-------------------- ---------DEPT NOEMP NOBONUS NOSALGRADE NOSTUDENTS NOSTUDENTS_3 NOSTUDENTS_1 NO7 rows selected.SQL> alter table students_3 read only;Table altered.SQL> select table_name,read_only from user_tables;TABLE_NAME READ_ONLY-------------------- ---------DEPT NOEMP NOBONUS NOSALGRADE NOSTUDENTS NOSTUDENTS_3 YESSTUDENTS_1 NO7 rows selected.SQL> alter table students_3 read write;Table altered.SQL> select table_name,read_only from user_tables;TABLE_NAME READ_ONLY-------------------- ---------DEPT NOEMP NOBONUS NOSALGRADE NOSTUDENTS NOSTUDENTS_3 NOSTUDENTS_1 NO7 rows selected.
9.4 数据完整性和约束性9.4.1 非空约束(not null)SQL> desc students_3 Name Null? Type ----------------------------------------------------- -------- ------------------------------------ STUNO NOT NULL NUMBER(10) STUNAME VARCHAR2(8) SEX CHAR(2) AGE NUMBER(38) DEPARTNO NOT NULL VARCHAR2(2) CLASSNO NOT NULL VARCHAR2(4) REGDATE DATESQL> alter table students_3 modify stuname not null;Table altered.SQL> desc students_3; Name Null? Type ----------------------------------------------------- -------- ------------------------------------ STUNO NOT NULL NUMBER(10) STUNAMENOT NULLVARCHAR2(8) SEX CHAR(2) AGE NUMBER(38) DEPARTNO NOT NULL VARCHAR2(2) CLASSNO NOT NULL VARCHAR2(4) REGDATE DATESQL> alter table students_3 modify stuname null;Table altered.SQL> desc students_3; Name Null? Type ----------------------------------------------------- -------- ------------------------------------ STUNO NOT NULL NUMBER(10) STUNAME VARCHAR2(8) SEX CHAR(2) AGE NUMBER(38) DEPARTNO NOT NULL VARCHAR2(2) CLASSNO NOT NULL VARCHAR2(4) REGDATE DATE
9.4.2 主键约束(primary key)主键约束用于唯一标识每一行记录,在一个表中,最大只能有一个主键约束,主键约束同时也具有非空约束的特性。如果主键约束由一列组成,称为行级约束由两个或两个以上列组成,称为表级约束SQL> alter table students_3 2 add constraint student_pk primary key(stuno);Table altered.
SQL> col table_name for a10;SQL> col constraint_name for a30;SQL> select table_name,constraint_name 2 from user_constraints;TABLE_NAME CONSTRAINT_NAME---------- ------------------------------STUDENTS SYS_C0011172STUDENTS SYS_C0011171STUDENTS SYS_C0011173STUDENTS_1 SYS_C0011174STUDENTS_1 SYS_C0011176STUDENTS_3 BIN$7YshJM6PsALgQPrc4kAUGg==$0STUDENTS_3 BIN$7YshJM6QsALgQPrc4kAUGg==$0STUDENTS_3 BIN$7YshJM6RsALgQPrc4kAUGg==$0STUDENTS_1 SYS_C0011175EMP FK_DEPTNODEPT PK_DEPTTABLE_NAME CONSTRAINT_NAME---------- ------------------------------EMP PK_EMPSTUDENTS_3 STUDENT_PK13 rows selected.
SQL> alter table students_3 2 drop constraint student_pk;Table altered.
9.4.3 唯一性约束(unique)唯一性约束强调所在的列不允许有相同的值,但允许空值SQL> col table_name for a20;SQL> col tablespace_name for a20;SQL> select table_name,tablespace_name from user_tables;TABLE_NAME TABLESPACE_NAME-------------------- --------------------DEPT USERSEMP USERSBONUS USERSSALGRADE USERSSTUDENTS TBS_TEST_1STUDENTS_3 TBS_TEST_1STUDENTS_1 TBS_TEST_27 rows selected.SQL> desc students_3; Name Null? Type ----------------------------------------- -------- ---------------------------- STUNO NOT NULL NUMBER(10) STUNAME VARCHAR2(8) SEX CHAR(2) AGE NUMBER(38) DEPARTNO NOT NULL VARCHAR2(2) CLASSNO NOT NULL VARCHAR2(4) REGDATE DATESQL> alter table students_3 add( 2 phone varchar2(20), 3 email varchar2(30), 4 qq varchar2(20) constraint qq_uk unique);Table altered.
SQL> desc students_3; Name Null? Type ----------------------------------------- -------- ---------------------------- STUNO NOT NULL NUMBER(10) STUNAME VARCHAR2(8) SEX CHAR(2) AGE NUMBER(38) DEPARTNO NOT NULL VARCHAR2(2) CLASSNO NOT NULL VARCHAR2(4) REGDATE DATE PHONE VARCHAR2(20) EMAIL VARCHAR2(30) QQ VARCHAR2(20)
SQL> alter table students_3 add constraint email_uk unique(email);Table altered.SQL> col table_name for a10;SQL> col constraint_name for a30;SQL> col constraint_type for a20;SQL> select table_name,constraint_name,constraint_type from user_constraints;TABLE_NAME CONSTRAINT_NAME CONSTRAINT_TYPE---------- ------------------------------ --------------------STUDENTS SYS_C0011172 CSTUDENTS SYS_C0011171 CSTUDENTS SYS_C0011173 CSTUDENTS_1 SYS_C0011174 CSTUDENTS_1 SYS_C0011176 CSTUDENTS_3 BIN$7YshJM6PsALgQPrc4kAUGg==$0 CSTUDENTS_3 BIN$7YshJM6QsALgQPrc4kAUGg==$0 CSTUDENTS_3 BIN$7YshJM6RsALgQPrc4kAUGg==$0 CSTUDENTS_1 SYS_C0011175 CEMP FK_DEPTNO RDEPT PK_DEPT PTABLE_NAME CONSTRAINT_NAME CONSTRAINT_TYPE---------- ------------------------------ --------------------EMP PK_EMP PSTUDENTS_3 STUDENT_PK PSTUDENTS_3 QQ_UK USTUDENTS_3 EMAIL_UK U15 rows selected.
SQL> alter table students_3 drop constraint email_uk;Table altered.SQL> select table_name,constraint_name,constraint_type from user_constraints;TABLE_NAME CONSTRAINT_NAME CONSTRAINT_TYPE---------- ------------------------------ --------------------STUDENTS SYS_C0011172 CSTUDENTS SYS_C0011171 CSTUDENTS SYS_C0011173 CSTUDENTS_1 SYS_C0011174 CSTUDENTS_1 SYS_C0011176 CSTUDENTS_3 BIN$7YshJM6PsALgQPrc4kAUGg==$0 CSTUDENTS_3 BIN$7YshJM6QsALgQPrc4kAUGg==$0 CSTUDENTS_3 BIN$7YshJM6RsALgQPrc4kAUGg==$0 CSTUDENTS_1 SYS_C0011175 CEMP FK_DEPTNO RDEPT PK_DEPT PTABLE_NAME CONSTRAINT_NAME CONSTRAINT_TYPE---------- ------------------------------ --------------------EMP PK_EMP PSTUDENTS_3 STUDENT_PK PSTUDENTS_3 QQ_UK U14 rows selected.
9.4.4 外键约束外键是指“当前表”(即外键表)引用“另外一个表”(即被引用表)的某个列或某几个列,而“另外一个表”中被引用的列必须具有主键约束或者唯一性约束。SQL> conn scott/tigerConnected.SQL> col table_name for a15;SQL> select table_name from user_tables;
TABLE_NAME---------------DEPTEMPBONUSSALGRADESTUDENTSSTUDENTS_3STUDENTS_1
7 rows selected.
SQL> create table emp_temp 2 as select * from emp 3 where deptno=30;
Table created.
SQL> alter table emp_temp 2 add constraint temp_deptno_fk foreign key(deptno) 3 references dept(deptno);
Table altered.
SQL> insert into emp_temp(empno,ename,job,deptno) 2 values(9527,'stone','salesman',90);insert into emp_temp(empno,ename,job,deptno)*ERROR at line 1:ORA-02291: integrity constraint (SCOTT.TEMP_DEPTNO_FK) violated - parent keynot found
定义外键约束时,通过关键字on指定引用行为的类型,当尝试删除被引用表中的一条记录时,通过引用行为可以确定如何处理外键表中的外键列。引用行为的类型包括3种。a、在定义外键约束时,如果使用了关键字no action,那么当删除被引用表中的被引用列的数据时将违反外键约束,该操作将被禁止执行,这也是外键的“默认引用类型”b、在定义外键约束时,如果使用了关键字set null,那么当被引用表中被引用列的数据被删除时,外键表中外键列被设置为null,要使这个关键字起作用,外键列必须支持null值。c、在定义外键约束时,如果使用了cascade关键字,那么当被引用表中被引用列的数据被删除时,外键表中对应的数据也将被删除,这种方式通常称为“级联删除”,它在实际应用程序开发中得到比较广泛应用。
创建表SQL> create table dept_temp 2 as select * from dept 3 where deptno=30;
Table created.
创建主键约束SQL> alter table dept_temp 2 add primary key(deptno);
Table altered.
查看主键约束SQL> select table_name,constraint_name,constraint_type from user_constraints 2 where table_name='DEPT_TEMP';
TABLE_NAME CONSTRAINT_NAME CONSTRAINT---------- ------------------------------ ----------DEPT_TEMP SYS_C0011198 P
创建外键约束SQL> alter table emp_temp 2 add constraint temp_deptno_fk2 foreign key(deptno) 3 references dept_temp on delete cascade;
Table altered.
查看外键约束SQL> select table_name,constraint_name,constraint_type from user_constraints where table_name='EMP_TEMP';
TABLE_NAME CONSTRAINT_NAME CONSTRAINT---------- ------------------------------ ----------EMP_TEMP TEMP_DEPTNO_FK REMP_TEMP TEMP_DEPTNO_FK2 R
SQL> select count(*) from emp_temp where deptno=30;
COUNT(*)---------- 6
SQL> delete from dept_temp 2 where deptno=30;
1 row deleted.
SQL> select count(*) from emp_temp where deptno=30;
COUNT(*)---------- 0
删除约束SQL> alter table emp_temp 2 drop constraint temp_deptno_fk2;
Table altered.
SQL> select table_name,constraint_name,constraint_type from user_constraints where table_name='EMP_TEMP';
TABLE_NAME CONSTRAINT_NAME CONSTRAINT---------- ------------------------------ ----------EMP_TEMP TEMP_DEPTNO_FK R
9.4.5 禁用和激活约束1、在定义约束时禁用使用disable关键字SQL> create table student( 2 stucode varchar2(4) not null, 3 stuname varchar2(10) not null, 4 age int constraint age_ck check(age>0 and age<120)disable, 5 province varchar2(20), 6 schoolname varchar2(50));
Table created.
2、禁用已经存在的约束SQL> col status for a10;SQL> select table_name,constraint_name,constraint_type,status 2 from user_constraints 3 where table_name='EMP_TEMP';
TABLE_NAME CONSTRAINT_NAME CONSTRAINT STATUS---------- ------------------------------ ---------- ----------EMP_TEMP TEMP_DEPTNO_FK R ENABLED
SQL> alter table emp_temp 2 disable constraint temp_deptno_fk;
Table altered.
SQL> select table_name,constraint_name,constraint_type,status 2 from user_constraints 3 where table_name='EMP_TEMP';
TABLE_NAME CONSTRAINT_NAME CONSTRAINT STATUS---------- ------------------------------ ---------- ----------EMP_TEMP TEMP_DEPTNO_FK R DISABLED
激活约束:enable语法格式:alter table table_nameenable [novalidate|validate] constraint con_name;novalidate:表示在激活约束时不验证表中已经存在的数据是否满足约束validate:要验证
SQL> alter table students_3 2 disable constraint student_pk;
SQL> insert into students_3(stuno,departno,classno) 2 values(1111,11,11);
1 row created.
SQL> insert into students_3(stuno,departno,classno) 2 values(1111,11,11);
1 row created.
SQL> alter table students_3 2 enable constraint student_pk;alter table students_3*ERROR at line 1:ORA-02437: cannot validate (SCOTT.STUDENT_PK) - primary key violated
9.4.6 删除约束语法格式:alter table table_namedrop constraint con_nameSQL> alter table student 2 drop constraint age_ck;
Table altered.本文出自 “石头记” 博客,请务必保留此出处http://stonebox.blog.51cto.com/5409313/1378480
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐