Oracle数据库DDL,DML,视图,PLSQL编程
动手敲~~~
- --创建一个表空间--beijing
- create tablespace beijing
- datafile 'c:\beijing.dbf'
- size 100m
- autoextend on
- next 10m;
- --删除表空间
- drop tablespace beijing;
- /*
- 创建用户
- */
- create user dashao
- identified by dashao
- default tablespace beijing;
- /*
- 授权 grant 角色 | 权限 to 用户
- */
- grant connect to dashao;
- --授予dba的角色
- grant dba to dashao;
- /*
- 创建表
- create table 表名(
- 列名 列的类型 [列的约束],
- 列名 列的类型 [列的约束]
- );
- 列的类型:
- varchar ,在Oracle中,目前是支持的, 但是不保证以后还支持
- varchar2(长度) 可变字符长度 varchar2(10) hello 占5个字符
- char(长度) 固定长度字符 char(10) hello 占10个字符,用空格填充
- number(总长度,小数长度) 数字类型 --小数长度不能大于等于总长度
- date 年月日时分秒 2017/4/13 9:43:49
- timestamp 时间戳, 比date类型更加精确 13-APR-17 09.44.08.272000 AM +08:00
- LONG/CLOB : 存放一本小说
- BLOB : 存放电影 java 存进去, 再读取出来
- 使用子查询的方式创建表
- create table 表名 as 查询语句;
- 注意: 只会复制表结构和表中的数据,不会复制列的约束
- 如果查询语句有结果, 就是复制 表结构和数据
- 如果查询语句没有结果, 就是复制 表结构
- */
- select * from scott.emp;
- create table test1(
- name1 varchar2(10),
- name2 char(10),
- age number(2,3)
- );
- insert into test1(name1,name2) values('hello','hello');
- select * from test1 where name1 like 'hello'; --可以查询数据
- select * from test1 where name2 like 'hello'; --查不出数据
- insert into test1(age) values(2);
- select current_date from dual;
- select current_timestamp from dual;
- -- create table 表名 as 查询语句; 复制表
- create table emp as select * from scott.emp;
- select * from emp;
- --如果查询语句是没有任何的结果
- select * from scott.emp where 1=2;
- create table emp1 as select * from scott.emp where 1=2;
- select * from emp1;
- /*
- 修改表:
- 添加列
- 修改列
- 删除列
- 修改列名
- 重命名表
- sql分类:
- DDL : 数据定义语言, 修改的结构 alter create drop truncate
- DML : 数据操纵语言 , 操作表中数据 insert update delete
- DCL : 数据控制语言 , grant
- DQL : select
- */
- create table stu(
- stuid number,
- sname varchar2(10)
- );
- alter table stu add phone varchar2(11);
- alter table stu add (
- mobile varchar2(11),
- sex varchar2(2)
- );
- --修改列的类型
- alter table stu modify sex varchar2(4);
- --修改列的名 sex --->gender
- alter table stu rename column sex to gender;
- --删除列
- alter table stu drop column gender;
- select * from stu;
- --修改表名
- rename stu to Student;
- select * from student;
- --删除表
- drop table Student;
- /*
- 表的五大约束
- 列的约束:约束主要是用来约束表中的数据的规则
- 主键约束:primary key 不能为空,必须唯一
- 非空约束
- 唯一约束
- 检查约束 check(条件) 在mysql中是可以写的,但是mysql直接忽略了检查约束
- 外键约束:
- 主要是用来约束从表a总的记录,必须是存在于主表b中
- */
- --男,女,人妖
- create table student(
- stuid number primary key,
- sname varchar2(10) unique,
- age varchar2(10) not null,
- gender varchar2(4) check( gender in ('男','女','人妖'))
- );
- --主键约束违反
- insert into student values(1,'张三','','男');
- insert into student values(1,'李四','','男');
- --唯一约束违反
- insert into student values(1,'徐立','','男');
- insert into student values(2,'徐立','','男');
- --非空约束
- insert into student values(1,'徐立',null,'男');
- --检查约束
- insert into student values(1,'徐立','','男');
- insert into student values(1,'徐立','','妖');
- /*
- 商品分类,商品表
- */
- --商品分类表
- create table category(
- cid number primary key,
- cname varchar2(20)
- );
- --创建一个商品表
- create table product(
- pid number primary key,
- pname varchar2(20),
- cno number
- );
- insert into category values(1,'手机数码');
- insert into product values(10,'锤子',11);
- --添加外键约束
- alter table Product add foreign key(cno) references Category(cid);
- delete from Product where pid=10;
- --1.首先主表中必须存在11号, 先往主表中插入数据,再往从表中插入数据
- insert into Category values(2,'电脑办公');
- insert into Product values(11,'外星人',2);
- select * from Category;
- select * from Product;
- --删除Category
- drop table Category;--被外键关联,无法删除
- --强制删除(不建议),先删除外键关联的外键约束,在删除自己,
- drop table Category cascade constraint;
- --级联删除
- ----添加外键约束,使用级联约束 ,在删除的时候,使用级联删除
- alter table product add foreign key(cno) references category(cid) on delete cascade;
- insert into category values(2,'电脑办公');
- insert into product values(11,'外星人',2);
- --级联删除 : 首先去从表中找有没有 关联数据, 如果在从表中找到关联数据,先删除从表中关联数据,然后再删除表中的数据
- delete from category where cid = 2;
- select * from Category;
- select * from Product;
- /*
- 插入数据:
- insert into 表名 values(所有列的值都要对应写上)
- insert into 表名(列1,列2) values(值1,值2);
- 使用子查询插入数据
- insert into 表名 查询语句
- */
- select * from emp1;
- select * from emp;
- --将emp中10号部门的员工信息,插入到emp1中
- insert into emp1 select * from emp where deptno=10 ;
- /*
- 更新数据
- update 表名 set 列名 = 列的值 [where 条件]
- */
- update emp1 set ename='HUAAN' where ename = 'KING';
- select * from emp1;
- /*
- 删除数据:
- delete from 表名 [where 条件]
- delete和truncate 区别
- delete: truncate:
- DML DDL
- 逐条删除 先删除表再创建表
- 支持事务操作 不支持事务操作,
- 执行效率要高
- */
- /*
- 事务: 就是一系列的操作,要么都成功,要么都失败
- 四大特性: 原子性,隔离性,持久性,一致性
- 如果不考虑隔离级别: 脏读,虚读,不可重复读
- MYSQL隔离级别: READ UNCOMMITTED , READ COMMITTED, REPEATABLE READ, SERIALIAZABLE
- ORACLE隔离级别: READ COMMITTED SERIALIZABLE READ ONLY
- 默认隔离级别: READ COMMITTED
- 提交 : commit
- 事务的保存点/回滚点: savepoint 保存点的名称
- 回滚: rollback
- */
- create table louti(
- lou number primary key
- );
- insert into louti values(1);
- insert into louti values(2);
- insert into louti values(3);
- insert into louti values(4);
- insert into louti values(5);
- savepoint dangban;
- insert into louti values(5); --主键约束会发生异常
- insert into louti values(6);
- rollback to dangban
- commit;
- declare
- begin
- insert into louti values(1);
- insert into louti values(2);
- insert into louti values(3);
- insert into louti values(4);
- insert into louti values(5);
- savepoint dangban;
- insert into louti values(5); --这行代码会发生异常
- insert into louti values(6);
- commit;
- exception --捕获异常
- when others then
- rollback to dangban;
- commit;
- end;
- select * from louti;
- /*
- 视图: 是对查询结果的一个封装
- 视图里面所有的数据,都是来自于它查询的那张表,视图本身不存储任何数据
- 1.能够封装复杂的查询结果
- 2.屏蔽表中的细节
- 语法:
- create [or replace] view 视图的名称 as 查询语句 [ with read only]
- 注意: 通常不要通过视图去修改,视图创建的时候,通常要加上with read only
- */
- select * from emp;
- --创建一个视图
- create or replace view view_test1 as select ename,job,mgr from emp;
- select * from view_test1;
- --通过视图修改数据
- update view_test1 set ename = 'SMITH2' where ename='SMITH'
- select * from emp;
- --创建一个只读视图
- create or replace view view_test2 as select ename,job,mgr from emp with read only;
- update view_test2 set ename='SMITH3' where ename = 'SMITH2';
- /*
- 序列: 生成类似于 auto_increment 这种ID自动增长 1,2,3,4,5....
- auto_increment 这个是mysql
- 语法:
- create sequence 序列的名称
- start with 从几开始
- increment by 每次增长多少
- maxvalue 最大值 | nomaxvalue
- minvalue 最小值 | nominvalue
- cycle | nocycle 是否循环 1,2,3,1,2,3
- cache 缓存的数量3 | nocache 1,2,3,4,5,6
- 如何从序列获取值
- currval : 当前值
- nextval : 下一个值
- 注意: currval 需要在调用nextval之后才能使用
- 永不回头,往下取数据, 无论发生异常, 回滚
- */
- --创建一个 1,3,5,7,9......30
- create sequence seq_test1
- start with 1
- increment by 2
- maxvalue 20
- cycle
- cache 10;
- select seq_test1.nextval from dual;
- select seq_test1.currval from dual;
- /*
- 索引:相当于是一本书的目录,能够提高我们的查询效率
- 如果某一列,你经常用来作为查询条件,那么就有必要创建索引,数据量比较的情况
- 语法:
- create index 索引的名称 on 表名(列)
- 注意:主键约束自带主键索引, 唯一约束自带唯一索引
- 索引原理: btree balance Tree 平衡二叉树
- 如果某列作为查询条件的时候,可以提高查询效率,但是修改的时候,会变慢
- 索引创建好之后,过了一段,DBA都会去做重构索引
- SQL调优:
- 1.查看执行计划F5
- 2. 分析里面的cost 和 影响行数, 想办法降低
- */
- /*
- DDL表空间操作
- 创建表空间
- 创建用户
- 授权
- 创建表
- 子查询创建表
- 修改表 : 添加列,删除列,修改列,修改列名, 修改表名
- 约束:
- 主键约束,唯一约束,非空约束,检查约束,外键约束
- 外键约束:
- 强制删除
- 级联删除
- DML表中数据:
- 插入数据
- 子查询插入数据
- 更新数据
- 删除数据: delete 和 truncate
- 事务操作:
- savepoint 保存点
- rollback to 保存点
- ORACLE事务隔离级别 : READ COMMITTED
- 视图: 就像窗户一样, 封装查询结果 , 通常视图创建只读视图
- 序列: 主要是用来实现ID自增长
- 索引: 相当于是书的目录,能够提高查询效率, 原理 平衡二叉树, 每隔一段时间DBA都需要去重建索引
- 同义词: create synonym 名称 for 对象的名称
- */
- /*
- PLSQL编程 : procedure Language 过程语言 Oracle对SQL的一个扩展
- 让我们能够像在java中一样写 if else else if 条件, 还可以编写循环逻辑 for while
- declare
- --声明变量
- 变量名 变量类型;
- 变量名 变量类型 := 初始值;
- vsal emp.sal%type; --引用型的变量
- vrow emp%rowtype; --声明记录型变量
- begin
- --业务逻辑
- end;
- dbms_output.put_line()相当于java中 syso
- */
- declare
- i varchar2(10) := '张三';
- begin
- dbms_output.put_line(i);
- end;
- --查询7369的工资,并且打印出来
- declare
- vsal emp.sal%type;
- begin
- --将查询出的结果赋值给vsal
- select sal into vsal from emp where empno = 7369;
- dbms_output.put_line(vsal);
- end;
- --查询7369的员工信息,并且打印出来
- select * from emp where empno = 7369;
- declare
- vrow emp%rowtype;
- begin
- select * into vrow from emp where empno = 7369;
- dbms_output.put_line('姓名:'||vrow.ename || '工资'|| vrow.sal);
- end;
- /*
- PL条件判断
- if then
- elsif then
- else
- end if;
- */
- --根据不同年纪,输出相关内容
- declare
- age number := &aaa;
- begin
- if age < 18 then
- dbms_output.put_line('小屁孩');
- elsif age>=18 and age <=24 then
- dbms_output.put_line('年轻人');
- elsif age>24 and age < 40 then
- dbms_output.put_line('老司机');
- else
- dbms_output.put_line('老年人');
- end if;
- end;
- /*
- 循环操作
- while 循环
- while 条件 loop
- end loop;
- for循环
- for 变量 in [reverse] 起始值..结束值 loop
- end loop;
- loop循环
- loop
- exit when 条件
- end loop;
- */
- --输出1~10
- declare
- i number :=1;
- begin
- while i<=10 loop
- dbms_output.put_line(i);
- i := i+1;
- end loop;
- end;
- --输出1~10
- declare
- begin
- for i in reverse 1..10 loop
- dbms_output.put_line(i);
- end loop;
- end;
- --输出1~10
- declare
- i number :=1;
- begin
- loop
- exit when i>10;
- dbms_output.put_line(i);
- i := i+1;
- end loop;
- end;
- /*
- *
- ***
- *****
- ***
- *
- 输出 m
- x : [-m,m]
- y : [-m,m]
- 输出所有满足条件的 : abs(y)+abs(x) <=m
- m取值
- */
- --使用PLSQL输出菱形
- declare
- m number := 10;
- begin
- for x in -m..m loop
- for y in -m..m loop
- if abs(y) + abs(x) <= m then
- dbms_output.put('*');
- else
- dbms_output.put(' ');
- end if;
- end loop;
- dbms_output.new_line();
- end loop;
- end;
- --使用PLSQL输出三角形,只要是三个角
- declare
- m number := 10;
- begin
- for x in reverse -m..m loop
- for y in -m..m loop
- if abs(y) + abs(x) <= m and x>=0 then
- dbms_output.put('*');
- else
- dbms_output.put(' ');
- end if;
- end loop;
- dbms_output.new_line();
- end loop;
- end;
Oracle数据库DDL,DML,视图,PLSQL编程的更多相关文章
- Oracle数据库 —— DDL
时间:2016-10-5 14:55 逆风的方向更适合飞翔我不怕千万人阻挡只怕自己投降 --------------------------------------- 一.表的创建与管理1.表的基本操 ...
- 64位oracle数据库用32位plsql developer无法连接问题(无法载入oci.dll)
在64位操作系统下安装oracle数据库,新下载了64位数据库(假设是32位数据库安装在64位的操作系统上,无论是client还是server端.都不要去选择C:\Program Files (x86 ...
- oracle数据库表约束、视图、索引—该记录为本人以前微博的文章
一.Oracle 数据库常用操作续关于创建表时创建约束1.创建表的时候增加约束----约束是定义表中的数据应该遵循的规则或者满足的条件----约束是建立在列上的,让某一列或者某几列数据之间有约束--- ...
- oracle中DDL DML指什么?
DDL create table 创建表 alter table 修改表 drop table 删除表 truncate table 删除表中所有行 create index 创建索引 drop in ...
- Oracle数据库的一些视图
1.之前一直是SQL使用,没有深入学习数据库的底层知识,尤其使其进程以及锁以及底层的数据如何存储的这些知识. 2.渐渐的在开发中对数据库的要求慢慢高了 比如:临时表 -----BI里面,存储过程里面 ...
- Oracle数据库入门——物化视图日志结构
物化视图的快速刷新要求基本必须建立物化视图日志,这篇文章简单描述一下物化视图日志中各个字段的含义和用途. 物化视图日志的名称为MLOG$_后面跟基表的名称,如果表名的长度超过20位,则只取前20位,当 ...
- Oracle数据库入门——物化视图语法
一.Oracle物化视图语法 create materialized view [view_name]refresh [fast|complete|force][on [commit|demand] ...
- Oracle数据库——索引、视图、序列和同义词的创建
一.涉及内容 1.理解索引的概念和类型. 2.掌握创建索引的命令. 3.理解视图的概念和优点. 4.理解可更新视图应具备的特点. 5.掌握创建一般视图和可更新视图的命令. 6.理解序列和同义词的概念和 ...
- Oracle数据库对象_视图
视图是一种非常重要的数据库对象,它的形式类似于普通表,我们可以从视图中查询数据. 实际上它是建立在表上的一种虚表,在视图中并不存储真正的数据,而是仅仅保存一条SELECT语句,对视图的访问将被转化为对 ...
随机推荐
- 在传统的ADO.NET中使用事务
using (SqlConnection conn = new SqlConnection()) { SqlCommand cmd = conn.CreateCommand(); //启动事务 Sql ...
- 为什么JavaScript声明变量的时候鼓励加var关键字
在JavaScript中,var用来声明变量,但是这个语法并不严格要求,很多时修改,我们可以直接使用一个变量而不用var声明它. var x = "XX"; y ="xx ...
- Spring3.2 Contorller单元测试参数问题: java.lang.NoSuchMethodException
使用3.2做单元测试的时候发现这个问题,因为之前都是用3.0中的配置适配器使用AnnotationMethodHandlerAdapter,到3.2中升级为RequestMappingHandlerA ...
- mysql 允许远程登录
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;flush privileges;
- 内核:为了fan的健康,我的重新编译记录
email: jiqingwu@gmail.com date: 2008-02-13 关键词:ubuntu cpu cpufreqd cpufrequtils 编译 内核 装上ubuntu7.10后, ...
- python Linux flask uwsgi nginx 在centos7.3部署
0.直接上uwsgi和nginx安装命令 linux 安装uwsgi yum groupinstall "Development tools" yum install zlib-d ...
- F - Number of Connected Components UVALive - 7638 (并查集 + 思维)
题目链接:https://cn.vjudge.net/contest/275589#problem/F 题目大意:就是给你n个数,如果说两个数之间的gcd!=1,那么就将这两个点连起来,问你最终这些点 ...
- Sysmon + NXlog构建简单的windows安全监控
工具: Sysmon (sysmon 5.0) ,NXlog(nxlog-ce-2.9.1716.msi) . Sysmon监控系统并生成windows event log, NXlog将wind ...
- Python图片验证码降噪 — 8邻域降噪
简介 图片验证码识别的可以分为几个步骤,一般用 Pillow 库或 OpenCV 来实现,这几个过程是: 1.灰度处理&二值化 2.降噪 3.字符分割 4.标准化 5.识别 所谓降噪就是把不需 ...
- Nginx/LVS/HAProxy负载均衡软件的优缺点详解【转】
转自 (总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解http://www.ha97.com/5646.html PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均 ...