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

    ,掌握表的建立与删除
        了解Oracle中的主要数据类型

    ,约束的分类和使用
    ,表的关联:交,并,补
    ,掌握ROWNUM伪列的作用
    ,掌握序列的使用
    ,掌握视图的作用
    ,了解同义词,用户管理,权限分配与撤销,数据库的备份
------------------------------------------------------------------

创建和管理表(重点):

    常用的数据类型:

            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 =) ;//仅复制表结构

        ex:创建表person
            create table person(

                UID  varchar(),
                name  varchar(),
                age   number(),
                birthday  date,

                sex     varchar()  default '男'
                ) ;

            ex:向表中增加数据:
                insert into person(UID,name,age,birthday,sex)
                    values(,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()  default '暂无地址') ;

                   alter table tab_name  modify (col1 type default 默认值,
                                                col2 type default 默认值,
                                                ...
                                                coln type default 默认值

                            ) ;  //修改列

                    alter table person modify (name varchar2() 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()

                ) ;

                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 ;        

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

约束(重点):

        分类:
            ,主键约束 -->是唯一的表示,本身不能为空,如身份证
            ,唯一约束 -->在一个表中只能建立一个主键约束,其他列不想出现重复值可使用唯一性约束
            ,非空约束 -->列的内容不能为空
            ,检查约束 -->检查一个列的内容是否合法
            ,外键约束 -->在两张表中进行的约束操作
---------------------------------------------------------------------------
    ,主键约束:

        create table person(

                UID  varchar()  primay key,     //主键约束
                name  varchar(),
                age   number(),
                birthday  date,
                sex     varchar()  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主键约束名称

                ) ;

        */

---------------------------------------------------------------------------
,唯一约束 :unique

        表示一个字段中的内容是唯一的,其他列不允许重复

        create table person(

                UID      varchar()
                name       varchar()  unique  not null,  //非空约束,唯一约束
                age      number() not null,      //非空约束
                birthday  date,
                sex       varchar()  default '男',
                constraint person_uid_pk primary key(uid)  //指定uid主键约束名称

               <constraint person_name_uk unique(name)  >  //指定name唯一约束名称

                ) ;

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

,非空约束: not null

            表示一个字段的内容不允许为空,即插入数据时必须插入该字段的值

        create table person(

                UID      varchar()
                name       varchar()  not null,  //非空约束
                age      number() not null,      //非空约束
                birthday  date,
                sex       varchar()  default '男',
                constraint person_uid_pk primary key(uid)  //指定uid主键约束名称
                 <constraint person_name_nk not null(name)  >  //指定name非空约束名称

                ) ;

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

,检查约束                

            create table person(

                UID      varchar()
                name       varchar()  not null,  //非空约束
                age      number() not  and ),   //非空约束,检查约束
                birthday  date,
                sex       varchar()  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检查约束名称

                ) ;

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

,外键约束(foreign key):

        create table person(

                UID      varchar()
                name       varchar()  not null,  //非空约束
                age      number() not  and ),   //非空约束,检查约束
                birthday  date,
                sex       varchar()  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(),
                    bprice    number(,)
                    uid     varchar()

            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(,to_date('1994-04-09','yyyy-mm-dd'),'女');        

        insert into book (bid,bname,bprice)
            values(,');
    级联删除:

        create table book(

                    bid    number  primary key not null,
                    bname   varchar(),
                    bprice    number(,)
                    uid     varchar()

            constraint person_book_uid_fk  foreign key(uid)  references person(uid) on delete cascade  //外键约束,级联删除

        );//创建book表

        delete from person '; //删除一条记录,同时删除子表book中的记录
        


Oracle学习系列5的更多相关文章

  1. Oracle学习系列1-7

    Oracle学习系列1 两个服务必须启动: OracleOraDb10g*TNListener 和 OracleService*** 使用sqlplusw先进行环境的设置 set linesize 3 ...

  2. Oracle学习系列7

    Oracle学习系列7 ************************************************************************************ 关联表 ...

  3. Oracle学习系列6

    Oracle学习系列6 ************************************************************************************ 删除约 ...

  4. Oracle学习系列4

    Oracle学习系列4 ************************************************************************************ 数据库 ...

  5. Oracle学习系列3

    Oracle学习系列3 ************************************************************************************ 多表查 ...

  6. Oracle学习系列1

    两个服务必须启动: OracleOraDb10g*TNListener 和 OracleService*** 使用sqlplusw先进行环境的设置 set linesize 300 ; set pag ...

  7. oracle学习系列之四 (视图)

    视图视图是数据库中特有的对象.视图用于存储查询,但不会存储数据(物化视图除外).这是视图和数据表的重要区别.可以利用视图进行查询,插入,更新和删除数据.Oracle有如下四种视图(关系视图,内嵌视图, ...

  8. oracle学习系列之三 (约束)

    主键约束:外键约束:唯一性约束:检查约束:默认值约束 -——————五大约束 一. 主键约束: --创建表的主键约束  create table student (student_id number ...

  9. Oracle 学习系列之二(会话与事务级临时表和dual表 )

    一. 会话临时表 --创建会话临时表create global temporary table tmp_user_session(user_id int, user_name varchar2(20) ...

随机推荐

  1. svn ubuntu command(转载)

    转载来自:http://blog.csdn.net/pkueecser/article/details/6830758 将文件checkout到本地目录 svn checkout path(path ...

  2. exception

    SQL> -- 例外 exceptionSQL> -- 1/0SQL> ed已写入 file afiedt.buf 1  declare  2   pnum number := 0; ...

  3. <开心一笑> 前端工程师你们伤不起!

    前端工程师你们伤不起!! 来自: 刻铭 2011-03-11 14:09:53 前端工程师伤不起  老子几年前进了互联网圈!!!!!!!成了前端工程师,名字是不是很拉风,有木有!!!!!!!!  尼玛 ...

  4. CentOS6.5中修改yum源

    在自己安装的CentOS6.5中使用yum安装软件,总是提示404错误信息,百度后发现原来要设置yum源. 在安装完CentOS后一般需要修改yum源,才能够在安装更新rpm包时获得比较理想的速度.国 ...

  5. Shell 变量

    定义变量时,变量名不加美元符号($,PHP语言中变量需要),如: your_name="runoob.com" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一 ...

  6. Centos 关闭后台进程 .sh 等

    命令后加 & 符号可以让其在后台运行 如: node app.js & 想要关闭分两步: ps aux | grep app.js 查看app.js  所运行的进程号 kill 进程号 ...

  7. How do I install Adobe Flash on Debian Wheezy?

    aptitude install flashplugin-nonfreeif fail Check your settings in /etc/apt/sources.list. If this is ...

  8. python中元组(tuple)的用法

    t=(1,2,3) t=() t=(1,)#元组中只有一个值,需在值后面加上,不然会当int型识别 te.count(1) te.index(2) te[::-1]#关于切片跟列表一样的 tuple的 ...

  9. MyBatis关联查询 (association) 时遇到的某些问题/mybatis映射

    先说下问题产生的背景: 最近在做一个用到MyBatis的项目,其中有个业务涉及到关联查询,我是将两个查询分开来写的,即嵌套查询,个人感觉这样更方便重用: 关联的查询使用到了动态sql,在执行查询时就出 ...

  10. 谈谈Javascript的this关键字(this is not this)

    前言: 看文章标题你就知道,这篇文章我只讲一个简单的Javascript的this关键字,说它简单——它又不简单,因为曾几何时我也对this关键字有些困惑,它也确实会让不少程序员感到不解——它像是一个 ...