oracle数据库基础:DDL语言
DDL数据定义语言
简介
常用的四种关键字为create,drop,alter,truncate。
1.create
create,可以用来创建,定义表,视图,序列,索引等等,这里拿建表举例
1.1 格式
有两种:
第一种:
create table 表名( 字段名 数据类型 [列约束类型], 字段名 数据类型 [列约束类型], 字段名 数据类型 [列约束类型], 字段名 数据类型 [列约束类型], 字段名 数据类型 [列约束类型]
);
第二种:
create table 表名( 字段名 数据类型 [列约束类型], 字段名 数据类型 [列约束类型], 字段名 数据类型 [列约束类型], 字段名 数据类型 [列约束类型], [表级约束], [表级约束]
);
中括号里面的内容表示可选,列级约束,表级约束都是对列中的值进行约束限制的
1.2 表的命名
对应表和列的名字:
- 必须是字母开头
- 必须是1-30个字符之间的长度
- 表名中只能出现字母、数字、_、#
- 不能和数据库中己有对象的名字重复
- 不能是数据库中的关键字
1.3 数据类型
- char 、varchar 、varchar2 都是存储字符串
char 存储数据的长度是固定的。varchar2 存储数据的长度是可变的。
char 效率比 varchar2效率高。 varchar是数据库标准类型,varchar2类型是oracle数据库中特有的
varchar2不能存空字符串,可以存null。varchar可以存空字符串 - number(p,s)
p 表示最大位数(整数位+小数位), s表示保留的小数位(四舍五入),也可以为负数。
例如,number(5,2)
存进去123.456,取出来为123.46
存进去12345.456,运行报错:值大于为此列指定的允许精度
可以直接使用number,不加参数,描述没有默认没限制 - date日期类型
- blob 存二进制对象,例如视频,音频,图片等
- clob存储大文本,例如很多很多文字
1.4 约束
约束就是对值的要求,如值是否可以为空,是否是惟一,等等
1.4.1 常见约束
- 主键约束 PRIMARY KEY primary key
- 外键约束 FOREIGN KEY foreign key
- 唯一约束 UNIQUE unique
- 非空约束 NOT NULL not null
- check约束 CHECK check
1.4.2 约束分类:
(1)列级约束
不带约束建表
create table student( id number primary key, name varchar2(200) not null, age number, birthday date
);
带约束建表:
create table student( id number primary key, name varchar2(100) not null, email varchar2(100) unique, gender char(1) check(gender in('f','m')), age number,birthday date
);
(2)表级约束
create table student( id number, name varchar2(20) not null, age number default 20, email varchar2(100), gender char, primary key(id), unique(email), check(gender in('f','m'))
);
注意,非空约束(not null),不能声明成表级约束
使用表级约束声明外键约束
create table t_customer( id number primary key, name varchar2(200) not null
);
create table t_order( id number primary key, content varchar2(200) not null, customer_id number, foreign key(customer_id) references t_customer(id)
);
使用表级约束 声明 联合唯一约束
create table student( id number primary key, class varchar2(50) not null, name varchar2(50) not null, unique(class,name)
);
联合唯一约束必须使用表级约束来声明
表级约束和列级约束对比:
- 表级约束和列级约束所写的位置不一样
- not null约束不能用表级约束来声明
- 表级约束和列级约束声明语法稍有所不同
- 如果要声明的约束为联合主键、联合外键、联合唯一的时候,就一定要用表级约束
1.4.3 给约束起名字
在创建约束的时候(行级、表级都可以),还可以给约束起一个名字,这时候就要使用关键字constraint
起名字的规律一般会是:表名_列名_约束类型,如果没有给约束起名字,那么系统也会给这个约束起一个默认的名字,将来我们可以根据之前给约束起好的名字,而找到这个约束,然后进行修改获取其他操作。
例如:
(1)列级约束起名字
create table student( id number constraint student_id_pk primary key, name varchar2(100) constraint student_name_nn not null, email varchar2(100) constraint student_email_un unique, gender char(1) constraint student_gender_ck check(gender in('f','m')), age number, birthday date
);
(2)表级约束起名字
create table t_customer( id number, name varchar2(20) not null, age number, email varchar2(100), gender char, constraint cus_id_pk primary key(id), constraint cus_email_un unique(email), constraint cus_gender_ck check(gender in('f','m')));create table t_order( id number, price number not null, customer_id number, constraint order_cid_fk foreign key(customer_id) references t_customer(id)
);
建表时的一些特殊操作
(1)建立一张表和s_dept一模一样,s_dept的表结构和表中的数据全部复制过来
create table test1
as
select * from s_dept;
(2)建立一张表和s_dept一模一样,只拿来s_dept的表结构,没有数据
create table test2
as
select * from s_dept
where 1=2;
(3)建立一张表和s_dept一模一样,只复制表中某几个指定列的数据
create table test3
as
select id,last_name,salary from s_dept;
2、drop
作用:进行删除操作。
drop用来删除表,序列,视图,索引等,这里拿表举例。
drop from 表名;
没错,就这么简单
当两个表中存在外键约束时:
//这是一个顾客表
create table t_customer( id number primary key, name varchar2(200) not null
);//这是订单表
create table t_order( id number primary key, content varchar2(200) not null, customer_id number references t_customer(id)
);drop table t_customer;
drop table t_order;
两张表中的关系是:订单表中的外键列customer_id的值,是引用自顾客表t_customer中的主键列id的值
此时直接删除顾客表示不会成功的,因为t_customer的主键列的值被别的表给引用了
那么该如何删除呢:
(1)方式一:可以先删除订单表t_order,然后再删除t_customer就可以了
(2)方式二:如果非要想直接删除当前这个顾客表t_customer,就需要使用下面的语句:
drop table t_customer cascade constraints;
表示删除t_customer表的同时,也级联删除与表相关的约束,外键约束没有了,这个表自然可以被删除掉,cascade是级联的意思
3、alter
在表创建好的情况下,可以使用alter关键字,来修改表的信息。
alter属于DDL语句,会自动当前事务。
具体使用:
测试用表:
create table t_user( id number constraint user_id_pk primary key, name varchar2(100), salary number
);
drop table t_user;
(1)在表中添加新列
alter table t_user
add birthday date;
(2)删除表中的列
alter table t_user
drop column birthday;
(3)给表中添加约束
alter table t_user
add constraint user_name_ununique(name);
(4)删除表中的约束
alter table t_user
drop constraint user_name_un;
(5)修改表名
rename t_user to mytest;
rename mytest to t_user;
(6)修改列的数据类型
alter table t_user
modify (name varchar2(500));
(7)设置约束失效
alter table t_user
disable constraint user_id_pk cascade;
这里必须知道约束的名字
4、truncate
用来截断表中的数据,表示先删除,再提交。
truncate table t_user;
相当于下面的代码
delete from t_user;
commit;
oracle数据库基础:DDL语言相关推荐
- oracle数据库基础知识总结,oracle数据库基础知识学习笔记
oracle数据库基础知识学习笔记 一.oracle数据库类型: Char: 字符型(最大长度2000,定长.不足时以空格补充) Varchar2:字符型 最大长度 4000,变长,实际长度由存储的 ...
- oracle数据库基础测试,ORACLE数据库基础测试题oracle数据库复习题.docx
<ORACLE数据库基础测试题oracle数据库复习题.docx>由会员分享,可在线阅读,更多相关<ORACLE数据库基础测试题oracle数据库复习题.docx(18页珍藏版)&g ...
- Oracle数据库:sql语言结构,数据查询语言DQL,select * from table;算术,别名,连接,去重等操作
Oracle数据库:sql语言结构,数据查询语言DQL,select * from table;算术,别名,连接,去重等操作 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很 ...
- Web阶段--Oracle数据库基础知识点
Web阶段–Oracle数据库基础知识点 一.数据库 1.定义 是一个数据存储管理的软件,全称rdbms(关系数据库管理系统),简称数据库(db) 2.为什么需要应用数据库? 1.现有文本文件存放数据 ...
- Oracle数据库基础
Oracle数据库基础 1.Oracle简介:Oracle是一个数据库管理系统,是Oracle公司的核心产品. Oracle数据库主要特点特点: > 支持多用户.大事务量的事务处理 > 在 ...
- Oracle数据库基础知识点大全(一)
Oracle数据库基础知识点大全 一.数据库基本概念 E-R模型 数据库对象 二:标准SQL包含了4种基本的语句类别 三:DML语句(数据操作语句) 数字和日期使用的数学表达式 常用 where 查询 ...
- Oracle数据库基础入门《二》Oracle内存结构
Oracle数据库基础入门<二>Oracle内存结构 Oracle 的内存由系统全局区(System Global Area,简称 SGA)和程序全局区(Program Global Ar ...
- 【Oracle SQL数据库-教学2】--- Oracle数据库基础
[Oracle SQL数据库-教学2]- Oracle数据库基础 文章目录 [Oracle SQL数据库-教学2]--- Oracle数据库基础 本期主要内容: 一. 数据库管理系统概述 ① 数据处理 ...
- Oracle数据库基础教程
查看书籍详细信息: Oracle数据库基础教程 编辑推荐 体现作者多年的数据库管理与开发经验,结合大量实用技巧,重点突出,便于灵活掌握,提供典型应用实例与上机实验,分析详细,实用性强. 本书是作者结合 ...
- oracle运行原理ppt,oracle数据库基础培训PPT
PPT内容 这是一个oracle数据库基础培训PPT,主要介绍了描述 Oracle 服务器的体系结构及其主要构件.列举用户连接到 Oracle 实例所涉及的结构等内容. Oracle数据库维护培训胶片 ...
最新文章
- android如何看百分比版本,【JAVA】Android百分比布局
- 曲线数学NURBS之bezier曲线
- 还在用Logback?Log4j2的异步性能已经无敌了,还不快试试
- 完整的维纳滤波器Matlab源程序
- c# html 后台拼_c#编写html后台
- linux c之gcc编译出现error:lvalue required as unary ‘‘ operand解决办法
- [AtCoder Regular Contest 060] E - Tak and Hotels
- php 查找数组相同元素,查找数组中重复的元素
- 向ES6看齐,用更好的JavaScript(三)
- graphpad多条不同的曲线_应用Graphpad Prism制作多组ROC曲线图
- 如何使用maven打包
- axure 画小程序效果图_微信小程序-基于canvas画画涂鸦
- python 把当前目录文件夹中的所有图片缩放为640*480
- 二叉树遍历——递归算法
- (转载)SpringBoot配置Druid数据源监控服务Yml格式
- 计算机的奇迹英语作文,高中英语作文范文:奇迹
- 华硕bios更改固态硬盘启动_华硕bios怎么设置固态硬盘为第一启动项
- 程序猿和hr面试时的巅峰对决
- Java14它真的来了, 真是尾气都吃不到了
- CISP——密码学基本概念(术语)
热门文章
- 渗透学习-靶场篇-安全狗的安装与绕过实验(后续还会更新)
- php两个数组合并 不使用函数,php数组合并array_merge()函数使用注意事项
- java潮流奢侈品购物网站计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
- python解析二维码_Python如何识别二维码
- oracle连接出现问题
- java静态数据与非静态数据的初始化
- 牛腩细节(SQLHelper再识)
- 12306铁路订票系统的一个小bug
- Windows 下载git
- java流程引擎实现_手写实现一套流程编排