DDL--DML
DDL 数据定义语言
DDL是基于数据表级别的操作的统称,对数据表的 创建 删 改
- 删除
- drop -- 删除表,记录日志
- truncate -- 删除表中的全部数据,不删除表,不记录日志
- 修改
- alter -- 针对表中的字段.及字段的属性
- add 添加列
- modify 修改列的属性
- drop 删除列
- alter -- 针对表中的字段.及字段的属性
- 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 列名;
表的五大约束
- 单表 有四个约束
- 多表有 一个约束
单表约束
- 主键约束 -- primary key
2. 主键约束默认不能为空,主键必须唯一 - 非空约束 -- not null
- 唯一约束 -- unnique
- 检查约束 -- 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;
现在删除 主表中的数据,就可以级联删除
总结
级联操作,大部分是针对主表进行约束,而针对从表只有一条约束,只要是存在级联关系,从表中想添加数据,必须满足 外键值存在于主表当中
在不添加级联操作之前,一旦建立主表和从表一旦建立起主/外键约束,主表会受到如下约束:
- 不能直接删除主表
- 不能删除某行
- 可以强制删除主表 -- cascade constraints
强制删除主表,做两件事,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的更多相关文章
- DDL DML DCL SQL
https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_ddl SQL The Structured Query Language tha ...
- Hive数据据类型 DDL DML
Hive的基本数据类型 DDL DML: 基本数据类型 对于Hive而言String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以 ...
- ORA-38301:can not perform DDL/DML over objects in Recycle Bin
一个智障操作,drop一个用户,下面的东西比较多,删得比较慢,然后shell突然关了. 就导致了,删不掉,又不能创建新的用户.出版本要得比较急,就先创建新的用户测试去了. 今天要弄个东西,又想起这个事 ...
- MySQL中的DDL,DML
MySQL中的DDL,DMLDDL:数据定义语言: CREATE,ALTER,DROP DB组件:数据库.表.索引.视图.用户.存储过程.存储函数.触发器.事件调度器等 CR ...
- SQL语言:DDL,DML,DCL,DQL,TCL
DDL(Data Definition Language)数据库定义语言 statements are used to define the database structure or schema. ...
- DDL/DML是什么?
DDL:(Data Definition Language)数据库定义语言 它是定义数据库的语言, 里面包含: CREATE ALTER DROP TRUNCATE COMMENT RENAME DM ...
- ddl dml dcl
DCL数据控制语言 创建临时表空间 create temporary tablespace user_temp tempfile 'E:/oracle/product/10.1.0/oradata/o ...
- oracle中DDL DML指什么?
DDL create table 创建表 alter table 修改表 drop table 删除表 truncate table 删除表中所有行 create index 创建索引 drop in ...
- DDL DML DCL语句
总体解释:DML(data manipulation language):自动提交的数据库操作语言 它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样 DDL( ...
- 数据库必会必知 之 SQL四种语言:DDL DML DCL TCL
作者:泥瓦匠 今天群里面讨论,DDL 还是 DML,我这种小白还是总结下他们的区别吧. 1. DDL - Data Definition Language 数据库定义语言:定义数据库的结构. 其主要命 ...
随机推荐
- GoLand不同目录(包)方法调用
新手学go,跨目录调用方法是真的难,弄了好几天,几乎要放弃go了,在此演示一下如何跨目录(包)调用~ 需求是main.go调用model包下mysql.go中Query方法,目录结构如下. 要点: 1 ...
- dev gridcontrol 行号
/// <summary> /// GridView 显示行号 设置行号列的宽度 /// </summary> /// <param name="gv" ...
- 如何解决两个span标签之间的缝隙
1.span直接一行 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...
- 使用SQL语句修改Mysql数据库字符集的方法
使用SQL语句修改Mysql数据库字符集的方法 修改库: alter database [$database] character set [$character_set] collate [$c ...
- C# WPF抽屉效果实现(C# WPF Material Design UI: Navigation Drawer & PopUp Menu)
时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...
- Django3.0 异步通信初体验(小结)
2019年12月2日,Django终于正式发布了3.0版本.怀着无比的期待,我们来尝试一下吧! (附ASGI官方文档地址:https://asgi.readthedocs.io/en/latest/e ...
- JVM CPU Profiler技术原理及源码深度解析
研发人员在遇到线上报警或需要优化系统性能时,常常需要分析程序运行行为和性能瓶颈.Profiling技术是一种在应用运行时收集程序相关信息的动态分析手段,常用的JVM Profiler可以从多个方面对程 ...
- Supermap/Cesium 开发心得----本地视频接入播放
在三维中,为了增加现实感.给人一种带入感,我们会采取接入视频的方式来实现,那么如何接入视频呢? 由于没有截至写文章为止,我没有视频流数据,所以只能采取本地视频文件的方式来做. 本文介绍结束视频的其中一 ...
- Hadoop_HDFS_02
1. HDFS入门 1.1 HDFS基本概念 HDFS是Hadoop Distribute File System的简称, 意为: Hadoop分布式文件系统. 是Hadoop三大核心组件之一, 作为 ...
- WebAPI接口测试数据库操作
通常我们是不建议直接查看数据库内容来检查功能的,但是在没有外部接口或者图形界面验证的情况下,只能通过查询数据库来验证. 比如我们手工需要从界面上添加一万条数据,估计要花好几天时间,显然不能手工去操作. ...