Oracle DDL 数据定义语言

Posted 叶墨悻

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle DDL 数据定义语言相关的知识,希望对你有一定的参考价值。

 SQL分为5大类:

         DDL:数据定义语言

   DCL:数据控制语言

   DML:数据操纵语言

   DTL:数据事务语言

   DQL:数据查询语言

【创建表格分为两个步骤:  a.定义列和数据类型  b.添加约束】

 数据类型:  

         1.数字类型,可以做所有的数学运算

                   【number 】           

                            number(4)       代表整数,最大能存9999

                            number(7,2)    代表double类型,整数长度为5,小数位2

 

       2.字符型,可以做拼接运算

                   char(20)            定长

                   varchar2(20)               不定长,表示字符窜最长是20

         注意:字符串在数据库中用 ‘ ‘

 

       3.日期类型,可以做加减运算

                   Date                   年月日时分秒

                   Time                   时分秒

                   Timestamp       年月日时分秒,还有小时位,如1.2秒

 

       4.大数据类型

                   clob character large object      大字符型对象,最大可存4G

                   blob binary large object   大二进制对象,最大可存4G

       注意:大数据类型不支持查看结果

 

       约束(constraint

        【 作用:约束表格中是数据,相对于数据类型而言,用来进一步限定表中的数据,使得添加到表中的数据都是合法有效的,符合业务需求的数据,不会出现无效数据】

  

  1.Oracle中的5种约束类

           primary key                         PK                                 含义:主键约束,非空唯一(表中最多只能含有一个主键约束)

           not null                                NN                                含义:非空

           unique                                 UK                                含义:唯一    

           check                                  CK                                 含义:自定义约束(往往用来定义业务的约束,如分数不能为负)                                

           foreign key                          FK                                 含义:外键约束(表示此列的值是引用自己的或其他表的主键)

             【 注意:能够被外键所引用的列,其本身也必须是主键约束或唯一性约束】

  2.创建表格的第一种方法:

              语法:

           create table 表名(

                    列名 数据类型(默认值) 约束,

                    列名 数据类型(默认值) 约束,

                    列名 数据类型(默认值) 约束

           );

       例:

         --创建用户表(无约束)

         create table tbl_user(

                  id number(6),

                  name varchar2(25),

                  password varchar2(25)

   );

 

【注意:在创建表格时,如果不定义约束的名字,则数据库会给约束提供默认名字,并且把这些内容存储到数据库字典中】

 

  添加约束名的语法:

           constraint 约束名 约束类型;

  约束名的命名规范:

           表名_列名_约束类型缩写;

 

3.添加约束的2中方法:

         1.列级语法添加——边定义,边添加约束

         如:创建用户表

2.【重点】表级语法添加——先定义列,然后在添加约束

         --创建账户表(tbl_account,id,accountNo非空唯一,realName,password六位数/默认值000000,balance不能小于0

        

         create table tbl_account (

             id number(6),

             accountNo number(6) not null,

             realName varchar2(26) not null ,

             password char(6) default ‘000000‘,

             balance number(10,2),

            

            constraints tbl_account_id_pk i primary key(id),

             constraints tbl_account_accountNo_nn unique (accountNo),

             constraints tbl_account_balance_ck check (balance>0)

  );

        

 

         注意:not null不支持表级语法,只能支持列级语法添加。但是也可以采用check 模拟非空

         例:

         --创建账户表(tbl_account,id,accountNo非空唯一,realName,password六位数/默认值000000,balance不能小于0)

        

  create table tbl_account (

               id number(6),

               accountNo number(6) ,

               realName varchar2(26) not null ,

               password char(6) default ‘000000‘,

               balance number(10,2),

            

              constraints tbl_account_id_pk  primary key (id),

              constraints tbl_account_accountNo_ck  check (accountNo is not null) ,

              constraints tbl_account_accountNo_un  unique(accountNo) ,

              constraints tbl_account_balance_ck check (balance>0)

  );

  创建员工表(自关联)

           create table p_emp(

                     id number(6),

                     name varchar2(25),

                     title varchar2(25),

                     salary number(10,2),

                     start_date date,

                     manager_id number(6),

                  

                     constraint p_emp_id_pk primary key (id),

                     constraint p_emp_name_ck check(name is not null),

                     constraint p_emp_title_ck check(title is not null),

                     constraint p_emp_start_date_ck check(start_date is not null),

                     constraint p_emp_manager_id_fk foreign key(manager_id) reference primary key(id)

                );

  6.补充:创建表格的第二种方法(根据已经存在的某张表创建一张新表格):

           --复制某张表中的指定列,构建一张新的表格(拷贝了数据)

           create table 新表格名 as select 列,列,列from原表格;

           例:创建一张表格,表格中只有s_emp表中的idfirst_name,salary三列数据

           create table new_emp as select id,first_name,salary from s_emp;

 

           --复制了某张表格的指定列,构建一张新表格(不拷贝数据,取表结构)

           create table 新表格名 as select 列,列,列from原表格 where 恒假条件;

           例:创建一张表格,表格中只有s_emp表中的idfirst_name,salary三列数据

           create table new_emp as select id,first_name,salary from s_emp where 1=2;

           注意:此处1=2表示恒false,则数据库不会被拷贝,只能得到一张空表

 

 

 

  删除表格(注意约束控制)

           基本语法:drop table 表名 [cascade constraints];

           注意:cascade constraints表示连带约束一起删除(暴力删除);如果不添加,当有外键引用,不能删除。

                     例:

                  

  修改表格:

           --列相关

           1.添加列

           alter table 表名 add 列名数据类型 [default默认值] 约束;

                    例:--tbl_user表添加一列年龄

                     alter table tbl_user add age number(3) default 18 not null;

        

           2.删除列

           alter table 表名 drop column 列名;【注意关键字column

                     例:删除tbl_user表中age

                     alter table tbl_user drop column age;

                  

           3.修改列(修改列数据类型和约束)

           alter table 表名 modify 原列名新数据类型新约束;

                     例:修改tbl_user表中password列为char(6)默认值‘000000’非空

                     alter table tbl_user modify password default‘000000‘ not null;

                  

           4.修改列名

           alter table 表名 rename column 原列名 to 新列名;

           --修改tbl_user表中password列名为pwd

           alter table tbl_user rename column password to pwd;

        

           --约束相关

           1.添加约束

           alter table 表名 add constraint 约束名约束类型(列名)

                    注意:如果是添加非空约束,则:

                     alter table 表名 add constraint 表名_列名_nn check (is not null)

                  

           注意:所有的DDL语句都是自动提交事务的,所以语句是不能回滚的

           2.删除约束

           alter table 表名 drop constraint 约束名;

        

           3.使约束生效

          alter table 表名 enable constraint 约束名

        

           4.使约束失效

           alter table 表名 disable constraint 约束名

 

以上是关于Oracle DDL 数据定义语言的主要内容,如果未能解决你的问题,请参考以下文章

Oracle数据库定义语言(DDL)

ORACLE SQL基础—DDL语言 礼记八目 2017-12-23 21:26:21

Oracle中DDL的基础知识

Oracle 三种语言

oracle基本语句

oracle中的DML,DDL,DCL操作分别指的啥,请通俗点。