四、DDL(数据库定义语言)

四、DDL(数据库定义语言)

*DDL(data defination language):数据库定义语言(创建、修改、删除) create、alert、drop

※※※注:本章可略过,表的相关处理基本都是手操※※※

※※※注:sql语句内的所有AS均可省略※※※

1、约束

  1. 对表的限制(5种)

    1. 非空约束:not null(不能存储null)
    2. 唯一约束:unique(不可以重复,但可以存储无数个null)
    3. 主键约束:primary key(不可以重复,也不能为null)
    4. 外键约束:foreign key(顾名思义,就是关联表的主键,当然这里可以随便存null)
    5. 检查约束:check(注意:目前MySQL不支持、Oracle支持!)
  2. 添加约束

    1. -- 建表时使用
      constraint 约束名 约束(列名)
      constraint 约束名 check(条件) -- 不取名可直接简写 check(条件) 
      
      -- 栗子一枚
      CREATE TABLE emptest(
          empno NUMBER(4),
          ename VARCHAR2(10) NOT NULL, -- 你总得有个名字吧
          deptno NUMBER(2),
          email varchar(20) unique, -- 邮箱也不能重复哈
          CONSTRAINT pk123 PRIMARY KEY (empno), -- 添加个主键约束很合理吧
          CONSTRAINT fk123 FOREIGN KEY (deptno) -- 在添加个外键约束也不过分吧
          	-- 指定外键是哪个表的并绑定级联删除也很有理吧
              REFERENCES dept0630(deptno) ON DELETE CASCADE
      );
      
      1. REFERENCES:引用【引用关联表的字段(主键)到主表】
      2. ON DELETE:级联删除
        1. cascade:当主表数据被删除,从表数据也会随之被删除(dept中部门20被删,emp中deptno也随之删除)
        2. no action:不采取操作(dept中部门20被删,emp中deptno不变)
        3. set null:被删除影响到的数据,设置为null(dept中部门20被删,emp中deptno变成null)
      3. 检查约束:如果不起名字,系统会自定义
    2. -- 建表后使用
      alter table 表名 modify(列名 约束);
      -- 栗子一枚
      ALTER TABLE emp0630 MODIFY(ename NOT NULL); -- 表内数据必须满足约束条件才能追加成功
      
      -- 添加约束
      alter table 表名 
      add constraint 自定义约束名字 foreign key(关联表字段名) 
      REFERENCES 关联表名(关联表字段名);
      
  3. 删除约束

    1. -- 格式
      alter table 表名 drop constraint 约束名; 
      -- 栗子一枚
      -- 如果被其他表引用,删除会失败;但手动编辑表时可以删除
      ALTER TABLE dept0630 DROP CONSTRAINT pkdept0630; 
      
  4. 约束无效化

    1. -- 格式
      alter table 表名 disable constraint 约束名;
      -- 栗子一枚
      -- 如果约束对象变灰,可以鼠标操作,右键约束,选择允许/禁止
      ALTER TABLE Employee DISABLE CONSTRAINT bnnnn;
      

2、create

表命名规则:以字母开头,1-30字符之间,可以用数字/字母/_/$
例:mst_type taccount …

  1. 正常创建一张表

    1. -- 格式
      create table 表名 (
          列名 数据类型, 
          列名 数据类型…
      );
      -- 举个栗子:
      CREATE TABLE test20220604(
             testid NUMBER(2), 
             testdate DATE, 
             testmemo VARCHAR(20)
      );
      
  2. 复制并创建一张表

    1. -- ※注意:约束不会复制过去
      CREATE TABLE emps AS SELECT * FROM emp WHERE deptno=10;
      
  3. 复制一张空表

    1. -- ※注意:约束不会复制过去
      CREATE TABLE emps AS SELECT * FROM emp WHERE 1=2;
      

3、alter

  1. 追加一列

    1. -- 格式
      alter table 表名 add();
      -- 举个栗子:
      ALTER TABLE test0603 ADD(testadd VARCHAR(20));
      
  2. 删除一列

    1. -- 格式
      alter table test0603 drop column 列名;
      -- 举个栗子:
      ALTER TABLE test0603 DROP COLUMN testadd;
      
  3. 表的重命名

    1. -- 格式
      rename 表名 to 新表名;
      -- 举个栗子:
      RENAME test0603 TO test0603new;
      
  4. 列的重命名

    1. -- 格式
      alter table 表名 rename column 列名 to 新列名;
      -- 举个栗子:
      ALTER TABLE test0603new RENAME COLUMN testname TO tname;
      

4、drop、truncate、delete

  1. 数据和表对象全部删除:drop

    1. -- 格式
      drop table 表名;
      -- 举个栗子:
      DROP TABLE test0603;
      
  2. 只清空表内全部数据(不能回滚):truncate

    1. -- 格式
      truncate table 表名;
      -- 举个栗子:
      TRUNCATE TABLE test0603;
      
  3. 只清空表内全部数据(不能回滚):delete

    1. -- 格式
      delete from 表名;
      -- 举个栗子:
      DELETE FROM test0603;
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纯纯的小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值