Oracle学习系列5

Oracle学习系列5
************************************************************************************

    1,掌握表的建立与删除
        了解Oracle中的主要数据类型
        
    2,约束的分类和使用
    3,表的关联:交,并,补
    4,掌握ROWNUM伪列的作用
    5,掌握序列的使用
    6,掌握视图的作用
    7,了解同义词,用户管理,权限分配与撤销,数据库的备份
------------------------------------------------------------------

创建和管理表(重点):

    常用的数据类型:
        
            number[int ,float], varchar ,date ,clob, blob,
            
    表的建立:
            
        create  table tab_name(
            
                col1    type   [defalut 默认值],
                col2    type   [default 默认值],
                ...
                coln    type    [default 默认值]
                
        )    ;

        create table  tab_name as (子查询)  ;//赋值表
        create table  tab_name as (select * from emp  where 1=2) ;//仅复制表结构
        
        ex:创建表person
            create table person(
            
                UID  varchar(18),   
                name  varchar(200),
                age   number(3),
                birthday  date,
                
                sex     varchar(2)  default ''
                ) ;

            ex:向表中增加数据:
                insert into person(UID,name,age,birthday,sex)
                    values('111111111111111111','keivn',30,to_date('1994-04-09','yyyy-mm-dd'),'');
                    
            ex:表的删除:
                
                    drop table tab_name ;
                     
                    eg:drop table person;
                    
            ex:修改表结构:增加列,修改列
                
                    alter  table tab_name  add (col1 type default 默认值,
                                                col2 type default 默认值,
                                                ...
                                                coln type default 默认值
                                                
                            ) ;  //增加列
            
                   alter table person add (address  varchar(200)  default '暂无地址') ;
                   
                   alter table tab_name  modify (col1 type default 默认值,
                                                col2 type default 默认值,
                                                ...
                                                coln type default 默认值
                                                
                            ) ;  //修改列
                            
                    alter table person modify (name varchar2(20) default '无名氏');

                /**
                    若数据库中对应字段里有一个很长的数据,则无法将表长度缩小

                */

            ex:为表重命名
                    
                    在oracle中提供了rename命令,对表进行重新命名。
                    rename  tab_name_old   to   tab_name_new ;
                    
                    ex:
                        rename person to tperson ;
                        

            ex:截断表
                    
                若要清空一张表的数据,同时不需要回滚,可以立即释放资源就要使用
                    截断表的语法:
                        truncate  table tab_name ;
                         
                        ex: truncate table tperson ;  //清空表数据
                            rollback ;     //使用rollback无效


************************************************************************************

思考题:    
    现有一张国家表,里面有字段:中国,美国,巴西,荷兰,
    现要求通过查询实现对战功能:
            中国 ----> 美国
            中国 ----> 巴西    
            中国 ----> 荷兰    
            美国 ----> 中国    
            美国 ----> 巴西    
            美国 ----> 荷兰    
            
        问:此程序该如何实现?
        
            分析:使用笛卡尔积完成
            
                create table national(
                
                        name varchar(30)
                
                ) ;
                
                insert into national(name)
                    values('中国')    ;
                insert into national(name)
                    values('美国')    ;
                insert into national(name)
                    values('巴西')    ;
                insert into national(name)
                    values('荷兰')    ;
                            
                select t1.name ,t2.name 
                    from national t1, national t2
                        where t1.name <>t2.name ;        
                    
************************************************************************************

约束(重点):
    
        分类:    
            1,主键约束 -->是唯一的表示,本身不能为空,如身份证
            2,唯一约束 -->在一个表中只能建立一个主键约束,其他列不想出现重复值可使用唯一性约束
            3,非空约束 -->列的内容不能为空
            4,检查约束 -->检查一个列的内容是否合法
            5,外键约束 -->在两张表中进行的约束操作
---------------------------------------------------------------------------            
    1,主键约束:
        
        create table person(
            
                UID  varchar(18)  primay key,     //主键约束 
                name  varchar(200),
                age   number(3),
                birthday  date,
                sex     varchar(2)  default ''
                
                ) ;
        /**
            create table person(
            
                UID      varchar(18)  
                name       varchar(200),
                age      number(3),
                birthday  date,
                sex       varchar(2)  default '男',
                constraint person_uid_pk primary key(uid)  //指定uid主键约束名称
                
                ) ;
        
        
        */
        
---------------------------------------------------------------------------            
2,唯一约束 :unique

        表示一个字段中的内容是唯一的,其他列不允许重复
        
        create table person(
            
                UID      varchar(18)  
                name       varchar(200)  unique  not null,  //非空约束,唯一约束
                age      number(3) not null,      //非空约束
                birthday  date,
                sex       varchar(2)  default '',
                constraint person_uid_pk primary key(uid)  //指定uid主键约束名称
                
               <constraint person_name_uk unique(name)  >  //指定name唯一约束名称
                
                ) ;
                
    
    
    
---------------------------------------------------------------------------            

3,非空约束: not null
        
            表示一个字段的内容不允许为空,即插入数据时必须插入该字段的值
            
        create table person(
            
                UID      varchar(18)  
                name       varchar(200)  not null,  //非空约束
                age      number(3) not null,      //非空约束
                birthday  date,
                sex       varchar(2)  default '',
                constraint person_uid_pk primary key(uid)  //指定uid主键约束名称
                 <constraint person_name_nk not null(name)  >  //指定name非空约束名称

                ) ;
                
---------------------------------------------------------------------------            
            
4,检查约束                

        

            create table person(
            
                UID      varchar(18)  
                name       varchar(200)  not null,  //非空约束
                age      number(3) not null  check( age between 0 and 150),   //非空约束,检查约束
                birthday  date,
                sex       varchar(2)  default '' check(sex in('','',‘中’)), //检查约束
                constraint person_uid_pk primary key(uid)  //指定uid主键约束名称
                
                 <constraint person_name_ck check(name)  >  //指定name检查约束名称

                 <constraint person_sex_ck check(sex)  >  //指定sex检查约束名称

                ) ;

---------------------------------------------------------------------------            

5,外键约束(foreign key):
            
        create table person(
            
                UID      varchar(18)  
                name       varchar(200)  not null,  //非空约束
                age      number(3) not null  check( age between 0 and 150),   //非空约束,检查约束
                birthday  date,
                sex       varchar(2)  default '' check(sex in('','',‘中’)), //检查约束
                constraint person_uid_pk primary key(uid)  //指定uid主键约束名称
                
                 <constraint person_name_ck check(name)  >  //指定name检查约束名称

                 <constraint person_sex_ck check(sex)  >  //指定sex检查约束名称

        ) ;//创建person表
                
                
        create table book(
            
                
                    bid    number  primary key not null,
                    bname   varchar(30),
                    bprice    number(5,2)
                    uid     varchar(18)
                    
                    
            constraint person_book_uid_fk  foreign key(uid)  references person(uid)  //外键约束
                
        );//创建book表
        
        
        /**
            1,在子表book中设置的外键在父表person中必须是主键
            2,删除时,先删除子表book,再删除父表person:
                    drop table book;
                    drop table person ;
        
        */

                
    ex:插入测试数据:
    
        insert into person(UID,name,age,birthday,sex)
                    values('111111111111111111','keivn',30,to_date('1994-04-09','yyyy-mm-dd'),'');        
            
        insert into book (bid,bname,bprice)
            values(1,'java',89.8,'1111111111111111111');
    级联删除:
    
        create table book(
            
                
                    bid    number  primary key not null,
                    bname   varchar(30),
                    bprice    number(5,2)
                    uid     varchar(18)
                    
                    
            constraint person_book_uid_fk  foreign key(uid)  references person(uid) on delete cascade  //外键约束,级联删除
                
        );//创建book表
        
        delete from person where pid ='1111111111111'; //删除一条记录,同时删除子表book中的记录
        

 


 

原文地址:https://www.cnblogs.com/askDing/p/5467403.html