betway必威Oracle数据库 —— DDLoracle数据库从入门到精通的二。

 

要害关注表的创同操作语法(如何创造与设计表是后话)
常用数据类型
表本质上是数码的聚合操作

时间:2016-10-5 14:55

数据类型:
不管扩展多少种多少类,常用的尽管以下几栽
字符串  
 varchar2(其它数据库是varchar)来讲述,200独字以类的且为此此类型。
数值    number来描述,小数用number(m,n),其中n为小数个,m-n为整数个。
        数据库也考虑了先后人员之惯:
        整数用INT来表示
        小数用FLOAT来表示
日期    date
良文本数据    clob来叙述,最多好保存4G之文本。
酷目标数据    blob来叙述,图片,音乐,视频,文本,最多好保留4G,
            虽然能存,但效率低下,数据库更多的凡因此来存地址,费了
            半天劲,保存进去了,还得费半天劲读出来,把数据库就劳动很了。
自实质上的开发来讲,掌握这四单就是足够了,varchar2,number,date,clob.

 

#########################
表创建:
create table 表名(
    列名    数据类型    [default 默认值],
    列名    数据类型    [default 默认值],
    列名    数据类型    [default 默认值],
    列名    数据类型    [default 默认值],
    …
    列名    数据类型    [default 默认值]
);

逆风的样子
再度可飞翔
本身虽千万人口阻止
无非怕自己服

create table member(
    mid number,
    name varchar2(20) default ‘noname’,
    birthday date default sysdate,
    note clob
insert into member(mid,name,birthday,note)
values(1,’aa’,to_date(‘1980-09-08′,’yyyy-mm-dd’),’aaaaaaaaaaaaaa’);
insert into member(mid,name,birthday,note)
values(2,’bb’,to_date(‘1980-10-08′,’yyyy-mm-dd’),’bbbbbbbbbbbbbb’);
insert into member(mid) values(3);
insert into member(mid,name) values(4,null);
只要指定了null,就会见覆盖默认值。

 —————————————

############################

相同、表底创导及治本

表复制

1、表的基本操作
    目标:
        理解数据表的概念;
        理解常用数据类型;
        可以拓展数据表对象的创建;
        了解表的复制操作;
        理解数据字典的定义;
        了解表重命名暨发明截断操作;
        理解数据表的删减操作。

将子查询的结果保存也数据表。
create table 表名 as 子查询;
简言之询问
create table emp30 as select * from emp where deptno=30;
复杂查询
create table deptstat
    as
select d.deptno,d.dname,temp.count,temp.avg
from dept d, (
    select deptno dno,count(*) count,avg(sal) avg
    from emp
    group by deptno) temp
where d.deptno=temp.dno(+);

    表是切实世界之虚幻:
       
数据表市一中“行及列”数据的结,也是数据库里最基本的结缘单元,所有的数额操作(增加、修改、删除、查询)以及约、索引等概念都设依附于数表明而留存,而数据表也可了解也对实际或者是工作的悬空结果,例如:抽象出具体世界面临汽车的架空模型。

除外复制表数据外,还好独自复制表结构。
仅需要安装一个万万免可能满足的标准即可。
create table empnull
    as
select * from emp where 1=2;

        betway必威 1

 

    表也足以兑现数量的统计:
        现在足做一样布置数据表,记录下拥有获得世界杯冠军之球队。
        No                    球队                           
举办国家            年份
         1            中国国度足球队                     
  中国             2000年
         2            美国国足球队                        美国       
     2004年
         3            韩国江山足球队                       
韩国             2008年

################################

    1.1 Oracle常用数据类型
       
表中之极端核心成单元是字段,每一个字段都发生其数据类型,例如之前所学的empno字段就是int类型,这些不同之花色就做了扳平摆放表,包括在学习实体技术之时节,JDBC中之ResultSet取多少就是是准种类进行得之,所以种是发明底实现重大。

截断表(oracle特色,了解就行)
事务处理本身是保障数据完整性的一个招数。
利用事务处理的历程被,未提交之前,又发出了ddl操作,那么具有的事务会自动提交
政工只针对dml起作用,不对准ddl起作用。

        数据类型:
            CHAR(n):
                n=1 to 2000(字节),保存定长的字符串。
            VARCHAR(n):
                n=1 to
4000(字节),可以放数字、字母和ASCII码字符集,Oracle12c开始,其尽充分支撑32767许节长度。
            NUMBER(m.n):
                m=1 to 38,n = -84 to
127,表示数字,其中小数部分长度为m,整数片长也m-n。
            DATE:
                用于存放日期时档次数据(不含有毫秒)。
            TIMESTAMP:
                时间戳。
                用于存放日期事件类数据(包含毫秒)。
            CLOB:
               
4GB,用于存放海量文字,例如:保存一统《红楼梦》、《三国演义》。
            BLOB:
                4GB,用于保存二进制文件,例如:图片、电影。

select * from emp30;
delete from emp30;
rollback;
可回退,但切莫提交之前,又发了ddl操作,那么有的事务会自动提交
delete from emp30;
create table a(a int);
rollback;无用

       
如果今天使定义表示字符串的数量,一般选用原则,不超越200许,都下VARCHAR2,例如:学校、姓名。虽然以Oracle中以的是VARCHAR2,不过在外数据库中,例如MySQL使用的虽是VARCHAR。

delete * from emp30;
并无会见即时用数据删除,同时这些数据所占据的资源不会见立即释放,
所以截断表概念就是去除数据,并释放资源,并且不克为此工作去恢复

        对于数值型的数量应用NUMBER,NUMBER有点儿种分类:
            NUMBER(n):表示整数,如果看不好记,那么可以运用int替代。
         
  NUMBER(n,m):表示小数,其中m表示小数各类,n-m表示整数各项,可以以float替代。

truncate table emp30;
#####################################

     
  如果想如果表示日期时在Oracle中采用DATE就好了,不过从今习惯及说话,不同之数据库中DATE方式各异,有些数据库只含日期,但是非含时间,而TIME包含了光阴,不带有日期,只有TIMESTAMP才能够包含日期,时间以及毫秒。

发明还命名(oracle特色)

       
如果表示挺文本的数据,那么就采取CLOB操作,例如存放一管辖长篇小说,此类型最多好保留4GB的文字量大小。

ddl主要功能是创建对象,
当用户进行对象操作的时段,oracle提供有一个数量字典,用于记录有目标的状态
CRUD是因于开计算处理时的加码(Create)、读取查询(Retrieve)、更新(Update)和去(Delete)几单单词的首字母简写。主要为用在叙软件系统被数据库或者持久层的基本操作功能。
用户不克直接操作数据字典的crud,只能通过命令就。

       
如果保留的是二进制文件,一般采用BLOB,也堪保存4GB的图形、音乐以及录像等,但是一般来讲,很少有人直接运用它,因为效率低。

支出大多数状下采取tab就可以了
select * from tab;
下面这发明记录了资源占用情况
select * from user_tables;

        常用色:VARCHAR2、NUMBER、DATE、CLOB。

说明还命名的经过是创新数据字典的历程。
用作oracle自己之特点,知道即便实行了,尽量别用。
随项目竣工了,运行正常,突然而再命名一个表名,想想都是可怕的。
rename emp30 to emp90;

    1.2 表的缔造
       
表的始建属于DDL(数据定义语言)范畴,严格来讲,每创建的数据表或者是表中的列都属于数据库中的靶子,表对象的创建语法以create
table进行定义。

 

        表的创造语法:
            create table 用户名.表名称(
                字段名称    字段类型    [default] 默认值,
                字段名称    字段类型    [default] 默认值,
                ……
            );

################################

        对于表名称及列名称的定义要求如下:
            必须为字母开头;
            长度为1~30个字符;
            表名由字母数字下划线#$组成,要显现称知意;
            对同一个用户不可知采取同一之表名称;
           
不克使Oracle中的保留字,想CREATE、SELECT等都是作保留字存在的。

表的删减
去除数据表属于数据库对象的操作
drop table 表名;
自打10g开班,删除表不是直删除,而是先放到回收站里。
用于恢复,或是彻底删除,这名叫闪回技术(flashback)。
当旁数据库里,都未可能提供有批量去数据表的操作。

        用户称以曰模式名称,主要是以手上登陆用户为主。

闪回技术(理解),回收站,(oracle特色)
用户所有查看,恢复,彻底剔,清空的操作
翻两种方法:
show recyclebin;
select * from user_recyclebin;
闪转过来
flashback table mydept to before drop;
到底剔除
drop table mydept purge;
删除回收站中的相同张表
purge table emp10;
清空
purge recyclebin;
扭曲收站特性是oracle特色。

    1.3 创建数据表
        create table member(
            mid number(5), 
            name varchar2(50) default ‘无名氏’,
            age number(3),
            birthday date default sysdate,
            note clob
        );

############################

       
此时开创的申中发出三三两两个字段的内容装了默认值,如果想要确定数据表是否有,那么就算得采用tab查询。
            select * from tab;
        查看member表的说明结构:
            desc member;
        插入记录:
            insert into member(mid, name, age, birthday, note) values(1,
‘王彦超’, 21, to_date(‘2000-01-01′,’yyyy-mm-dd’),’哈哈哈哈’);

修改表结构(了解)
每当支付被,发现说明中遗失了排,多矣排,或列设计不客观,这时有点儿种做法:
1.修改表结构。一部分口支持这,这个应该提供,但有些未提供,如db2.
2.勾重建。一部分人数支持之
为便利数据库的下,往往设计人员会面于有一个数据库脚本,
用以快速回升数据库,脚本包含以下几单内容:
1.勾原有的数据表,
2.又创设新的数据表,
3.创造测试数据,
4.展开作业提交。
本子样例:
–删除数据表
drop table member purge;
purge recyclebin;
–创建数据表
create table member(
    mid number,
    name varchar2(20)
);
–测试数据
insert into member(mid,name) values(1,’aa’);
insert into member(mid,name) values(2,’bb’);
–提交事务
commit;

            insert into member(mid, name, age, birthday, note) values(2,
‘张三’, 23, to_date(‘2001-02-02′,’yyyy-mm-dd’),’啊什么什么啊’);

改就发出列
脚就冲此本子实现数据表的修改操作:
需求
苟呢name字段设置默认值,如下新栽数据尚未name,就吧空。
insert into member(mid) values(3);
实现,一行语句只变动一个列。
alter table member modify(name varchar2(30) default ‘11111’);
insert into member(mid) values(4);这生便有默认值了。
也表增加列
alter table member add(loc varchar2(10));
删除列,删除操作知道即便尽了,能无用便别用。
alter table member drop column 列名;

    1.4 表的复制
       
在Oracle中除可以利用DDL创建新的数据表之外,也支撑复制已有些数据表的操作。
       
表的复制操作为属表底创造,不过它们是依据一个子查询的结果(行和排的集合)创建的新数据表。
        语法:
            create table 表名称 as 子查询;

总结
1.常用之数据类型,varchar2,number,date,clob
2.ddl对象的操作语法:
    创建对象    create 对象类型 对象名称…
    删除对象    drop 对象类型 对象名称…
    修改对象    alter 对象类型 对象名称…

        将emp表复制位emp2表:
            create table emp2 as select * from emp;
            以上是复制了一如既往张表的全部内容,但是呢堪只有复制部分内容。

#################################

        将10机关的雇员复制到emp3表:
            create table emp3 as select * from emp where deptno = 10;

五种约束的使
自律之田间管理

       
以上且是带有数据的复制,如果说现在要求仅仅拿emp表结构复制,而不复制数据,该怎么操作?
        只能修一个永久不满足的准:
            create table emp4 as select * from emp where 1 = 2;

数据表本身就支持数据的囤积操作
可于数据库及为保证数据表中多少的完整性,
即:需要满足若干条件以后才得以开展操作
譬如:某些数据未克重复,如身份证,手机号等。
本质上来讲有六种植约束,
数据类型(也总算一栽,如数字型不能够保存字符串。)
非空约束
唯约束
主键约束
自我批评约
外键约束(重点所在)
约是平等把双刃剑,它确实可保证数据合法后才可保存,
可是如以相同摆放表中装置了了多之约,更新的速就会老缓慢。
就此在出中,某有些说明的操作还是强烈建议交给程序逻辑来拍卖。

        除了针对实体表的复制外,也可本着查询结果开展复制:
            将部门的统计信息保存及department表中:
                create table department as select D.deptno, D.dname,
D.loc, count(E.empno) count, sum(E.sal + nvl(E.comm,0))
sum, round(avg(E.sal + nvl(E.comm,0)),2) avg, max(E.sal) max, min(E.sal)
min from emp E, dept D where E.deptno(+) = D.deptno group by D.deptno,
D.dname, D.loc order by D.deptno;

非空约束(not null)
表明中之某部一个字段内容无同意吗空。
排的后长not null就足以了。

       
表的复制操作,只要是行与列的查询结果,那么就可以用那定义也数据表。

–删除数据表
drop table member purge;
–创建数据表
create table member(
    mid number,
    name varchar2(20) not null
);
代表name这个列上的数量不可知啊要为空。

    1.5 数据字典
     
  在Oracle中数据表是好给另行命名的,但是就此可改名字,主要还是由于Oracle的蕴藏结构决定的。所以于就学修改名字前,首先了解一下数码字典的概念。

下是不错的
insert into member(mid,name) values(1,’aa’);
下面两个是不对的
insert into member(mid,name) values(2,null);
insert into member(mid) values(3);
于装置了非空约束后,如果出现了违反非空约束之操作,
这就是说会自动地准确地稳定及模式.对象.列

       
在Oracle中特意提供了一样组数用于供记录数据库对象信息、对象组织、管理信息、存储信息的数据表,那么这种类型的表明就叫做数据字典,在Oracle中一起定义了点儿接近数据字典:

###############################################

            静态数据字典:
                这类数据字典由表和视图所成,这些视图分为三类:
                    user_*:存储了有当前用户之靶子信息。
               
    all_*:存储所有当前用户可看的目标信息(某些对象或未属于这个用户)。
                   
dba_*:存储数据库被拥有目标的音(数据库管理员操作)。
            动态数据字典:
               
随着数据库运行而不断更新的数据表,一般用来保存内存和磁盘状态,而这好像数据字典都盖“v$”开头。

唯约束(unique,UK)
唯约束之特点是于某某平等排上的情未允出现重复

     
  所有的数据表都属于数据库对象,每当创建同摆放数据表的当儿,会自行在指定的数字典表执行同样长增加语句(隐式),相应的勾会隐式执行delete,而改会执行update,但是这些数据字典的多少操作才会通过命令就,不克使用SQL语句完成。

–删除数据表
drop table member purge;
–创建数据表
create table member(
    mid number,
    name varchar2(20) not null,
    email varchar2(30) unique
);

       
静态数据字典,要想清楚合底数据表对象,可以利用user_tables这个数量字典:
            select * from user_tables;

下面是不易的
insert into member(mid,name,email) values(1,’aa’,’aa@qq.com’);
insert into member(mid,name,email) values(2,’bb’,’bb@qq.com’);

    1.6 修改表名称
       
在Oracle中,为了有利于用户指向数据表进行保管,所以特意提供了修改表名称的操作。
        语法:
            rename 旧表名 to 新表名;
        将member修改为wycuser表:
            rename member to wycuser;

下是保存重复的情
insert into member(mid,name,email) values(3,’cc’,’bb@qq.com’);

     
  当起其他DDL操作时,都见面活动提交业务,无法运用rollback回滚操作,所有的DDL操作不深受工作之主宰。
       
在更新操作的过程被,如果起了一点创建表(DDL)的操作,这个时刻对工作而言,是会见自动提交的。

SQL> insert into member(mid,name,email) values(3,’cc’,’bb@qq.com’);
insert into member(mid,name,email) values(3,’cc’,’bb@qq.com’)
*
ERROR at line 1:
ORA-00001: unique constraint (SCOTT.SYS_C0012119) violated

    1.7 截断表
     
  如果说现在表中的笔录都无欲了,可以透过delete来删除表中的全部内容,但是去时所占有的资源(表空间资源、约束、索引等)都非会见即时释放,所以该操作会执行好丰富时,如果想只要这释放资源,只会截断表。
        语法:
            truncate table 表名;
        截断wycuser表:
            truncate table wycuser;
     
  表一旦受截断下,所占有的上上下下资源都用释放,所以无法通过rollback回滚进行复原。
        delete可以经回滚恢复数据。

封锁为称之为一个对象,只要设置了律,oracle会自动创建对象,既然是目标,那么
有着的对象会于数额字典中保存。
select * from user_constraints;
col owner for a20;
col constraint_name for a20;
col table_name for a20;
select owner,constraint_name,constraint_type,table_name from
user_constraints;
只是告诉用户约是于哪一样摆表上的,并无说明是以哪一个排列上的。此时如因此到其他一个字典:
select * from SYS.USER_CONS_COLUMNS;

    1.8 删除表(重要)
        表的勾操作是一个怪关键的定义。
        如果一旦去除表,直接采用“DROP TABLE 表名”即可。
            drop table wycuser;

发觉唯一约束并无像非空约束那样,可以老扎眼的报告用户是哪位列上出现问题,所以为了缓解者问题,
可当律创建的时段指定名字

            betway必威 2

约简写_字段名
uk_email的来举行啊之约束之名

            select * from wycuser;

创唯一约束,同时装约名称。
–删除数据表
drop table member purge;
–创建数据表
create table member(
    mid number,
    name varchar2(20) not null,
    email varchar2(30),
    constraint uk_email unique(email)
);

            betway必威 3

SQL> insert into member(mid,name,email) values(3,’cc’,’bb@qq.com’);
insert into member(mid,name,email) values(3,’cc’,’bb@qq.com’)
*
ERROR at line 1:
ORA-00001: unique constraint (SCOTT.UK_EMAIL) violated

            select * from tab;

因而,只要进行数据表创建时,约束一定要安装名字,约束的名不克重。
而今,设置了唯一约束,但保留之数据为null.下面的好正常插入多次。
insert into member(mid,name,email) values(3,’cc’,null);
null不让唯一约束的震慑。不以唯一约束之判断范畴内。

            betway必威 4

################################################

           
现在表的确是去了,但是发现除去后会发出“残余”,这是Oracle的闪回技术。

主键约束(primary key,pk)
主键约束=非空约束+唯一约束 组合
也就是说设置为主键的排列,不克为空,不可知重复。

    1.9 小结
        常用数据类型:NUMBER、VARCHAR2、DATE、CLOB;
        数据表的创立属于数据库对象的开创;
        创建表的语法:CREATE TABLE …;
     
  表的复制(创建)属于同一种植DDL操作,无法使用工作回滚,因为事务会自动提交;
        通过表明的复制操作,也可将一个子查询转化为数量表来保存。

–删除数据表
drop table member purge;
–创建数据表
create table member(
—  mid number primary key,
    mid number,
    name varchar2(20) not null,
    constraint pk_mid primary key(mid)
);

2、闪转技术(FlashBack)
    目标:
        理解闪回技术的最主要功用;
        掌握闪转命令的施用。

多是的数码
insert into member(mid,name) values(1,’aa’);
加误的数额
insert into member(mid,name) values(null,’aa’);
ORA-01400: cannot insert NULL into (“SCOTT”.”MEMBER”.”MID”)
insert into member(mid,name) values(1,’bb’);
ORA-00001: unique constraint (SCOTT.PK_MID) violated
鲜只错误说明主键是非空与唯一的三结合。
当99%的情景下一样张表只定义一个主键信息,但自从sql语法的角度来讲是许定义多单名列主键的。
这么的操作往往叫复合主键。
复合主键多数请勿用,只是看看,知道即便执行。当半只字段完全重复时才表示违反约束。
–删除数据表
drop table member purge;
–创建数据表
create table member(
—  mid number primary key,
    mid number,
    name varchar2(20),
    constraint pk_mid primary key(mid,name)
);

   
闪转技术是Oracle10g从此所提供的相同种植新的数码保障办法,在Oracle10g事先,如果用户不小心用表误删,那么就是象征表被彻底去除了,只能够由此备份文件进行回复。但是Oracle10g以后,为了解决这种误删除所带的数丢失问题,专门提供了一个同Windows操作系统类似之回收站功能,即:数据表删除的话,会默认先将那个保存在“回收站”中,此时要用户发现除去有错误,则好直接通过回收站开展说明底复。

加对数据
insert into member(mid,name) values(1,’aa’);
insert into member(mid,name) values(1,’bb’);
insert into member(mid,name) values(2,’aa’);
搭误数据
insert into member(mid,name) values(1,’aa’);

    2.1 查看回收站数据
        在Oracle10的下只需要经过如下命令就可查看回收站:
            show recyclebin;
       
但是打Oracle11g启幕,这个命令如果当sqlplus中采用,结果虽是闪退。

数据库设计首先法:不要使复合主键,即同摆设表就同一摆主键。

        所以最为安全之做法要按照SQL语句的方法进行查看操作:
            select * from recyclebin;
        但是发现查询到的字段太多,所以可以指定常因此字段:
            select object_name, original_name, operation, type from
recyclebin;

############################################

    2.2 恢复表
       
如果发现有点表被误删,那么好展开回复,而这恢复过程就是是闪回。
            flashback table emp2 to before drop;

自我批评约(check,ck)
反省约指的是以数据列上设置有些过滤条件,当了滤条件满足的早晚才可展开保存,如果无饱
则产出错误。

    2.3 彻底删除表
       
在Windows中回收站提供干净剔的成效,也就是是匪进入回收站,而是直接去所有之多寡,在Oracle中为支持是操作。
            drop table emp2 purge;
        当再次实施flashback table emp2 to before
drop;语句时会见现出以下错误:
            betway必威 5

–删除数据表
drop table member purge;
–创建数据表
create table member(
—  mid number primary key,
    mid number,
    name varchar2(20),
—  age number(3) check,
    age number(3),
    constraint pk_mid primary key(mid),
    constraint ck_age check(age between 0 and 350)
);

    2.4 删除回收站中的数据表
        假设当前回收站中起wycuser表:
            purge table wycuser;

–增加对数据
insert into member(mid,name,age) values(1,’aa’,40);
–增加误数据
insert into member(mid,name,age) values(2,’aa’,400);

    2.5 清空回收站
        purge recyclebin;

从骨子里开发来讲,外键与非空用的不过多。检查约往往无会见安装,而检查还见面经过序来就。

       
以上只是对于表底操作,实际上对于闪回的操作,还足以开展创新数据的恢复。(扫描点)

###############################

       
但是闪回操作是得空间的,如果Oracle数据库发现空间不足,则会自行抢占闪转空间,最好的做法还是做好数据库的共同体备份。

外键约束(foreign key fk)
外键约束主要是以父子表关系着体现的如出一辙栽约束操作。
即子表中某个一个字段的始末由父表来决定其以的数量范围
比如:一个口出多本书,需要规划简单摆放表,
首规划--不使用外键

    2.6 小结
       
闪转技术是当Oracle10g新增的功能,是平种预防表被误删的操作手法;
        掌握表的干净去除操作;
        掌握清空回收站操作。

–删除数据表
drop table member purge;
drop table book purge;

3、修改表结构
   
数据表属于Oracle数据库对象,对于数据库对象,其操作的语法就止生三种植:
        创建:create 对象类型 名称
        删除:drop 对象类型 名称
        修改:alter 对象名称 名称
   
如果可能,尽量不要以数据表的修改操作,在开中需要修改表结构怎么处置?
        删除表,重新建。

–创建数据表
create table member(
—  mid number primary key,
    mid number,
    name varchar2(20),
    constraint pk_mid primary key(mid)
);
create table book (
    bid number,
    bname varchar2(30),
    mid number
);

    目标:
        了解表中列的改动、增加、删除操作;
        位表添加注释;
        设置可见、不可见字段(Oracle12c)。

–增加对数据
insert into member(mid,name) values(1,’aa’);
insert into member(mid,name) values(2,’bb’);
insert into book(bid,bname,mid) values(10,’java’,1);
insert into book(bid,bname,mid) values(20,’c’,1);
insert into book(bid,bname,mid) values(30,’python’,2);
insert into book(bid,bname,mid) values(40,’oracle’,2);
–增加一长数据
insert into book(bid,bname,mid) values(50,’linux’,8);
然随即长长的数据未切合逻辑,因为号码吧8之分子不在,但是呢能够插入成功,就是坐尚未外键约束。

    3.1 准备操作
       
为了方便演示数据表的改动操作,下面首先编写如下的数据库创建脚本,并透过此表进行操作:
            — 删除数据表
            drop table member purge;
            — 创建数据表
            create table member(
                mid    NUMBER,
                name VARCHAR2(50) DEFAULT ‘无名氏’
            );
            — 增加测试数据
            insert into member (mid, name) values (1, ‘张三’);
            insert into member (mid, name) values (2, ‘李四’);
            insert into member (mid, name) values (3, ‘王月清’);
            — 提交业务
            commit;
     
  以后在工作中也要是修数据库脚本,组成部分也一样:删除、创建、测试数据、事务提交。

book表中的mid列的情取值应该由member表中之mid列来支配,所以可以运用外键约束来化解者问题。
脚再创建表及多数量。
–删除数据表
drop table member purge;
drop table book purge;

    3.2 为说明中加进字段
       
为曾经出数据表增加字段的时段也像定义数据表一样,需要被起字段名称、类型、默认值,格式如下:
            alter table 表名称 add (字段名称 字段类型 default 默认值,
…… );
        范例:向member表中增三只字段
            alter table member add (age number(3));
            alter table member add (sex varchar2(10) default ‘男’);
            alter table member add (photo varchar2(100) default
‘nophoto.jpg’);

–创建数据表
create table member(
—  mid number primary key,
    mid number,
    name varchar2(20),
    constraint pk_mid primary key(mid)
);
create table book (
    bid number,
    bname varchar2(30),
    mid number,
    constraint fk_mid foreign key(mid) references member(mid)
);

     
  如果多的下从不装默认值,那么所有数据行都是null,如果生安默认值,那么富有数据行都会变成默认值的内容。

book中之外键mid列参考member表中的mid列,也就是说book.mid列取值由member.mid来支配。
SQL> insert into book(bid,bname,mid) values(50,’linux’,8);
insert into book(bid,bname,mid) values(50,’linux’,8)
*
ERROR at line 1:
ORA-02291: integrity constraint (SCOTT.FK_MID) violated – parent key
not found

    3.3 修改表中的字段
       
如果发现同样张表中的某平排设计无成立的时候,也足以本着曾部分列进行改动:
            alter table 表名称 modify (字段名称 字段类型 default
默认值);
        范例:将name字段的长修改为30,将sex字段的默认值修改也女性
            alter table member modify(name varchar2(30));

对外键而言,最麻烦的是她在来平等堆放的克。
限定1:在去父表之前用先去掉它所对应之所有子表后才足以去除。
然稍事时候,一些勿客观的设计者,将A表作为B表的父表,又拿B表作为A表的父表,即相互依赖,所以去不了
啊夫,oracle专门供了一个强制删除父表的操作,删除后非关注子表

            alter table member modify(sex varchar(3) default ‘女’);

drop table member purge;不行
drop table member cascade constraint;可以
强制删除尽量不以,尽量要论先后顺序删除。
界定2:子表外键的父表列,必须装为唯一要主键约束

    3.4 删除表中的字段
        如果今天想只要抹表中的一个排,可以经如下语法完成:
            alter table 表名称 drop column 列名称;
        范例:删除member标中的photo和age字段
            alter table member drop column photo;

限制1同限定2实质上是对发明结构的限
克3:如果父表中之之一平实行数据发生相应的子表数据,那么要先行去子表中之一切数目。

            alter table member drop column age; 

–删除数据表
drop table book purge;
drop table member purge;

    3.5 设置无用字段
     
  一定要牢记,在展开删减操作的下,至少保留一个排列,如果说某某数表数据量很酷,执行这种去操作,性能损耗是好大的,所以多时候为了保证表在怪数据量的景象下删除操作可以采用,又不影响表的正常化使用,可以以说明中列设置也无效的排列。

–创建数据表
create table member(
—  mid number primary key,
    mid number,
    name varchar2(20),
    constraint pk_mid primary key(mid)
);
create table book (
    bid number,
    bname varchar2(30),
    mid number,
    constraint fk_mid foreign key(mid) references member(mid)
);

        将表明中字段设置为无用状态:
            alter table 表名称 set unused (列名称);
            alter table 表名称 set unused column 列名称;

–增加是数据
insert into member(mid,name) values(1,’aa’);
insert into member(mid,name) values(2,’bb’);
insert into book(bid,bname,mid) values(10,’java’,1);
insert into book(bid,bname,mid) values(20,’c’,1);
insert into book(bid,bname,mid) values(30,’python’,2);
insert into book(bid,bname,mid) values(40,’oracle’,2);

        范例:将sex列和name列设置成无效状态。
                alter table member set unused (sex);
                alter table member set unused (name);
            或者
                alter table member set unused column sex;
                alter table member set unused column name;

SQL> delete from member where mid=1;
delete from member where mid=1
*
ERROR at line 1:
ORA-02292: integrity constraint (SCOTT.FK_MID) violated – child record
found
如果非思叫子表的赘,那么好利用级联的操作关系。
级联删除与级联更新
级联删除,在概念时,加入 on delete cascade
当场去父表数据经常,子表数据会同时删除
–删除数据表
drop table book purge;
drop table member purge;

    3.6 删除无用列
        假设现在sex列和name列都早就于装置为无用列,执行删除操作:
            alter table member drop unused columns;

–创建数据表
create table member(
—  mid number primary key,
    mid number,
    name varchar2(20),
    constraint pk_mid primary key(mid)
);
create table book (
    bid number,
    bname varchar2(30),
    mid number,
    constraint fk_mid foreign key(mid) references member(mid) on delete
cascade
);

        修改操作作为SQL的正经语法,了解即可,不欲深刻。

–增加对数据
insert into member(mid,name) values(1,’aa’);
insert into member(mid,name) values(2,’bb’);
insert into book(bid,bname,mid) values(10,’java’,1);
insert into book(bid,bname,mid) values(20,’c’,1);
insert into book(bid,bname,mid) values(30,’python’,2);
insert into book(bid,bname,mid) values(40,’oracle’,2);
此刻就可去除了
SQL> delete from member where mid=1;

4、注释
   
程序中利用注释可以帮使用者更鲜明的询问代码的图,而在Oracle数据库里也足以为表或列上加注。
    语法:
        comment on table 表名称 | column 表名称.列名称 is ‘注释内容’;

1 row deleted.

    4.1 定义数据库创建脚本
        — 删除数据表

级联更新
去除父表数据的时节,对应的子表数据的外键列就装为null.使用 on delete
set null

        drop table member purge;

–删除数据表
drop table book purge;
drop table member purge;

        –创建数据表

–创建数据表
create table member(
—  mid number primary key,
    mid number,
    name varchar2(20),
    constraint pk_mid primary key(mid)
);
create table book (
    bid number,
    bname varchar2(30),
    mid number,
    constraint fk_mid foreign key(mid) references member(mid) on delete
set null
);

        create table member(

–增加是数据
insert into member(mid,name) values(1,’aa’);
insert into member(mid,name) values(2,’bb’);
insert into book(bid,bname,mid) values(10,’java’,1);
insert into book(bid,bname,mid) values(20,’c’,1);
insert into book(bid,bname,mid) values(30,’python’,2);
insert into book(bid,bname,mid) values(40,’oracle’,2);

            mid int,

delete from member where mid=1;

            name varchar2(50) default ‘无名氏’,

统筹时因需要选择级联删除与级联更新。

            age number(3),

#########################################

            birthday date

修改约束(了解)
以说明结构的改动还在足容忍的面里,那么约束的改动是绝100%禁的。
拥有的约都设以表定义的时节便安装完整。不要闹修改的操作。
哪怕好比生了只智障孩子,后天再次怎么治疗,也未尝啥用,那起来便不要生,一定要三思而后生。

        );

create table member(
    mid number,
    name varchar2(20)
);

        — 提交业务

insert into member(mid,name) values(1,’aa’);
insert into member(mid,name) values(1,’bb’);
insert into member(mid,name) values(2,null);

        commit;

alter table member add constraint pk_mid primary key(mid);
SQL> alter table member add constraint pk_mid primary key(mid);
alter table member add constraint pk_mid primary key(mid)
                                  *
ERROR at line 1:
ORA-02437: cannot validate (SCOTT.PK_MID) – primary key violated
盖此时表中就是同样编号的数量了,此时凡匪容许创造约束成功之。
解决办法是去重复数据,再创约束就可以,再补偿加重复数据就是是匪容许的
delete from member where mid=1;

    4.2 为MEMBER表添加注释
        在Oracle中提供了一个“user_tab_comments”数据字典:
            select * from user_tab_comments where table_name =
‘MEMBER’;
        此时可看其中没任何信息,查询时用小心的凡表名要大写。 

alter table member add constraint pk_mid primary key(mid);
这样的语法是匪克填补加非空约束之,其它四栽是好的。
假使想使吧字段增加非空约束,那么只能凭借修改表结构的法就。
alter table member modify(name varchar2(20) not null);
可是得管表中数量没有空的数,否则添加非成功。
SQL> alter table member modify(name varchar2(20) not null);
alter table member modify(name varchar2(20) not null)
*
ERROR at line 1:
ORA-02296: cannot enable (SCOTT.) – null values found
唯其如此优先去空数据,再补充加非空约束即可。
delete from member where name is null;
据此基本上是不曾意义的,数据都不见了,再修改有什么用呢

        添加注:
            comment on table member is ‘我是注释’;

去约束
alter table member drop constraint pk_mid;
这会儿更续加重复数据,就会加进去了。
insert into member(mid,name) values(1,’aa’);
insert into member(mid,name) values(1,’bb’);

    4.3 为mid列添加注释
       
除了查看表的笺注信息以外,还可以查阅列的诠释信息,使用“user_col_comments”查看:
            select * from user_col_comments where table_name =
‘MEMBER’;

创建表,约束而一同完成。

        添加注:
            comment on column member.mid is ‘我吗是注释’;

############################################

       
一般以付出被都见面提供一个对应的筹划文档,文档中貌似还见面提供解释信息。

 

5、设置可见、不可见字段
   
如果某些数据排列的情不待采取,那么直接为其安null值数据即可,但是这样一来有或会见冒出一个粗问题,例如:在同等摆设数据表设计之上,考虑到下需要加多个列,那么这些列如果提前加的话,那么即便发出或致开发人员的麻烦(不知道这些列是举行啊的),为夫即冀以这些临时无动的列定义为不可见的状态,这样开发人员在浏览数据常常,只需要浏览有用之有的即可。当需要这些列时,再回复该可见状态,在Oracle12c之前,这些特征是免支持的,而自Oracle12c开始为好用户进行说明管理,提供了不可见列的采用,同时用户为足以用一个凸现列修改为不可见的状态。

    5.1 创建同布置即数据表
        — 删除数据表

        drop table mytab;

        — 创建数据表

        create table mytab(

            mid number,

            name varchar2(30)

        );

        — 提交业务

        commit;

    5.2 隐藏字段
       
如果说name字段是一个临时性未会见用的字段,想以她隐藏,那么现在这种气象,如果直白实施长操作,必须设置mid和name,观察语法:
            insert into mytab values(1);
        会出错,因为价值与列非般配。
        将name列修改为不可见状态:
            alter table mytab modify (name invisible);
        查看表结构:
            desc mytab;
        如果履行:insert into mytab(1);,那么可成功施行了。 
      
 此时name列就未会见以表明结构及拓展展示了,但是于数额字典上“user_tab_columns”中得翻:
            select * from user_tab_columns where table_name =
‘MYTAB’;

    5.6 字段恢复可见状态
        将name列变为可见状态:
            alter table mytab modify(name visible);
       
除了以创建表之后修改可见与不可见状态之外,在创建表的下啊堪一直装:
            create table mytab(
                mid number,
                name varchar2(30) invisible
            );

    5.7 小结
        表创建之后好应用alter进行修改;
        在表建立时可以增长注释信息;
        Oracle12c增加了可用、不可用列的设置支持。

6、表管理
    表空间的管制属于Oracle中DBA的知识。

    目标:
        了解表空间的关键作用;
        了解表空间的创造和用。

   
数据库的运转需要靠让操作系统,而数据库本身为保留于网的磁盘上,所以当用户为数表中保存数据常常,最终数额也或保留于了磁盘上,只不过这些数据是依一定的格式进行封存。

    Oracle数据保存于磁盘上之格式如下图所示:

        betway必威 6

    在数据库数据和磁盘数据里在了个别栽结构:
       
逻辑结构:Oracle中所引入的组织,开发人员所操作的都只对于Oracle的逻辑结构。
       
物理构造:操作系统所独具的储存结构,而逻辑结构及大体构造的更换由Oracle数据库管理网来成功。

   
在商业利用中,所有的操作都是盖操作系统也前提的,所以数据库一定是设置于操作系统及之。数据库被的多寡,也终将是保存在磁盘上之。

   
在Oracle中,数据库也为称为实例(Instance,图书馆),而数据库中维护的凡发明空间(书架),那么每张表都设保留在表空间里(图书)。

   
表空间是Oracle数据库中最深之一个逻辑结构,每一个Oracle数据库都见面出于多独说明空间所组成,而每一个申明空间由多只数据文件组成,用户所开创的数据表也统一且受发明空间所管理。表空间与磁盘上的数据文件对应,所以一直跟物理存储结构有关。而用户以数据库中所创造的表、索引、视图、子程序等还受发明空间保存及了不同的区域外。

    在Oracle数据库里一般有三三两两近乎表空间:
        系统阐发空间:
           
是以数据库创建时与数据库一起成立起的,例如:用户用于撤销的事务处理,或者用的数额字典就保存于了系阐明空间中,例如Syste或Sysaux表空间。
        非系统阐发空间:
           
由有指定管理员权限的数据库用户创建,主要用于保存用户数量、索引等数据库对象,例如:USERS、TEMP、UNDOTBS1等表空间。

    6.1 语法
        如果只要想进行不系统阐明空间的创建,可以利用如下语法完成:
            create [temporary] tablespace 表空间名称
            [datafile | tempfile 表空间文件保留路径 … ] [size
数字[k | m]]
            [autoextend on | off] [next 数字 [k | m]]
            [logging | nologging];

        本程序各个创建子句的相干认证如下所示:
            datafile:保存表空间的磁盘路径,可以安装多独保存路径。
            tempfile:保存临时表空间的磁盘路径。
            size:开辟的长空大小,其单位发生K(字节)和M(兆)。
           
autoextend:是否为全自动扩展表空间,如果也ON则表示足自行扩展表空间大小,反的为OFF。
            next:可以定义表空间的增长量。
            logging |
nologging:是否要针对DML进行日志记录,记录下之日志可以用于数据恢复。(临时表空间不克以该令)

    6.2 表空间——范例
        创建一个wyc_data的数据表空间:
            create tablespace wyc_data datafile
‘D:\wyc\wyc_data01.dbf’ size 50M, ‘E:\wyc\wyc_data02.dbf’ size
50M autoextend on next 2M logging;

        当用SCOTT用户执行该令时,会提醒权限不足:

            betway必威 7

        对于表空间应该由管理员进行创办,所以当使SYS用户登陆。
        使用SYS执行该令时,会出现创建文件漏洞百出的唤起:

            betway必威 8

        因为目录不有,首先使创好文件夹。

    6.3 表空间——范例
        创建一个wyc_temp的临时表空间:
            create temporary tablespace wyc_temp tempfile
‘D:\wyc\wyc_temp01.dbf’ size 50M, ‘E:\wyc\wyc_temp02.dbf’ size
50M autoextend on next 2M;

        需要专注的是临时表空间不克添加日志。

       
这个时节一起创建了简单单说明空间(数据表空间与临时表空间),同时就点儿独说明空间保存于了不同之磁盘上。创建了以后的表空间,一定会于数字典里进行连锁内容的记录。(CREATE开头的还是创建对象)

       
如果只要想查看表空间(管理员权限),那么即使得用dba_tablespace数据字典查看:
            select * from dba_tablespaces;
            select tablespace_name, block_size, extent_management,
status, contents from dba_tablespaces;

            betway必威 9

    6.4 Oracle中之默认表空间
       
在Oracle数据库中默认提供了以下几单说明空间,各个表空间的图如下所示:
            SYSTEM表空间:
             
  在一个数据库被至少发生一个阐明空间,即SYSTEM表空间。创建数据库时须指明表空间的数据文件的风味,即数据库文件名称、大小。SYSTEM主要是储存数据库的数据字典,在Oracle系统表空间受到贮存全部PL/SQL程序的源代码和编译后的代码,例如存储过程、函数、包、数据库触发器。如果一旦大量施用PL/SQL,就相应设置足够大之SYSTEM表空间。
            SYSAUX表空间:
               
是SYSTEM表空间的辅助表空间,许多数据库的家伙和可选组件将其目标存储在SYSAUX表空间内,它是无数数据库工具和可选组件的默认表空间。
            USERS表空间:
                用于存储用户的多寡。
            UNDO表空间(UNDOTBS1表空间):
                用于工作之回滚、撤销。
            TEMP临时表空间:
               
用于存放Oracle运行着待现存放的数额,如排序的中等结果相当。

    6.5 查看数据的发明空间数据字典
       
发现以dba_tablespaces数据字典只能够查阅数据库表空间的信息,并无能够查阅每个表空间所花的仓储信息,而且这点儿好像表空间(数据表空间及临时表空间)使用的数据字典是殊之,可以以dba_data_files和dba_temp_files两只数据字典进行查:
            select * from dba_data_files;
            select * from dba_temp_files;

    6.6 使用说明空间
        表空间的利用主要是在开创数据表的上用。
        创建数量表并使用一定表空间:
            create table 用户名.表名称(
                字段名    字段类型,
                ……
            ) tablespace 表空间名称;

        创建同张表,让那个行使wyc_data表空间:
            create table table1(
                id int
            ) tablespace wyc_data;

    6.7 小结
        数据表受到表空间的田间管理;
        表空间分为两像样:数据表空间、临时表空间。

第二、完整性约束

1、数据库完整性约束简介
        目标:
            理解数据库完整性约束之意图
            理解数据库被的各国约束之企图
       
完整性约束是保险用户指向数据库所举行的改不见面坏数据的一致性,是保安数量对和相容性的平种手段。
        例如:
            如果用户输入年龄,则年龄肯定不克是999;
            如果用户输入性,则不得不设置“男”或“女”。

    1.1 维护完整性
       
在一个DBMS之中,为了能保障数据库的完整性,必须能够提供以下的几种植支持:
            提供定义完整性约束原则机制:
               
在数据表上定义规则,这些规则是数据库被之数码要满足的语义约束规范。
            提供完整性检查的办法:
                在创新数据库时检查更新数据是否满足完整性约束规范。
            违约处理:
               
DBMS发现数违反了完整性约束原则后使的违约处理作为,如拒绝(NO
ACTION)执行该操作,或者级联(CASCADE)执行另外操作。

    1.2 主要约分类
        在开中可以采取以下的五栽约束进行定义:
           
非空约束:如果利用了非空约束的话,则以后者字段的始末不允许设置为null值。
            唯一约束:此列的情不允出现还。
           
主键约束:表示一个唯一的标识,例如:人员ID不克更,且该字段不允为null。
            检查约:用户自行编排设置情节的反省标准。
           
主——外检约束(参照完整性约束):是于个别张表上进行的涉及约束,加入关联约束下虽有父子关系。

       
数据库本身留给用户安装的起五栽约束,但是严格来讲,还有同种植隐式约束,例如:数据类型。假设年龄字段的类型是NUMBER,那么一定不可知装为字符串。

    1.3 小结
        理解五种约束的图。

2、非空约束
    目标:
        掌握非空约束的要害定义操作。

   
在正常状况下,null是每个属性之官方数据值,如果说现在某个字段不嫩为null,且必须在多少,那么即便好靠非空约束来拓展支配,这样以数码更新时,此字段的始末出现null时便会见生出错误。

    2.1 非空约束——范例
        定义member表,其中姓名不允为空:
            create table member ( mid int, name varchar2(20) not
null);
        如果要安装非空约束,只需要在概念列的早晚背后加一个not
null即可。

        向member表中加进是数据:
            insert into member(mid, name) values (1, ‘王彦超’);
            正确数据好正常保存。

        向member表中长误数据:
            insert into member(mid, name) values (2, null);
            insert into member(mid) values (3);
        此时面世了一个错误:

            betway必威 10

       
此时好发现错误信息由“用户名”、“表名称”、“字段名称”三个组成部分组成,也就是说这个错误的音信已经准确之喻了用户哪里来题目,非空约束带来的消息是坏完整的。

    2.2 小结
        非空约束不允许字段为null值。
        非空约束出现错误时见面提示完整的错误信息。

3、唯一约束
    目标:
        掌握唯一约束之表征与定义;
        掌握constraint子句之运。

   
唯一约束(UNIQUE,简称UK)表示的凡当表中的数码未允出现更的图景,例如:每一样各成员肯定都出谈得来之Email,而此Email肯定是未能够还的。

    SQL脚本:
        drop table member purge;
        create table member(
            mid number,
            name varchar2(20) not null,
            email varchar2(50) unique
        );
        commit;

    当表创建好后,可以进行多少的长操作。

    向member表中长是的数量:
        insert into member(mid, name, email) values (1, ‘王彦超’,
‘123@qq.com’);

    向member表中追加误的数码:EMAIL字段数据的再
        insert into member(mid, name, email) values (1, ‘张三’,
‘123@qq.com’);

   
可以发现先后出现了不当:“ORA-00001:违反唯一约束规范(SCOTT.SYS_C0011283)”:
        betway必威 11

   
发现此时底错误信息与事先的非空约束的错误信息相较,完全看无明白,因为约在数据库里也是一个对象,所以为了好维护,那么每一个羁绊都自然有和好之讳,如果用户没有点名名字,那么即使由网动态地分配一个称。
   
所以这个时可采用CONSTRAINT关键字来为约束定义名字,对于约束之讳,建议写:“约束简写_字段”或者“约束简写_表_字段”,那么唯一约束之简写应该吗UK,而且唯一约束下于了Email中,所以律名称最为好与否:UK_EMAIL,所以定义约束时格式应该变更呢:
        create table member(
            ……
            email varchar2(50),
            constraint uk_email unique(email)
        );

    此时的错误信息就可怜之阳了:

        betway必威 12

 
  需要小心的凡,唯一约束自己是不深受null类型控制的,比如说email暂时并未,可以为null,可能是实际中出现的情状。

    3.1 小结
        唯一约束好装null。
        唯一约束的排非容许再次。

4、主键约束
    目标:
        掌握主键约束之意图;
        了解复合主键的定义。

   
如果一个字段既要求唯一,又无能够安装也null,则好下主键约束(主键约束 =
非空约束 + 唯一约束),主键约束下PRIMARY
 KEY(简称PK)进行点名,例如:在member表中之mid字段应该代表一个分子的唯一编号,而此号码既未能够也空,也未克再。

    SQL脚本:
        drop table member purge;

            create table member (

                mid number primary key ,

                name varchar2(20) not null,

                email varchar2(50),

                constraint ud_email unique(email)

            );

            commit;

    4.1 为mid设置null值
        insert into member(mid, name, email) values (null, ‘张三’,
‘123@qq.com’);
        如果这时设置了null,那么错误信息为:

            betway必威 13

        此时得以发现,触发的长短空约束的一无是处提示。

    4.2 为mid设置重复值
        insert into member(mid, name, email) values (1, ‘张三’,
‘123@qq.com’);
        insert into member(mid, name, email) values (1, ‘李四’,
‘1234@qq.com’);
        错误信息如下:

            betway必威 14

        此时可以发现,触发的是绝无仅有约束之失实提示。

        主键约束错误 = 非空约束错误 + 唯一约束错误。

    4.3 指定主键约束名
       
如果没有也主键约束设置名字的话,那么为会见出于网活动分配一个动态名称。
        可以手动指定主键约束名称:
            constraint pk_mid primary key(mid);

        此时如果再次出现错误信息:

            betway必威 15

       
在后来的开发中,只要是实业表数据,几乎都如产生一个主键,而一些关系表出或是休欲主键的。

    4.4 复合主键
       
在骨子里的付出中,一般以同一布置表中会设置一个主键,但是呢允许吗同摆表安装多只主键,这个时刻将其谓复合主键。在复合主键中,只发零星单主键字段的内容全等同,才会起违反约束之左。
        脚本:
            drop table member purge;
            create table member(
                mid number,
                name varchar2(200) not null,
                email varchar2(50),
                constraint pk_mid_name primary key (mid, name),
                constraint uk_email unique (email)
            );
            commit;

        复合主键只是表现了平等栽语法,但是尽量不要动。

    4.5 小结
        主键约束 = 非空约束 + 唯一约束;
        复合主键约束一般不建议采用。

6、检查约
    目标:
        掌握检查约的操作。

   
检查约指的凡针对数码多的准过滤,表中的每行数据还要满足指定的过滤条件,在开展数量更新操作时,如果满足检查约所装的规范,数据可成功更新,如果不满足,则非克创新,在SQL语句被利用check(简称CK)设置检查约之尺码。

    6.1 检查约——范例
       
在member表中追加age字段(年龄限制是0~200)和sex字段(只能是男性还是女)。
            drop table member purge;

            create table member(

                mid number,

                name varchar2(200) not null,

                email varchar2(50),

                age number check (age between 0 and 200),

                sex varchar(10),

                constraint pk_mid primary key (mid),

                constraint uk_email unique(email),

                constraint ck_sex check(sex in(‘男’, ‘女’))

            );

            commit;

        增加是的多少:
            insert into member (mid, name, email, age, sex) values (1,
‘王彦超’, ‘123@qq.com’, 21, ‘男’);

        增加误的多寡:
            年龄错误:insert into member (mid, name, email, age, sex)
values (2, ‘张三’, ‘1234@qq.com’, 2000, ‘男’);
               
此时age并无装约名称,所以这边依然由系统自动分配约束名称。
            性别错误:insert into member (mid, name, email, age, sex)
values (2, ‘张三’, ‘1234@qq.com’, 20, ‘无’);
                会并发完整的错误信息。

        思考:关于性的问题?
           
对于另外一样栽操作,如果多的约束越来越多,那么势必会潜移默化创新的习性,如果相同摆数表会被一再修改的话语,那么检查约不建议采取。
           
所以这样的辨证操作一般还见面由于程序于服务器端完成,例如:Struts中的各种证明。
            通过序来完成征,可以化解数据库的压力。

    6.2 小结
       
检查约会设置多单过滤条件,所以检查约了多时见面潜移默化多少更新性能,能无用,就绝不。

7、外键约束
    目标:
        掌握外检约束的图与安装;
        掌握数据的级联操作。

    7.1 外检约束之起分析
       
例如,现在店求各个一样各项成员为铺面提高提出一些更好之提议,并且愿意用这些建议保留于数据表之中,那么根据这样的需求,可以计划出如图所示的计划性模型。

betway必威 16

        设计来了点滴摆放数据表,两布置表底来意如下:
            人员说明:用于保存成员的主干信息(编号、姓名)
           
建议表:保存每一个分子提出的建议内容,所以在此表中保存了一个分子编号字段,即:通过此成员编号就可跟分子表展开数量涉嫌。

       
现在一个分子可以提出多独建议,这就是是一个强烈的平等针对几近的关系,也不怕好像于事先所学了之dept

  • emp关系。

    7.2 创建脚本
        drop table member purge;

        drop table advice purge;

 

        create table member(

            mid number,

            name varchar2(20) not null,

            constraint pk_mid primary key (mid)

        );

        create table advice(

            adid number,

            content clob not null,

            mid number,

            constraint pk_adid primary key(adid)

        );

        commit;

    7.3 增加是的数量:
            insert into member (mid, name) values (1, ‘张三’);

            insert into member (mid, name) values (2, ‘李四’);

 

            insert into advice (adid, content, mid) values (1, ‘建议一’,
1);

            insert into advice (adid, content, mid) values (2, ‘建议二’,
1);

            insert into advice (adid, content, mid) values (3, ‘建议三’,
2);

            insert into advice (adid, content, mid) values (4, ‘建议四’,
2);

            insert into advice (adid, content, mid) values (5, ‘建议五’,
2);

            commit; 

        此时mid = 1的积极分子提出了个别独视角,然后mid =
2的成员提出了三单意见,这些多少还应有算有效数据。

    7.4 查询有每人成员的共同体信息以及所提出的见数量
        select N.mid, name, count(A.mid) over(partition by A.mid) from
member N,advice A where N.mid = A.mid;

        分析:
            确定所用的数据表:
                member表:成员编号、姓名
                advice表:每个成员提出的提议数量(统计信息)。

        以上是人工控制的美状态,如果说多了以下的错误信息呢?
            insert into advice (adid, content, mid) values (6,
‘第六漫漫信息’, 99);
            现在极端要的问题在,在member表中并无存mid = 99的音信。
           
如果以事先所修之知来讲,这种错误的数额无法逃脱。那么现在可分析一下有关数据的参阅方式
           
现在对于表得分为父表(member)和子表(advice),因为子表之中的数目必须参照member表中之数码,建议之提出者的成员编号应该在member表中mid已在的多少。
           
所以在这样的场面下,为了保险表中数量中,就惟有会采取外键约束(FOREIGN
KEY)来成功。

    7.5 增加外键
        create table advice(
            adid number,
            content clob not null,
            constraint pk_adid primary key (adid),
            constraint fk_mid froeign key(mid) references member(mid)
        );

        此时使还插入mid为99的信息,会面世以下错误:
            SQL错误:ORA-02291:违反完整约束规范(SCOTT.FK_MID) –
未找到父项关键字

    7.6 问题
        一旦为表中长了外键约束,那么尽管会见有新的问题。
        问题一:删记录
            如果想只要删减父表数据,那么首先要去除相应的有子表数据。
            当父表存在多少,但是去子表数据时,会起以下错误信息:
                SQL错误:ORA – 02292:违反完整约束规范(SCOTT.FK_MID) –
已找到子记录
           
如果今天必要去除父表记录,那么首先要去除子表记录,但是这么做最好难为了,所以就提出了数码的级联操作问题。

        问题二:删表
            删除父表的时光用事先去子表。
            如果一直去父表,则会冒出错误信息,提示先去对应子表。

        说明:
           
在开展外键设置的早晚,对应之字段,在表中须是主键或者是绝无仅有约束。

        问题三:
           
创建表的下以A表作为B表的父表,然后以经过改动,将B表作为了A表的父表,相当给当下半独表互为外键表,此时凡是力不从心通过delete进行去操作的。
            这种混乱的场面可以择高执删除:
                drop table member cascade constraint;
           
这种强制删除虽然穷快捷,但是连无建议用,主要的由来是以编排数据库脚本的时候自然要是考虑好程序的关联。

    7.7 级联删除
            on delete cascade;
            当主表数据被删去后,对应的子表数据也会于清理。
            create table advice(
                adid number,
                content clob not null,
                mid number,
                constraint pk_adid primary key(adid),
                constraint fk_mid forein key (mid) references
member(mid) on delete cascade
            );
            只待以外键约束后长on delete cascade即可。
            此时一旦执行delete from member where mid =
1;,则子表中对应的数码也会去。

    7.8 级联更新
        on delete set null;
       
当主表数据让删去后,对应的子表数据的应和字段的始末会设置为null。
            create table advice(
                adid number,
                content clob not null,
                mid number,
                constraint pk_adid primary key(adid),
                constraint fk_mid forein key (mid) references
member(mid) on delete set null
            );

        以上之级联操作选择还是看需求,例如学生以及实绩肯定是级联删除。

    7.9 小结
        级联操作:on delete cascade、on delete set null
        使用外键约束后去表时应该事先去子表再删除父表。

8、查看约束
    目标:
        了解约信息数据字典的意。
   
约束是由于数据库自己创办的目标,所有的目标都见面保留在数码字典中,因为约是用户创建的,所以可以为此“user_constraints”数据字典或者是“user_cons_columns”数据字典查看

    脚本:
        create table member(

            mid number primary key,

            name varchar2(20) not null

        );

    插入数据:
        insert into member (mid, name) values(1, ‘张三’);
        insert into member (mid, name) values(1, ‘李四’); 

    此时面世了错误信息:

        betway必威 17

    SYS_C0011345就是数据库对象(约束)的名号。

    查看数据库约束:
        select * from user_constraints;
    其中的CONSTRAINT_TYPE就意味着了自律类型:
        betway必威 18
    P代表主键。

   
但是现在独自是理解了格名称,而无懂得字段是呀一个,可以经user_cons_columns查询:
        select * from user_cons_columns;
        betway必威 19

    通过这点儿只数据字典就可以知道的懂得约束对象在所对应之内容。
   
但是一般而言,如果照标准的出模式,按照“约束简写_字段”实际上就够解决这些约束名称的题材了,从出角度来讲,约束之名号一定要发出。

    8.1 小结
        约束还是属于数据库对象,可以直接动用多少字典查看。

9、修改约束
   
在事先学了,表尽量不苟失去修改,那么对约束来说吧一律,约束跟表一起成立,那么建立后尽量不要涂改了。

    9.1 增加约
       
如果相同摆表创建的时刻没设置任何的封锁,那么就算可由此点名的报告实现约束之充实。
        定义一摆设没有约束之申:
        create table member (
            mid number,
            name varchar2(20),
            age number
        );

       
或者直接翻“user_constraints”数据字典查看member表是否有格:
            select * from user_constraints where table_name =
‘MEMBER’;

    9.2 语法
        alter table 表名称 add constraint 约束名称 约束类型(约束字段);

        范例:为member表中之mid增加主键约束。
            alter table member add constraint pk_mid primary
key(mid);
        范例:为member表的age字段增加检查约。
            alter table member add constraint ck_check(age between 0
and 200);

       
但来某些用说明的凡,在拓展深约束添加的时候,非空约束不能够以此类语法。
        非空约束只能够采取修改表猎狗的点子就:
            alter table member modify (name varchar2(20) not null);
        当表中数据指定列有null值时,无法添加非空约束:
            betway必威 20
       
所以如果想使长非空约束,必须保证数据表本身不设有背离约束之数码。
        对于非空约束,在设计表的时节将要添加。

    8.3 禁用约束
       
大部分动静下同样布置表得会定义多种羁绊,但是约束了多得会潜移默化及性,所以当需要大批量数更新时,就愿意小停用约束。

        禁用约束:
            alter table 表名称 disable constraint 约束名称
[cascade];
            范例:
                禁用advice表中之adid主键约束“pk_adid”
                    alter table advice disable constraint pk_adid
               
此时advice表中不怕未在主键了,于是又多误数据会成功插入。
           
    此时禁用的是子表(advice)主键,那么要禁用主表(member)主键呢?

            范例:
                禁用member中的主键
                    alter table member disable constraint pk_mid;
                此时会晤并发一个错误信息:
                    SQL 错误:ORA-02297:无法禁用约束原则
(SCOTT.PK_MID) – 存在相关性。
                因为对应之子表存在记录。
               
在夺语法中吃有了cascade操作,所以可以应用她解决问题:
                    alter table member disable constraint pk_mid
cascade;
                cascade只有在外键中才会以。

    8.4 启用约束
        alter table 表名称 enable constraint 约束名称

        范例:
            启用两摆放表底约。
                alter table member enable constraint pk_mid;
                alter table advice enable constraint pk_adid;

        如果表中留存吃主键约束相冲突之数量,会发觉执行错误,因为要是想使包约束好健康启用,那么必须先解决表中冲数据的题材。

    8.5 删除约束
       
约束属于数据库对象,所以目标为堪拓展删减操作,删除约束之要紧是约束名称。
        语法:
            alter table 表名称 drop constraint 约束名称 [cascade];

        范例:
            删除advice表中的“pk_adid”约束——无外键关联。
                alter table advice drop constraint pk_adid;

        范例:
            删除member表中的“pk_mid”约束——有外键关联。
                alter table member drop constraint pk_mid cascade;
            主键要想去,必须装级联。

       
约束一定要是和阐明一起成立,最低的尽头也当于数据库正式使用前建立好到的格原则。
        
    8.6 小结
        约束在起表底时段势必要而修改;
        对于约束不建议针对该展开改动。

9、数据库综合实战
    所急需之知识点:
        DML(更新、查询)
        事务
        DDL(表、约束)

    9.1 建立数据表
       
到了秋天,为了为同学等多体育锻炼,所以学校开始张罗学生运动会的位移,为了便利保存比赛成绩信息,所以定义了之类的几乎摆数据表。
            运动员表sporter:
               
运动员编号sporterid、运动员姓名name、运动员性别sex、所属系部department
            项目表item:
                项目编号itemid、项目名称itemname、项目比地点location
            成绩表:
                sporterid、项目编号itemid、积分mark

            betway必威 21

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注