动手敲~~~

  1. --创建一个表空间--beijing
  2. create tablespace beijing
  3. datafile 'c:\beijing.dbf'
  4. size 100m
  5. autoextend on
  6. next 10m;
  7. --删除表空间
  8. drop tablespace beijing;
  9.  
  10. /*
  11. 创建用户
  12.  
  13. */
  14. create user dashao
  15. identified by dashao
  16. default tablespace beijing;
  17.  
  18. /*
  19. 授权 grant 角色 | 权限 to 用户
  20. */
  21. grant connect to dashao;
  22.  
  23. --授予dba的角色
  24. grant dba to dashao;
  25.  
  26. /*
  27. 创建表
  28. create table 表名(
  29. 列名 列的类型 [列的约束],
  30. 列名 列的类型 [列的约束]
  31. );
  32. 列的类型:
  33. varchar ,在Oracle中,目前是支持的, 但是不保证以后还支持
  34.  
  35. varchar2(长度) 可变字符长度 varchar2(10) hello 占5个字符
  36. char(长度) 固定长度字符 char(10) hello 占10个字符,用空格填充
  37. number(总长度,小数长度) 数字类型 --小数长度不能大于等于总长度
  38.  
  39. date 年月日时分秒 2017/4/13 9:43:49
  40. timestamp 时间戳, 比date类型更加精确 13-APR-17 09.44.08.272000 AM +08:00
  41.  
  42. LONG/CLOB : 存放一本小说
  43. BLOB : 存放电影 java 存进去, 再读取出来
  44.  
  45. 使用子查询的方式创建表
  46.  
  47. create table 表名 as 查询语句;
  48.  
  49. 注意: 只会复制表结构和表中的数据,不会复制列的约束
  50. 如果查询语句有结果, 就是复制 表结构和数据
  51. 如果查询语句没有结果, 就是复制 表结构
  52. */
  53. select * from scott.emp;
  54.  
  55. create table test1(
  56. name1 varchar2(10),
  57. name2 char(10),
  58. age number(2,3)
  59. );
  60.  
  61. insert into test1(name1,name2) values('hello','hello');
  62.  
  63. select * from test1 where name1 like 'hello'; --可以查询数据
  64. select * from test1 where name2 like 'hello'; --查不出数据
  65.  
  66. insert into test1(age) values(2);
  67.  
  68. select current_date from dual;
  69.  
  70. select current_timestamp from dual;
  71.  
  72. -- create table 表名 as 查询语句; 复制表
  73. create table emp as select * from scott.emp;
  74.  
  75. select * from emp;
  76.  
  77. --如果查询语句是没有任何的结果
  78. select * from scott.emp where 1=2;
  79. create table emp1 as select * from scott.emp where 1=2;
  80. select * from emp1;
  81.  
  82. /*
  83. 修改表:
  84. 添加列
  85. 修改列
  86. 删除列
  87. 修改列名
  88. 重命名表
  89.  
  90. sql分类:
  91. DDL : 数据定义语言, 修改的结构 alter create drop truncate
  92. DML : 数据操纵语言 , 操作表中数据 insert update delete
  93. DCL : 数据控制语言 , grant
  94. DQL : select
  95. */
  96.  
  97. create table stu(
  98. stuid number,
  99. sname varchar2(10)
  100. );
  101.  
  102. alter table stu add phone varchar2(11);
  103.  
  104. alter table stu add (
  105. mobile varchar2(11),
  106. sex varchar2(2)
  107. );
  108. --修改列的类型
  109. alter table stu modify sex varchar2(4);
  110.  
  111. --修改列的名 sex --->gender
  112. alter table stu rename column sex to gender;
  113.  
  114. --删除列
  115. alter table stu drop column gender;
  116.  
  117. select * from stu;
  118.  
  119. --修改表名
  120. rename stu to Student;
  121. select * from student;
  122.  
  123. --删除表
  124. drop table Student;
  125.  
  126. /*
  127. 表的五大约束
  128. 列的约束:约束主要是用来约束表中的数据的规则
  129. 主键约束:primary key 不能为空,必须唯一
  130. 非空约束
  131. 唯一约束
  132. 检查约束 check(条件) 在mysql中是可以写的,但是mysql直接忽略了检查约束
  133.  
  134. 外键约束:
  135. 主要是用来约束从表a总的记录,必须是存在于主表b中
  136. */
  137. --男,女,人妖
  138. create table student(
  139. stuid number primary key,
  140. sname varchar2(10) unique,
  141. age varchar2(10) not null,
  142. gender varchar2(4) check( gender in ('男','女','人妖'))
  143. );
  144. --主键约束违反
  145. insert into student values(1,'张三','','男');
  146. insert into student values(1,'李四','','男');
  147. --唯一约束违反
  148. insert into student values(1,'徐立','','男');
  149. insert into student values(2,'徐立','','男');
  150. --非空约束
  151. insert into student values(1,'徐立',null,'男');
  152. --检查约束
  153. insert into student values(1,'徐立','','男');
  154. insert into student values(1,'徐立','','妖');
  155.  
  156. /*
  157. 商品分类,商品表
  158.  
  159. */
  160. --商品分类表
  161. create table category(
  162. cid number primary key,
  163. cname varchar2(20)
  164. );
  165.  
  166. --创建一个商品表
  167. create table product(
  168. pid number primary key,
  169. pname varchar2(20),
  170. cno number
  171. );
  172. insert into category values(1,'手机数码');
  173.  
  174. insert into product values(10,'锤子',11);
  175.  
  176. --添加外键约束
  177. alter table Product add foreign key(cno) references Category(cid);
  178.  
  179. delete from Product where pid=10;
  180. --1.首先主表中必须存在11号, 先往主表中插入数据,再往从表中插入数据
  181. insert into Category values(2,'电脑办公');
  182. insert into Product values(11,'外星人',2);
  183.  
  184. select * from Category;
  185. select * from Product;
  186.  
  187. --删除Category
  188. drop table Category;--被外键关联,无法删除
  189.  
  190. --强制删除(不建议),先删除外键关联的外键约束,在删除自己,
  191. drop table Category cascade constraint;
  192.  
  193. --级联删除
  194. ----添加外键约束,使用级联约束 ,在删除的时候,使用级联删除
  195. alter table product add foreign key(cno) references category(cid) on delete cascade;
  196.  
  197. insert into category values(2,'电脑办公');
  198. insert into product values(11,'外星人',2);
  199.  
  200. --级联删除 : 首先去从表中找有没有 关联数据, 如果在从表中找到关联数据,先删除从表中关联数据,然后再删除表中的数据
  201. delete from category where cid = 2;
  202.  
  203. select * from Category;
  204. select * from Product;
  205.  
  206. /*
  207. 插入数据:
  208. insert into 表名 values(所有列的值都要对应写上)
  209. insert into 表名(列1,列2) values(值1,值2);
  210.  
  211. 使用子查询插入数据
  212. insert into 表名 查询语句
  213. */
  214.  
  215. select * from emp1;
  216. select * from emp;
  217. --将emp10号部门的员工信息,插入到emp1
  218. insert into emp1 select * from emp where deptno=10 ;
  219.  
  220. /*
  221. 更新数据
  222. update 表名 set 列名 = 列的值 [where 条件]
  223. */
  224.  
  225. update emp1 set ename='HUAAN' where ename = 'KING';
  226.  
  227. select * from emp1;
  228. /*
  229. 删除数据:
  230. delete from 表名 [where 条件]
  231.  
  232. delete和truncate 区别
  233.  
  234. delete: truncate:
  235. DML DDL
  236. 逐条删除 先删除表再创建表
  237. 支持事务操作 不支持事务操作,
  238. 执行效率要高
  239. */
  240. /*
  241. 事务: 就是一系列的操作,要么都成功,要么都失败
  242. 四大特性: 原子性,隔离性,持久性,一致性
  243.  
  244. 如果不考虑隔离级别: 脏读,虚读,不可重复读
  245. MYSQL隔离级别: READ UNCOMMITTED , READ COMMITTED, REPEATABLE READ, SERIALIAZABLE
  246. ORACLE隔离级别: READ COMMITTED SERIALIZABLE READ ONLY
  247. 默认隔离级别: READ COMMITTED
  248.  
  249. 提交 : commit
  250. 事务的保存点/回滚点: savepoint 保存点的名称
  251. 回滚: rollback
  252. */
  253. create table louti(
  254. lou number primary key
  255. );
  256.  
  257. insert into louti values(1);
  258. insert into louti values(2);
  259. insert into louti values(3);
  260. insert into louti values(4);
  261. insert into louti values(5);
  262. savepoint dangban;
  263. insert into louti values(5); --主键约束会发生异常
  264. insert into louti values(6);
  265. rollback to dangban
  266. commit;
  267.  
  268. declare
  269.  
  270. begin
  271. insert into louti values(1);
  272. insert into louti values(2);
  273. insert into louti values(3);
  274. insert into louti values(4);
  275. insert into louti values(5);
  276. savepoint dangban;
  277. insert into louti values(5); --这行代码会发生异常
  278. insert into louti values(6);
  279. commit;
  280. exception --捕获异常
  281. when others then
  282. rollback to dangban;
  283. commit;
  284. end;
  285.  
  286. select * from louti;
  287.  
  288. /*
  289. 视图: 是对查询结果的一个封装
  290. 视图里面所有的数据,都是来自于它查询的那张表,视图本身不存储任何数据
  291. 1.能够封装复杂的查询结果
  292. 2.屏蔽表中的细节
  293. 语法:
  294. create [or replace] view 视图的名称 as 查询语句 [ with read only]
  295.  
  296. 注意: 通常不要通过视图去修改,视图创建的时候,通常要加上with read only
  297. */
  298.  
  299. select * from emp;
  300.  
  301. --创建一个视图
  302. create or replace view view_test1 as select ename,job,mgr from emp;
  303.  
  304. select * from view_test1;
  305.  
  306. --通过视图修改数据
  307. update view_test1 set ename = 'SMITH2' where ename='SMITH'
  308. select * from emp;
  309.  
  310. --创建一个只读视图
  311. create or replace view view_test2 as select ename,job,mgr from emp with read only;
  312. update view_test2 set ename='SMITH3' where ename = 'SMITH2';
  313.  
  314. /*
  315. 序列: 生成类似于 auto_increment 这种ID自动增长 1,2,3,4,5....
  316. auto_increment 这个是mysql
  317.  
  318. 语法:
  319. create sequence 序列的名称
  320. start with 从几开始
  321. increment by 每次增长多少
  322. maxvalue 最大值 | nomaxvalue
  323. minvalue 最小值 | nominvalue
  324. cycle | nocycle 是否循环 1,2,3,1,2,3
  325. cache 缓存的数量3 | nocache 1,2,3,4,5,6
  326.  
  327. 如何从序列获取值
  328. currval : 当前值
  329. nextval : 下一个值
  330.  
  331. 注意: currval 需要在调用nextval之后才能使用
  332.  
  333. 永不回头,往下取数据, 无论发生异常, 回滚
  334. */
  335. --创建一个 1,3,5,7,9......30
  336. create sequence seq_test1
  337. start with 1
  338. increment by 2
  339. maxvalue 20
  340. cycle
  341. cache 10;
  342.  
  343. select seq_test1.nextval from dual;
  344. select seq_test1.currval from dual;
  345.  
  346. /*
  347. 索引:相当于是一本书的目录,能够提高我们的查询效率
  348. 如果某一列,你经常用来作为查询条件,那么就有必要创建索引,数据量比较的情况
  349.  
  350. 语法:
  351. create index 索引的名称 on 表名(列)
  352.  
  353. 注意:主键约束自带主键索引, 唯一约束自带唯一索引
  354.  
  355. 索引原理: btree balance Tree 平衡二叉树
  356.  
  357. 如果某列作为查询条件的时候,可以提高查询效率,但是修改的时候,会变慢
  358.  
  359. 索引创建好之后,过了一段,DBA都会去做重构索引
  360.  
  361. SQL调优:
  362. 1.查看执行计划F5
  363. 2. 分析里面的cost 和 影响行数, 想办法降低
  364. */
  365.  
  366. /*
  367. DDL表空间操作
  368. 创建表空间
  369. 创建用户
  370. 授权
  371.  
  372. 创建表
  373. 子查询创建表
  374. 修改表 : 添加列,删除列,修改列,修改列名, 修改表名
  375.  
  376. 约束:
  377. 主键约束,唯一约束,非空约束,检查约束,外键约束
  378.  
  379. 外键约束:
  380. 强制删除
  381. 级联删除
  382.  
  383. DML表中数据:
  384. 插入数据
  385. 子查询插入数据
  386. 更新数据
  387. 删除数据: delete 和 truncate
  388.  
  389. 事务操作:
  390. savepoint 保存点
  391. rollback to 保存点
  392. ORACLE事务隔离级别 : READ COMMITTED
  393.  
  394. 视图: 就像窗户一样, 封装查询结果 , 通常视图创建只读视图
  395. 序列: 主要是用来实现ID自增长
  396. 索引: 相当于是书的目录,能够提高查询效率, 原理 平衡二叉树, 每隔一段时间DBA都需要去重建索引
  397. 同义词: create synonym 名称 for 对象的名称
  398.  
  399. */
  400.  
  401. /*
  402. PLSQL编程 : procedure Language 过程语言 Oracle对SQL的一个扩展
  403. 让我们能够像在java中一样写 if else else if 条件, 还可以编写循环逻辑 for while
  404.  
  405. declare
  406. --声明变量
  407. 变量名 变量类型;
  408. 变量名 变量类型 := 初始值;
  409. vsal emp.sal%type; --引用型的变量
  410. vrow emp%rowtype; --声明记录型变量
  411. begin
  412. --业务逻辑
  413. end;
  414.  
  415. dbms_output.put_line()相当于java中 syso
  416. */
  417. declare
  418. i varchar2(10) := '张三';
  419. begin
  420. dbms_output.put_line(i);
  421. end;
  422.  
  423. --查询7369的工资,并且打印出来
  424. declare
  425. vsal emp.sal%type;
  426. begin
  427. --将查询出的结果赋值给vsal
  428. select sal into vsal from emp where empno = 7369;
  429.  
  430. dbms_output.put_line(vsal);
  431. end;
  432.  
  433. --查询7369的员工信息,并且打印出来
  434. select * from emp where empno = 7369;
  435.  
  436. declare
  437. vrow emp%rowtype;
  438. begin
  439. select * into vrow from emp where empno = 7369;
  440.  
  441. dbms_output.put_line('姓名:'||vrow.ename || '工资'|| vrow.sal);
  442. end;
  443.  
  444. /*
  445. PL条件判断
  446.  
  447. if then
  448.  
  449. elsif then
  450.  
  451. else
  452.  
  453. end if;
  454. */
  455. --根据不同年纪,输出相关内容
  456. declare
  457. age number := &aaa;
  458. begin
  459. if age < 18 then
  460. dbms_output.put_line('小屁孩');
  461. elsif age>=18 and age <=24 then
  462. dbms_output.put_line('年轻人');
  463. elsif age>24 and age < 40 then
  464. dbms_output.put_line('老司机');
  465. else
  466. dbms_output.put_line('老年人');
  467. end if;
  468. end;
  469.  
  470. /*
  471. 循环操作
  472. while 循环
  473. while 条件 loop
  474.  
  475. end loop;
  476.  
  477. for循环
  478. for 变量 in [reverse] 起始值..结束值 loop
  479.  
  480. end loop;
  481.  
  482. loop循环
  483. loop
  484. exit when 条件
  485. end loop;
  486.  
  487. */
  488. --输出1~10
  489. declare
  490. i number :=1;
  491. begin
  492. while i<=10 loop
  493. dbms_output.put_line(i);
  494. i := i+1;
  495. end loop;
  496. end;
  497.  
  498. --输出1~10
  499. declare
  500.  
  501. begin
  502. for i in reverse 1..10 loop
  503. dbms_output.put_line(i);
  504. end loop;
  505. end;
  506.  
  507. --输出1~10
  508. declare
  509. i number :=1;
  510. begin
  511. loop
  512. exit when i>10;
  513. dbms_output.put_line(i);
  514. i := i+1;
  515. end loop;
  516. end;
  517.  
  518. /*
  519.  
  520. *
  521. ***
  522. *****
  523. ***
  524. *
  525. 输出 m
  526. x : [-m,m]
  527. y : [-m,m]
  528.  
  529. 输出所有满足条件的 : abs(y)+abs(x) <=m
  530.  
  531. m取值
  532. */
  533. --使用PLSQL输出菱形
  534. declare
  535. m number := 10;
  536. begin
  537. for x in -m..m loop
  538. for y in -m..m loop
  539. if abs(y) + abs(x) <= m then
  540. dbms_output.put('*');
  541. else
  542. dbms_output.put(' ');
  543. end if;
  544. end loop;
  545. dbms_output.new_line();
  546. end loop;
  547. end;
  548.  
  549. --使用PLSQL输出三角形,只要是三个角
  550. declare
  551. m number := 10;
  552. begin
  553. for x in reverse -m..m loop
  554. for y in -m..m loop
  555. if abs(y) + abs(x) <= m and x>=0 then
  556. dbms_output.put('*');
  557. else
  558. dbms_output.put(' ');
  559. end if;
  560. end loop;
  561. dbms_output.new_line();
  562. end loop;
  563. end;

Oracle数据库DDL,DML,视图,PLSQL编程的更多相关文章

  1. Oracle数据库 —— DDL

    时间:2016-10-5 14:55 逆风的方向更适合飞翔我不怕千万人阻挡只怕自己投降 --------------------------------------- 一.表的创建与管理1.表的基本操 ...

  2. 64位oracle数据库用32位plsql developer无法连接问题(无法载入oci.dll)

    在64位操作系统下安装oracle数据库,新下载了64位数据库(假设是32位数据库安装在64位的操作系统上,无论是client还是server端.都不要去选择C:\Program Files (x86 ...

  3. oracle数据库表约束、视图、索引—该记录为本人以前微博的文章

    一.Oracle 数据库常用操作续关于创建表时创建约束1.创建表的时候增加约束----约束是定义表中的数据应该遵循的规则或者满足的条件----约束是建立在列上的,让某一列或者某几列数据之间有约束--- ...

  4. oracle中DDL DML指什么?

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

  5. Oracle数据库的一些视图

    1.之前一直是SQL使用,没有深入学习数据库的底层知识,尤其使其进程以及锁以及底层的数据如何存储的这些知识. 2.渐渐的在开发中对数据库的要求慢慢高了 比如:临时表 -----BI里面,存储过程里面 ...

  6. Oracle数据库入门——物化视图日志结构

    物化视图的快速刷新要求基本必须建立物化视图日志,这篇文章简单描述一下物化视图日志中各个字段的含义和用途. 物化视图日志的名称为MLOG$_后面跟基表的名称,如果表名的长度超过20位,则只取前20位,当 ...

  7. Oracle数据库入门——物化视图语法

    一.Oracle物化视图语法 create materialized view [view_name]refresh [fast|complete|force][on [commit|demand] ...

  8. Oracle数据库——索引、视图、序列和同义词的创建

    一.涉及内容 1.理解索引的概念和类型. 2.掌握创建索引的命令. 3.理解视图的概念和优点. 4.理解可更新视图应具备的特点. 5.掌握创建一般视图和可更新视图的命令. 6.理解序列和同义词的概念和 ...

  9. Oracle数据库对象_视图

    视图是一种非常重要的数据库对象,它的形式类似于普通表,我们可以从视图中查询数据. 实际上它是建立在表上的一种虚表,在视图中并不存储真正的数据,而是仅仅保存一条SELECT语句,对视图的访问将被转化为对 ...

随机推荐

  1. 在传统的ADO.NET中使用事务

    using (SqlConnection conn = new SqlConnection()) { SqlCommand cmd = conn.CreateCommand(); //启动事务 Sql ...

  2. 为什么JavaScript声明变量的时候鼓励加var关键字

    在JavaScript中,var用来声明变量,但是这个语法并不严格要求,很多时修改,我们可以直接使用一个变量而不用var声明它. var x = "XX"; y ="xx ...

  3. Spring3.2 Contorller单元测试参数问题: java.lang.NoSuchMethodException

    使用3.2做单元测试的时候发现这个问题,因为之前都是用3.0中的配置适配器使用AnnotationMethodHandlerAdapter,到3.2中升级为RequestMappingHandlerA ...

  4. mysql 允许远程登录

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;flush privileges;

  5. 内核:为了fan的健康,我的重新编译记录

    email: jiqingwu@gmail.com date: 2008-02-13 关键词:ubuntu cpu cpufreqd cpufrequtils 编译 内核 装上ubuntu7.10后, ...

  6. python Linux flask uwsgi nginx 在centos7.3部署

    0.直接上uwsgi和nginx安装命令 linux 安装uwsgi yum groupinstall "Development tools" yum install zlib-d ...

  7. F - Number of Connected Components UVALive - 7638 (并查集 + 思维)

    题目链接:https://cn.vjudge.net/contest/275589#problem/F 题目大意:就是给你n个数,如果说两个数之间的gcd!=1,那么就将这两个点连起来,问你最终这些点 ...

  8. Sysmon + NXlog构建简单的windows安全监控

    工具: Sysmon (sysmon 5.0) ,NXlog(nxlog-ce-2.9.1716.msi) . Sysmon监控系统并生成windows event log,   NXlog将wind ...

  9. Python图片验证码降噪 — 8邻域降噪

    简介 图片验证码识别的可以分为几个步骤,一般用 Pillow 库或 OpenCV 来实现,这几个过程是: 1.灰度处理&二值化 2.降噪 3.字符分割 4.标准化 5.识别 所谓降噪就是把不需 ...

  10. Nginx/LVS/HAProxy负载均衡软件的优缺点详解【转】

    转自 (总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解http://www.ha97.com/5646.html PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均 ...