zoukankan      html  css  js  c++  java
  • DDL

    1.SQL分为5大类:
    DDL:数据定义语言
    DCL:数据控制语言
    DML:数据操纵语言
    DTL:数据事务语言
    DQL:数据查询语言

    2.DDL(data definition language):create,drop,alter,rename to

    创建表格分为两个步骤:
    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)
    作用:约束表格中是数据,相对于数据类型而言,用来进一步限定表中的数据,使得添加到表中的数据都是合法有效的,符合业务需求的数据,不会出现无效数据


    3.Oracle中的5种约束类型
    primary key PK 含义:主键约束,非空唯一(表中最多只能含有一个主键约束)
    not null NN 含义:非空
    unique UK 含义:唯一
    check CK 含义:自定义约束(往往用来定义业务的约束,如分数不能为负)
    foreign key FK 含义:外键约束(表示此列的值是引用自己的或其他表的主键)
    注意:能够被外键所引用的列,其本身也必须是主键约束或唯一性约束


    4.创建表格的第一种方法:
    语法:
    create table 表名(
    列名 数据类型(默认值) 约束,
    列名 数据类型(默认值) 约束,
    列名 数据类型(默认值) 约束
    );

    例:
    --创建用户表(无约束)
    create table tbl_user(
    id number(6),
    name varchar2(25),
    password varchar2(25)
    );

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

    添加约束名的语法:
    constraint 约束名 约束类型;
    约束名的命名规范:
    表名_列名_约束类型缩写;

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

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


    5.添加约束的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表中的id,first_name,salary三列数据
    create table new_emp as select id,first_name,salary from s_emp;

    --复制了某张表格的指定列,构建一张新表格(不拷贝数据,取表结构)
    create table 新表格名 as select 列,列,列from原表格 where 恒假条件;
    例:创建一张表格,表格中只有s_emp表中的id,first_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 约束名

  • 相关阅读:
    day12 Python操作rabbitmq及pymsql
    day11 队列、线程、进程、协程及Python使用缓存(redis/memcache)
    day10 Python作用域 Python2.7与Python3.x的类继承的区别、异步IO、多进程,多线程简介
    day09 Python socket编程
    day08 面向对象补充及单例模式
    day07 configparser xml subprocess 面向对象
    day06 Python的一些内建变量、反射、hashlib模块、re模块、os模块、sys模块
    day05 Python多层装饰器、模块、序列化、字符串格式化、生成器和迭代器、递归、time、datetime模块、logging模块
    day04 Python一些内置函数及装饰器
    查看旧版jexus命令
  • 原文地址:https://www.cnblogs.com/zhang12354/p/7827763.html
Copyright © 2011-2022 走看看