zoukankan      html  css  js  c++  java
  • Oracle-DDL 1- 表管理

    DDL-数据定义语句:

    一、表管理

    1.create 创建表
    -- 必须有创建表的权限和表空间
    -- 表名必须以字母开头,可以包含数字和符号,不能是系统关键字

    /*
    create table 表名
    (
    列名1 数据类型,
    列名2 数据类型,
    ……
    列名n 数据类型
    );
    */


    /*
    数据类型:

    number(m,n) 定义最大位数为m,精确到小数点后n位的数字类型,m的最大值是38,n可以不写,默认为整数,n会占用m的位数,number(6,2) 4位整数2位小数

    date 日期类型,范围是公元前4712年1月1日到公元后4712年12月31日

    char(n) 定义长度为n的固定长度的字符串类型,n的最大取值是2000个字节
    varchar2(n) 定义最大长度为n的可变长度的字符串类型,n的最大值是4000个字节

    char(n) 如果实际存储的字符串长度不到n个字节,会使用空格补齐到n个字节进行存储
    varchar2(n) 按照字符串的原有长度进行存储

    char 浪费空间,查询效率高
    varchar2 节省空间,查询效率低
    */


    CREATE TABLE test1
    (
    testid NUMBER(4),
    testname VARCHAR2(20),
    testage NUMBER(2),
    testgender CHAR(1),
    testdate DATE,
    testscore NUMBER(4,1)
    );

    SELECT * FROM test1;

    INSERT INTO test1
    VALUES(1002,'jodie',24,'M',SYSDATE,99);

    -- defualt 默认值:可以给某些列定义默认值,当使用insert语句放入数据时,如果不定义某些列,不再使用空值放入数据,而是使用默认值;默认值不能是列名,默认值必须与列的数据类型一致


    /*
    create table 表名
    (
    列名1 数据类型 【default 默认值】,
    列名2 数据类型【default 默认值】,
    ……
    列名n 数据类型【default 默认值】
    );
    */


    CREATE TABLE test2
    (
    testname VARCHAR2(20),
    testage NUMBER(2) DEFAULT 20,
    testgender CHAR(1) DEFAULT 'M',
    testdate DATE DEFAULT SYSDATE
    );

    SELECT * FROM test2;

    INSERT INTO test2
    VALUES('xiaoming',24,NULL,NULL);

    INSERT INTO test2(testname)
    VALUES ('xiaoqiang');

    -- create table 表名 as select …… 将查询结果创建成一张表,表名后面可以定义列名,但是不能定义数据类型

    CREATE TABLE dept20
    AS
    SELECT ename,job,sal,deptno,12*sal nianxin FROM emp
    WHERE deptno = 20;

    SELECT * FROM dept20;

    2.alter 修改表结构
    -- 一般情况下,应该在初期就设计好表的结构,不推荐在表创建成功后进行结构的修改,尤其是表中有数据以后,更不应该去修改

    -- 修改列名和列的数据类型
    -- alter table 表名 rename column 原列名 to 新列名;   修改列名
    -- alter table 表名 modify 列名 数据类型;   修改列的数据类型
    -- 数据类型只能改成更大,不能改成更小

    -- 添加和删除列
    -- alter table 表名 add 列名 数据类型;   添加列
    -- alter table 表名 drop column 列名;    删除列

    -- 添加 / 修改和删除默认值
    -- alter table 表名 modify 列名 default 默认值;   添加或修改默认值
    -- alter table 表名 modify 列名 default NULL;    删除默认值(将默认值设置为空)

    3.drop 删除表
    -- drop table 表名;

    DROP TABLE dept20;

    SELECT * FROM dept20;

    -- delete 属于dml语句,需要提交才能生效,可以回滚撤销操作。可以删除所有数据,也可以指定范围删除,不删除表结构。

    -- truncate 属于ddl语句,直接提交,不能回滚。快速删除所有数据,不能指定范围,保留表结构。

    -- drop 属于ddl语句,直接提交,不能回滚。删除表中所有数据和表结构。

    4.rename 重命名
    -- rename 原表名 to 新表名;

    RENAME test2 TO testnew;

    SELECT * FROM testnew;

    5.约束
    -- 约束是表中数据必须遵守的规则或者达到的条件
    -- 约束是针对具体的某些列创建的
    /*
    主键约束 —— PRIMARY KEY
    外键约束 —— FOREIGN KEY
    非空约束 —— NOT NULL
    唯一约束 —— UNIQUE
    检查约束 —— CHECK
    */

    -- 约束可以在创建表的同时创建,也可以在创建表之后创建
    -- 可以创建表级约束也可以创建列级约束,效果一样
    -- 表级约束可以定义约束名称,列级约束的名称由系统自动分配(SYS_Cxxxxx)
    -- 表级约束可以定义多个列之间的数据关系,列级约束只能定义一列的数据约束

    /*
    create table 表名
    (
    列名1 数据类型 【default 默认值】 【列级约束1 列级约束2 ……】,
    列名2 数据类型【default 默认值】 【列级约束1 列级约束2 ……】,
    ……
    列名n 数据类型【default 默认值】 【列级约束1 列级约束2 ……】,
    constraint 约束名称 约束类型(列名),
    constraint 约束名称 约束类型(列名),
    ……
    );


    */
    CREATE TABLE test3
    (
    testid NUMBER(4) PRIMARY KEY,
    testdeptno NUMBER(2) REFERENCES dept(deptno),
    testname VARCHAR2(20) NOT NULL,
    testphone NUMBER(11) UNIQUE,
    testgender CHAR(1) CHECK(testgender IN ('M','F')),
    testage NUMBER(2) CHECK(testage BETWEEN 18 AND 60)
    );

    SELECT * FROM test3;

    -- 确认约束的创建
    SELECT * FROM user_constraints;

    INSERT INTO test3
    VALUES (1008,20,'xiaoqiang',13800138008,'F',60);

    -- 非空约束只能定义列级,不能定义表级
    -- 主键、唯一、检查约束:constraint 约束名称 约束类型(列名)
    -- 表级的外键约束:constraint 约束名称 foreign key(列名) references 表名(列名)
    -- 当表中的主键是多个属性构成的,使用表级约束
    -- 当两列数据之间有约束关系时,使用表级约束


    CREATE TABLE score
    (
    st_id NUMBER(5),
    course_id NUMBER(5),
    score1 NUMBER(4,1),
    score2 NUMBER(4,1),
    CONSTRAINT pk_score PRIMARY KEY(st_id,course_id),
    CONSTRAINT check_score CHECK(score2 > score1)
    );

    INSERT INTO score
    VALUES(10000,50000,70,NULL);

    SELECT * FROM score;

    INSERT INTO score
    VALUES(10003,50002,40,30);

    -- alter 在创建表之后对约束进行定义

    -- alter table 表名 modify 列名 not null;      添加非空约束
    -- alter table 表名 add constraint 约束名称 约束类型(列名);     添加其他约束

    -- alter table 表名 modify 列名 null;      删除非空约束(允许该列取值为空)
    -- alter table 表名 drop constraint 约束名称;     删除其他约束

    1.创建班级表(grade)和学生表(student),结构如下:
    班级表:
    列名 数据类型
    grade_id(主键) number(4)
    grade_name(非空) varchar2(10)
    grade_director(班主任,非空) varchar2(20)

    CREATE TABLE grade
    (
    grade_id NUMBER(4) PRIMARY KEY,
    grade_name VARCHAR2(10) NOT NULL,
    grade_director varchar2(20) NOT NULL
    );

    SELECT * FROM grade;

    学生表:
    列名 数据类型
    st_id(主键) number(8)
    st_name(非空) varchar2(14)
    st_age(18岁以上) number(2)
    st_phno(不能重复) number(11)
    st_date(默认为当前系统时间) date
    st_gender(非空,只能为男或女,默认为男) char(2)
    st_grade(外键,关联班级表主键) number(4)

    CREATE TABLE student
    (
    st_id NUMBER(8) PRIMARY KEY,
    st_name VARCHAR2(14) NOT NULL,
    st_age NUMBER(2) CHECK(st_age > 18),
    st_phno NUMBER(11) UNIQUE,
    st_date DATE DEFAULT SYSDATE,
    st_gender CHAR(2) DEFAULT 'M' NOT NULL CHECK(st_gender IN ('M','F')),
    st_grade NUMBER(4),
    CONSTRAINT fk_st FOREIGN KEY(st_grade) REFERENCES grade(grade_id)
    );

    SELECT * FROM student;

  • 相关阅读:
    编译安装LAMP之php-5.4.13、xcache-2.0及使用ab命令实现压力测试
    编译安装LAMP之MySQL-5.5.28(通用二进制格式)
    编译安装LAMP之httpd-2.4.4
    建立LAMP平台
    MySQL初步,数据类型及SQL语句
    数据库及MySQL
    PHP相关概念及配置
    CSS:页面美化和布局控制
    HTML标签:表单标签
    web概念简述,HTML学习笔记
  • 原文地址:https://www.cnblogs.com/JodieRao/p/11358212.html
Copyright © 2011-2022 走看看