欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第十三章创建和维护表课堂笔记和练习

程序员文章站 2024-03-08 15:02:52
...

– 创建表和维护表

Oracle中数据库对象命名原则

– 必须由字母开始,长度在 1–30个字符之间。
– 名字中只能包含 A–Z, a–z, 0–9, _ (下划线),$ 和 #。
– 同一个Oracle服务器用户所拥有的对象名字不能重复。
– 名字不能为Oracle的保留字。
– 名字是大小写不敏感
数据定义语言: (Data Definition Language,DDL) :create alter drop

– 是SQL语言集中负责数据结构定义与数据库
– 对象定义的语言,由CREATE、ALTER与DROP三个语法所组成。

– 创建表 create table

   --  语法:CREATE TABLE [schema.]table
   --       (column datatype [DEFAULT expr][, ...]);

– 您必须具备 :

   --    CREATE TABLE的权限
   --    一定的存储空间(ALTER USER 用户名 QUOTA 尺寸 ON表空间名字)

– 您需要指定:

   --    表名
   --    列名、列的类型及列的宽度

数据类型

– 字符型

第十三章创建和维护表课堂笔记和练习

– 数值型

第十三章创建和维护表课堂笔记和练习
第十三章创建和维护表课堂笔记和练习

–日期型
第十三章创建和维护表课堂笔记和练习

– 图片类型
第十三章创建和维护表课堂笔记和练习

  • 创建表
  • 语法:create table 表名();

        1.创建一张表名为person的表,数据结构定义如下:
         列名      列类型   长度   精度  默认值
         id       number     4
         cname    varchar2   20
         birthday date
         heigth   number     3
         weigth   number     5       2
         country_code char   2            '01'
    
        create table dossier (
                id number(4),
                cname varchar2(20 ),
                birthday date,
                height number(3),
                weight number(5, 2),
                country_code char(2 ) default '01');
    
  • 默认值应用
    –插入默认值

        insert into dossier
          (ID, CNAME, BIRTHDAY, STATURE, WEIGHT)
        values
          (2, '姚明', to_date('1980.9.12', 'yyyy.mm.dd'), 226, 134);
    
    
    --  使用默认值修改
    
        update dossier set country_code =default where id=2;    
    
  • 用子查询语法创建表

    --默认复制所有列
    1.使用子查询创建表dept10,且将部门10的员工数据复制到该表
    create table dept10 as select * from emp where deptno=10;
    
    --复制指定列
    2.使用子查询创建表dept20,且将部门20的员工的编号、姓名、职位复制到该表
    create table dept20(empno,ename,job) as select empno,ename,job from 
    
    emp where deptno=20;
    create table dept20(no,name,job) as select empno,ename,job from emp 
    
    where deptno=20;
    
  • 引用另外一个用户的表

    select * from tom.course;
    --如果无法查询,需tom用户给scotts授权当前表的查询权限select
    grant select on tom.course to scott;
    
  • 修改表(添加列或修改列): alter table add | modify [列 列类型(长度) default 默认值]
    – 注意:
    – 1. 修改数据类型:已有的行数据必须为空
    – 2. 修改长度原则:

    --     数值型修改长度:当长度向小改时,已有行的数该列必须为空;
    --     当长度向大改时,可以随意修改。
    --     字符型修改长度:当长度向小改时,只要修改后的值能容纳下当前
    ->     已有数据的最大值即可,当长度向大改时,可以随意修改。
    

    – 3.修改列的默认值:默认值的修改不会影响已经存在的行,只影响新增加的行

    1.在person表上增加性别字段
    alter table person add(sex char(2));
    
    2.将姓名为MARRY的用户sex列数据类型修改为varchar2(4);       
    alter table person modify(sex varchar2(4));--ok 均为字符类型
    alter table person modify(sex number(1));
    --错误 varchar2->number   若更改数据类型,则修改列必须为空
    
    • 添加默认值

      3.给person表的sex列添加默认值'不详'
      alter table person modify(sex default '不详');
      
  • 删除表
    语法 drop table 表名;
    – 注意:只有表的创建者或具有DROP ANY TABLE权限的用户才能删除表
    – 删除表原则:

    • 表中所有的数据和结构都被删除。
    • 任何视图和同义词被保留但无效。
    • 所有与其相关的约束和索引被删除。
    • 任何未完成的事务被提交。
    
  • 删除列
    – alter table 表名 drop column 列名;
    – alter table 表名 drop (列名1,[列名2….]);

    --      原则: 
    --        1. 列可以有也可以没有数据。  
    --        2. 表中至少保留一列。 
    --        3. 列被删除后,不能再恢复。 
    --        4. 被外键引用的列,不能被删除。
    
    --删除单列
    1.将person表中的sex列删除
    alter table person drop column sex;
    
    --删除多列
    1.将person表中的heigth,weigth列删除
    alter table person drop(heigth,weigth);
    
    --表中必须至少保留一列
    alter table person drop(id,cname,birthday,country_code);--错误  无法删除表中的全部列 
    
    --被外键引用的列,不能被删除
    alter table dept drop (deptno);--无法删除父项关键字列 deptno被emp表的deptno所关联
    
  • 重命名

  • 语法:rename 表名 to 新表名;

    1.将表person的表名修改为person20180731
    rename person to person20180731;
    
  • 截断表
    – truncate为DDL语句,删除表中所有数据,释放存储空间,且无法撤回,默认提交事务
    – delete为DML语句,可以删除指定数据行,不释放存储空间,需使用commit或rollback控制事务结束

    1.截断表person
    truncate table person;--删除所有数据
    delete from person;   --删除所有数据
    

TRUNCATE和DELETE区别:

– TRUNCATE是DDL,只能删除表中所有记录,释放存储空间,
使用ROLLBACK不可以回滚。
– DELETE是DML,可以删除指定记录,不释放存储空间,使用
ROLLBACK可以回滚。

- 数据字典

    1.查看当前用户下所有的表
    select * from user_tables;

    2.通过desc命令查看表结构
    desc emp;