DDL--DML

简介: DDL--DML

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 ,数据库定义语言
  • 不支持事务. 删除表中的全部数据,不记录日志
相关文章
|
4月前
|
SQL Oracle 关系型数据库
DDL、DML和DCL的区别与理解
DDL、DML和DCL的区别与理解
189 1
DDL、DML和DCL的区别与理解
|
11月前
|
SQL
dml
DML(增删改表中的数据) 1.添加数据 insert into 表名(列名1,列名2)values(数据1,数据2) 2.删除数据 delete from 表名 where 条件 delete from 表名--效率低,有多少条执行多少次 truncate table 表名--先删除表,在创建 3.修改数据 update 表名 set 列名1=值1 条件
60 0
|
3月前
|
SQL 数据库
DML的有关方法,练习
DML的有关方法,练习
|
1月前
|
SQL 存储 安全
DDL、DML、DCL 的区别
【8月更文挑战第1天】
74 0
DDL、DML、DCL 的区别
|
3月前
|
SQL 关系型数据库 MySQL
MySQL单表操作学习DDL_DML_DQL语句
MySQL单表操作学习DDL_DML_DQL语句
32 0
|
4月前
|
SQL 数据库 索引
|
10月前
|
SQL 数据库
DML
DML
30 0
|
SQL 消息中间件 存储
SQL、DML和DDL
SQL、DML和DDL
197 0
SQL、DML和DDL
|
SQL 数据库
SQL中的DML、DDL以及DCL是什么?
SQL中的DML、DDL以及DCL是什么? DML(data manipulation language)是数据操纵语言:它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言。
2428 0
|
SQL 关系型数据库 MySQL
MySQL最详DDL和DML操作
MySQL最详DDL和DML操作