DDL 数据定义语言

DDL是基于数据表级别的操作的统称,对数据表的 创建 删 改

  • 删除

    • drop -- 删除表,记录日志
    • truncate -- 删除表中的全部数据,不删除表,不记录日志
  • 修改
    • alter -- 针对表中的字段.及字段的属性

      • add 添加列
      • modify 修改列的属性
      • drop 删除列
  • rename -- 给表重命名
  • create -- 创建新表

创建表

  • create table
create table 表名(
name 列的属性
);
  • 子查询创建表
create table 表名 as 查询语句
  • 列的类型
  • varchar ,目前支持,但是不保证以后还 支持
  • varchar2 (长度) 可变长度字符串
    • hello varchar2(10) 占五个字符
  • char(长度) 固定长度的字符串
    • char(10) 占十个字符,不足用空格补全
  • number (总长度,小数长度) 数字类型--- 小数长度不能大于总长度
  • date 年月日时分秒
  • timestamp 时间戳, 比date类型更精确
select current_date from dual;

结果格式:

2019-04-17 11:59:41

select current_timestamp  from dual;

结果格式:

2019-04-17 12:01:06.832000

更加详细, 精确到了秒的下一级

修改表

  • 修改表名
alter 旧表名 to 新表名;
  • 添加列
alter table 表名 add 列名 列类型
  • 添加多列
alter table add(
列名1 属性1,
列名2 属性2
)
  • 修改列的属性
alter table 表名 modify 列名 新属性
  • 修改列名
alter table 表名 rename column 旧列名 to 新列名

删除

  • 删除表
drop table 表名;
  • 删除列
alter table 表名 drop column 列名;

表的五大约束

  • 单表 有四个约束
  • 多表有 一个约束

单表约束

  1. 主键约束 -- primary key

    2. 主键约束默认不能为空,主键必须唯一
  2. 非空约束 -- not null
  3. 唯一约束 -- unnique
  4. 检查约束 -- check

其中候选码可以为空,但是不能重复

例:

create table student (
id number primary key,
name varchar2(20) unique, -- 唯一
age varchar2(20) not null ,
gender varchar2(10) check (gender in( '男','女'))
);

插数据:

验证主键约束-- 不能为空,必须唯一

  • 如果主键出现重复,报错,违反了唯一约束
  • 唯一约束: 违反,sql失败
  • 非空约束: 违反非空约束,sql失败
  • 检查约束 必须满足检查条件,否则sql失败

在mysql中,检查约束是可以使用的,但是mysql直接忽略了,写不写结果一样

多表约束

多表约束-即-主外键约束,很多时候数据库中的两张表是关系的,比如 商品分类表和商品表,就可以设计成多表约束

我们希望,商品表中的商品一一对应着商品分类表中的 商品分类,于是我们让 商品分类的主键 和 商品表中 所属分类的cid建立起主外键约束

**这样就得到了一条特性,往辅表中插入数据的前提是 插入的外键值,必须存在于主表中, 不然我们理解成, 一个没有所属分类的商品是没有意义的 **

实验:

-- 第一步,创建两张表(没有外键关联)


create table category(
cid number primary key ,
cname varchar2(20)
); create table product(
pid number primary key ,
pname varchar2(20),
cno number
);

-- 第二步: 添加数据,即便是 1!=11 也不出错

-- 假设我们的商品分类表中 cid ==1 为 手机
insert into category values (1,'手机'); -- 但是我们错误的把 锤子插入到了 cid==11目录下
insert into product values (1,'锤子',11);

-- 先把不满足的数据删除

delete  product  where pid =1;
delete from product where pid =1;

--- 第三步, 添加外键约束


-- 当我们直接执行,会报错,那是因为,我们前面的操作让两个表里面的数据已经不满足 外键约束; 因此先去删除不满足的数据
alter table product add foreign key (cno) references category (cid);

-- 关联成功后, 表中的数据被外键关联,无法被删除

-- 不能删除主表
drop table category;
-- drop table product;
-- 不能删除主表中的有外键关联的行
delete from category where cid = 1; -- 强制删除表 -- 不建议使用
drop table category cascade constraints;
-- 第一步,删除外键约束
-- 第二步,删除自己

级联删除

在商品分类表和商品表的建立外键关联后,我们提出需求,想在删除商品分类后,该分类下的商品一同被删除,于是我们建立级联删除的关系

修改商品表,添加新的属性

on delete cascade(瀑布级联)

alter table 商品表 add foreign key(商品表的cno) reference 商品分类表(主键) on delete cascade;

现在删除 主表中的数据,就可以级联删除


总结

级联操作,大部分是针对主表进行约束,而针对从表只有一条约束,只要是存在级联关系,从表中想添加数据,必须满足 外键值存在于主表当中

在不添加级联操作之前,一旦建立主表和从表一旦建立起主/外键约束,主表会受到如下约束:

  1. 不能直接删除主表
  2. 不能删除某行
  3. 可以强制删除主表 -- cascade constraints

强制删除主表,做两件事,1. 删除约束 2. 删除主表

添加级联操作之前,一旦建立主表和从表一旦建立起主/外键约束,主表会受到如下约束:

  1. 不能删除主表
  2. 能删除某行,并且从表从的拥有相应外键的行被级联删除

两种添加主键约束的方式:


第一种,定义时直接添加:并添加级联操作 create table category(
cid number primary key ,
cname varchar2(20)
); create table product(
pid number ,
pname varchar2(20),
cno number references category (cid) on delete cascade
); 第二种: 修改表,添加外键约束,并添加级联操作 alter table product add foreign key (cno) references category (cid) on delete cascade ;

添加主键约束(或者候选码约束)

三种添加主键约束的表达式

直接写:
create table product(
pid number ,
pname varchar2(20),
cno number
);
修改方法1:
alter table product add primary key (pid) ;
修改方法2: (取别名)
alter table product add constraint pp primary key (pid) ;

多扯一嘴 关于constraint(约束)关键字的单复数, 在添加约束(主键约束,候选码约束)取别名时,使用的是单数情况,因为就一个, 但是在强制删除表时 cascade constraints 使用的是复数


DML

针对表中数据的操作

  • insert
  • uptate
  • select
  • delete

关于insert

用法1:
insert into 表名 values(值和所有的列名对应上); 用法2:
insert into 表名 (列1,列2) values (值1,值2); 用法3: 使用子查询,插入数据
insert into 表名 查询语句

关于update

update 表名 set 列名 = 列的值 where ename = 'XXX'

关于delete

delete from 表名 [where 条件];

delete & truncate的区别

  • delete是DML data manipulation language 数据操作语言

    • 支持事务操作,删除一行
  • truncate 属于DDL ,数据库定义语言
    • 不支持事务. 删除表中的全部数据,不记录日志

DDL--DML的更多相关文章

  1. DDL DML DCL SQL

    https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_ddl SQL The Structured Query Language tha ...

  2. Hive数据据类型 DDL DML

    Hive的基本数据类型 DDL DML: 基本数据类型 对于Hive而言String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以 ...

  3. ORA-38301:can not perform DDL/DML over objects in Recycle Bin

    一个智障操作,drop一个用户,下面的东西比较多,删得比较慢,然后shell突然关了. 就导致了,删不掉,又不能创建新的用户.出版本要得比较急,就先创建新的用户测试去了. 今天要弄个东西,又想起这个事 ...

  4. MySQL中的DDL,DML

    MySQL中的DDL,DMLDDL:数据定义语言:    CREATE,ALTER,DROP        DB组件:数据库.表.索引.视图.用户.存储过程.存储函数.触发器.事件调度器等    CR ...

  5. SQL语言:DDL,DML,DCL,DQL,TCL

    DDL(Data Definition Language)数据库定义语言 statements are used to define the database structure or schema. ...

  6. DDL/DML是什么?

    DDL:(Data Definition Language)数据库定义语言 它是定义数据库的语言, 里面包含: CREATE ALTER DROP TRUNCATE COMMENT RENAME DM ...

  7. ddl dml dcl

    DCL数据控制语言 创建临时表空间 create temporary tablespace user_temp tempfile 'E:/oracle/product/10.1.0/oradata/o ...

  8. oracle中DDL DML指什么?

    DDL create table 创建表 alter table 修改表 drop table 删除表 truncate table 删除表中所有行 create index 创建索引 drop in ...

  9. DDL DML DCL语句

    总体解释:DML(data manipulation language):自动提交的数据库操作语言       它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样 DDL( ...

  10. 数据库必会必知 之 SQL四种语言:DDL DML DCL TCL

    作者:泥瓦匠 今天群里面讨论,DDL 还是 DML,我这种小白还是总结下他们的区别吧. 1. DDL - Data Definition Language 数据库定义语言:定义数据库的结构. 其主要命 ...

随机推荐

  1. 【Java】在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    题目描述: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整 ...

  2. 简单学习【1】——使用webpack

    使用webpack webpack命令 webpack配置 第三方脚手架 1.webpack命令 webpack - h (webpack 所有的选项) webpack -v (查看webpack的版 ...

  3. 《Java基础知识》序列化与反序列化详解

    序列化的作用:为了不同jvm之间共享实例对象的一种解决方案.由java提供此机制. 序列化应用场景: 1. 分布式传递对象. 2. 网络传递对象. 3. tomcat关闭以后会把session对象序列 ...

  4. 蝉知CMS5.6反射型XSS审计复现

    0x00 源起 最近在深入学习反射XSS时遇到蝉知CMS5.6反射型XSS这个案列,乍一看网上的漏洞介绍少之又少,也没有详细的审计复现流程.虽然是17年的漏洞了,不巧本人正是一个喜欢钻研的人.这个CM ...

  5. SpringBoot电商项目实战 — ElasticSearch接入实现

    如今在一些中大型网站中,搜索引擎已是必不可少的内容了.首先我们看看搜索引擎到底是什么呢?搜索引擎,就是根据用户需求与一定算法,运用特定策略从互联网检索出制定信息反馈给用户的一门检索技术.搜索引擎依托于 ...

  6. Android 项目优化(七):阿里巴巴Android开发手册整理总结

    本来之前觉得Android项目优化系列的文章基本整理完毕了,但是近期看了一下<阿里Android开发手册>有了很多收获,想再整理一篇,下面就开始吧. 先在这里列一下之前整理的文章及链接: ...

  7. API访问控制设计

    References ● OAuth 2.0 for native apps: https://datatracker.ietf.org/doc/rfc8252/ ● OAuth 2.0 for br ...

  8. requests第三方库

    requests第三方库 简介: requests是一个优雅而简单的Python 第三方HTTP请求库,专为人类而构建. requests的官方文档同样也非常的完善详尽,而且少见的有中文官方文档:ht ...

  9. ASP.NET Core on K8S深入学习(11)K8S网络知多少

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 一.Kubernetes网络模型 我们都知道Kubernetes作为容器编排引 ...

  10. RabbitMQ 离线安装(带视频)

    疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 架构师成长+面试必备之 高并发基础书籍 [Netty Zookeeper Redis 高并发实战 ] 疯狂创客圈 高并 ...