Oracle笔记

一、   Oracle的启动和登录:

   1、启动:通过启动Oracle的服务启动。

    OracleServiceORCL:核心服务,必须启动。

    OracleOraDb11g_home1TNSListener:监听服务,是否有客户端连接,启动后客户端程序(sqldeveloper.exe)才能连接上。

  2、 登录:

    1)  字符界面:使用Oracle提供的Sql Plus登录。Exit退出

    2)  图形界面:使用客户端程序(sqldeveloper.exe)登录。

二、   Oracle中权限和角色:

  1、  权限:系统权限、对象权限。(700余种权限)

    1)  系统权限:针对某项操作的权限,而不是针对某个或某些数据库对象的权限,如:CREATE SESSION(创建会话,登录权限)、CREATE TABLE

    2)  对象权限:针对某个或某些数据库的权限,如:针对某个数据的添加、删除、修改、查询。

  2、  角色:预定义角色、自定义角色

    权限太多不方便管理,可以将多种权限包装为一个角色,当给用户授权时,只需要授予某个角色就相当于授予这个角色下面的所有权限。

  3、  Oracle种常用的3个预定义角色:

    1)  CONNECT:

      CREATE SESSION(创建会话,登录权限)

    2)  RESOURCE:

      CREATE TRIGGER:创建触发器

      CREATE SEQUENCE:创建序列

      CREATE TYPE:创建类型

      CREATE PROCEDURE:创建存储过程

      CREATE CLUSTER:创建簇

      CREATE OPERATOR:创建操作符

      CREATE INDEXTYPE:创建索引类型

      CREATE TABLE:创建表

    3)  DBA:拥有所有的对象权限和大部分的系统权限,system用户默认拥有的就是DBA角色。

        注:权限放置在dba_sys_privs表中,查询该表可以看到权限和角色。

三、   管理用户:

/*三、    管理用户:
1. 创建表空间:
MySQL在一个实例中可以创建多个数据库,但Oracle在一个实例中就只有一个数据库(orcl),
为了将来为每个项目具体一个独立的存储容器,所有需要创建表空间,类似于MySQL中的数据库。 语法:
CREATE TABLESPACE <表空间名称>
DATAFILE ‘数据文件路径\数据文件名.dbf’
[SIZE <表空间初始容量>]
[AUTOEXTEND {OFF|ON} NEXT <每次扩展的容量> MAXSIZE {表空间最大值 
|UNLIMITED}]
说明:
1) 容量的单位:K M G
2) AUTOEXTEND设置为OFF表示不能自动扩展,ON表示能自动扩展,同时还可以设置每次增长多少的容量。
3) MAXSIZE设置最大值:具体的最大值。UNLIMITED:没有最大值
*/
-- 创建一个名为TS_USER39的表空间
CREATE TABLESPACE ts_user39
DATAFILE 'g:\oracle_data\tablespace\ts_user39.dbf'
SIZE 200M /*表空间初始容量*/
AUTOEXTEND ON NEXT 20M /*可以扩展,每次扩展20M*/
MAXSIZE UNLIMITED; /*没有最大值的限制*/

   2、  创建用户:user39

/*2.    创建用户:user39
语法:
CREATE USER <用户名称>
[IDENTIFIED BY <密码>]
[DEFAULT TABLESPACE <表空间名称>] 说明:
1) 密码不需要单引号,否则他认为密码包含单引号
2) 在创建用户时最好给每个用户指定一个默认的表空间
*/
-- 创建用户
CREATE USER user39
IDENTIFIED BY 123456
DEFAULT TABLESPACE ts_user39;

  3、  给用户授权:

/*3.    给用户授权:
语法:
GRANT {系统权限|角色权限}TO <用户名> 
[WITH ADMIN OPTION]
GRANT {对象权限列表} ON <数据库对象列表> TO 
<用户名> [WITH GRANT OPTION] 举例:
GRANT DBA TO user39 WITH ADMIN OPTION;
*/
GRANT DBA TO user39 WITH ADMIN OPTION;

   4、 回收用户权限:

-- 回收权限
REVOKE DBA FROM user39;

四、   创建序列:

/*四、    创建序列:
语法:
CREATE SEQUENCE <序列名称> 
[MINVALUE <最小值>] ――默认值为1
[START WITH <初始值>] ――默认值为1,若初始值小于默认值的1,就需要同时设置最小值
[INCREMENT BY <步长>] ――设置递增(正数)或递减的值,默认值为1
{MAXVALUE <最大值>|NOMAXVALUE} –设置最大值或没有最大值(默认)
*/
CREATE SEQUENCE seq_type
MINVALUE 0
START WITH 0
INCREMENT BY 10
MAXVALUE 99999; /*查看序列的值:当前值、下一列值;
dual时Oracle中的虚拟临时表,在查看变量、函数、序列等没有表名或视图时使用*/
SELECT seq_type.NEXTVAL FROM dual;
SELECT seq_type.CURRVAL FROM dual;

 

五、   创建数据表:

  1、  Oracle中的数据类型:

       1)  字符型:CHAR、VARCHAR2

    2)  数值型:NUMBER(既可以表示整数,也可以表示小数)、INT、FLOAT、DOUBLE。

    3)  日期时间:DATE、TIME、DATETIME、TIMESTEAMP       

  2、  创建数据表时Oracle与MySQL的不同点:

    1)  MySQL的默认主键生成策略使用自动增长(AUTO_INCREMENT),Oracle的默认主键生成策略使用序列,需要单独创建序列完成增长。

    2)  MySQL没有check约束(检查约束),但Oracle有检查性约束:

    约束区间值:student_score NUMBER(6,2) check (BETWEEN 0 AND 100)

    约束枚举值:sex CHAR(3) check('男','女')

    3)  MySQL可以在字段上直接使用comment关键字编写注释,但Oracle要使用comment语句来完成。
      给表添加注释:COMMENT ON TABLE <表名> IS '注释的内容'

      给表添加注释:COMMENT ON TABLE  tb_grade IS '年级表'

      给表字段添加注释:

      Comment ON COLUMN <表名.字段名> IS '注释内容'

      Comment ON COLUMN  tb_grade.grade_id IS '年级编号'

 

六、   插入记录:

    1、 在使用INSERT INTO 插入数据时,MySQL可以一次插入多条记录,而Oracle只能一行。

    2、 日期:使用“日—月-年”,如“20-8月-2018”,也可以使用转换函数来操作。

      将字符串转为日期:TO_DATE('2018-06-21','yyyy-mm-dd')    用于插入数据时

      将日期转化为字符串:TO_CHAR(HIREDATE,'yyyy-mm-dd')    用于查询数据时

    3、 MySQL默认采用自动提交模式,当执行完增、删、改语句后会自动完成提交,

      但Oracle默认采用手动提交,所以执行完增、删、改后还需要执行COMMIT语句才会提交。

七、   Oracle中的系统函数

  1. 与字符相关的函数:
  2. 与数值相关的函数:
  3. 与日期相关的函数:
  4. 转换函数:
  5. 其他函数
  6. 随机生成:字符串、小数、整数、日期、枚举值、范围值。
  7. 在Oracle中批量插入记录。
/*七、    Oracle中的系统函数*/

-- 1.    与字符相关的函数:
SELECT UPPER('javascript') FROM dual;
SELECT LOWER('javascript') FROM dual;
SELECT LENGTH('javascript') FROM dual;
SELECT LENGTH('中国') FROM dual;
SELECT INITCAP('java script') FROM dual; /*首字母大写*/
/*CONCAT()在Oracle中只能添加两个参数
Oracle中的字符连接使用通道符"||"完成连接多个字符,类似于Java中的"+"。
*/
SELECT CONCAT('aa','bb') FROM dual;
SELECT 'aa'||'bb'||'dd' FROM dual;
-- 字符串替换函数,将原始字符串中的a替换为A
SELECT REPLACE('javascript','a','A') FROM dual;
-- 字符串截取函数:原始字符串,截取索引(1开始),截取的长度
SELECT SUBSTR('javascript',5,6) FROM dual; -- 2. 与数值相关的函数:
SELECT ROUND(65.66944,2) FROM dual; /*四舍五入,截取两位小数*/
SELECT TRUNC(65.66944,2) FROM dual; /*截断函数,截取两位小数*/
SELECT CEIL(65.66944) FROM dual; /*向上取整,多用于分页*/
SELECT MOD(15,6) FROM dual; /*取模*/ -- 3. 与日期相关的函数:
SELECT TO_CHAR(sysdate, 'YYYY-mm-dd') FROM dual; /*获取当前系统日期*/
SELECT TO_CHAR(sysdate, 'YYYY-mm-dd'),add_months(sysdate,3) FROM dual; /*月份递增(向将来推)3个月或递减函数(负数向过去推)*/
SELECT TO_CHAR(last_day(sysdate), 'YYYY-mm-dd') FROM dual;/*获取指定日期所在的最后一天*/
SELECT MONTHS_BETWEEN(TO_DATE('02-02-1995','MM-DD-YYYY'),TO_DATE('01-01-1995','MM-DD-YYYY') ) FROM dual;/*获取两个日期的月份差*/
SELECT MONTHS_BETWEEN(sysdate,BIRTHDAY) from tb_student; -- 4. 转换函数:
-- 日期转字符串
SELECT TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss') FROM dual; /*获取当前日期的时间(到秒)转换为字符串,如果用于订单号去掉中间的连接符*/
-- 指定日期和Oracle基准日之间的差值
SELECT TO_CHAR(sysdate,'J') FROM dual; /*朱利安日期公元前4713年1月1日0:0:0。返回的是天数差值*/
-- 字符串转换为日期
SELECT TO_DATE('2019-11-13','yyyy-mm-dd hh24:mi:ss') FROM dual; /*只显示到天*/
-- 获取指定与基准日之间天数差对应的日期
SELECT TO_DATE(2458801,'J') FROM dual; -- 5. 判断函数
SELECT sal,comm,(sal + comm) * 12 年薪 FROM scott.emp; /*第二个参数为空时,整体为空*/
/*NVL(paraml1,paraml2):
若paraml1不为空时取paraml1的值;
如果paraml1为空,取paraml2的值*/ SELECT sal,comm,(sal + NVL(comm,0)) * 12 年薪 FROM scott.emp;
/*NVL2(paraml1,paraml2,paraml3):
若paraml1不为空时取paraml2的值;
如果paraml1为空,取paraml3的值*/
/*相当于三元运算*/
SELECT sal,comm,(sal + NVL2(comm,comm,0)) * 12 年薪 FROM scott.emp; /*DECODE(value,if,if的值,else if,else if的值,...,else的值),当value与哪个判断条件相等就取他的值。相当于switch case*/
SELECt grade_id,DECODE(grade_id,'','一年级','','二年级','不知道') FROM TB_STUDENT; -- 6. 随机生成:字符串、小数、整数、日期、枚举值、范围值。
SELECT dbms_random.string('',20) FROM dual; /*大写字母,长度20*/
SELECT dbms_random.string('U',20) FROM dual; /*大写字母,长度*/ SELECT dbms_random.string('L',20) FROM dual; /*小写字母,长度*/
SELECT dbms_random.string('A',20) FROM dual; /*大小写字母混合,长度*/
SELECT dbms_random.string('X',20) FROM dual; /*大写字母和数字,长度*/
SELECT dbms_random.string('P',20) FROM dual; /*所有可打印的字符串,长度*/
-- 7.    在Oracle中批量插入记录。
/*批量插入记录:字段值采用随机生成
以tb_student为例,完成批量插入记录
*/
CREATE OR REPLACE PROCEDURE proc_batchinsertstudent(recordNums IN NUMBER)
AS
BEGIN
  DECLARE
    nos NUMBER(10) := 11;
    mobile CHAR(11);
  BEGIN
    FOR nums IN 1..recordNums
    LOOP
      mobile := '' || substr(dbms_random.value(),3,10);
      INSERT INTO TB_STUDENT VALUES(
        's' || nos, /*STUDENT_NO*/
        dbms_random.string('A',6), /*LOGIN_PWD*/
        sys_guid(), /*STUDENT_NAME*/
        substr('男女',CEIL(dbms_random.value(0,2)),1), /*SEX*/
        CEIL(dbms_random.value(0,5)), /*GRADE_ID*/
        mobile , /*PHONE*/
        substr('批量插入记录字段值这里面的值采用随机截取',CEIL(dbms_random.value(1,84)),ROUND(dbms_random.value(5,10))), /*ADDRESS*/
        to_date(to_char(to_date('1990-01-01','yyyy-mm-dd'),'J') + TRUNC(dbms_random.value(0,366)),'J'), /*日期*/
        mobile || '@qq.com' /*电子邮箱*/
      );
      nos := nos + 1;
    END LOOP;
  END;
END; -- 调用
EXECUTE proc_batchinsertstudent(1000); select * from tb_student ORDER BY STUDENT_NO; DELETE FROM tb_student where STUDENT_NO > 's10';

   八、Oracle中常用的管理语句

1. 查看实例名称:
2. 查看数据库名称:
3. 查看数据文件、控制文件、日志文件
4. 接触Oracle默认180需要修改密码的规定
5. 解除用户的锁定
6. 修改用户的密码

*/
select * from v$instance;
select * from v$database;
select * from dba_data_files;
select * from v$controlfile;
select * from v$logfile; -- 修改密码生存时间为无限制(永久不过期)
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
-- 解除用户贴锁定(当用户被锁定,可用别的用户进行更改)
ALTER USER user39 ACCOUNT UNLOCK;
-- 修改用户密码
ALTER USER user39 IDENTIFIED BY 654321;

九、 索引的创建、查看、删除

Oracle中有两类索引,唯一索引(unique)、位图索引(bitmap),
当字段的值时有限的某几个值时,比较适合创建位图索引,它是采用二进制进行存储,查询时效率非常高。

/*九、    索引的创建、查看、删除
Oracle中有两类索引,唯一索引(unique)、位图索引(bitmap),
当字段的值时有限的某几个值时,比较适合创建位图索引,它是采用二进制进行存储,查询时效率非常高。
*/
-- 给student_name 添加唯一索引,
CREATE UNIQUE INDEX idx_studentname_u ON tb_student (student_name); -- 给sex添加位图索引
CREATE BITMAP INDEX idx_sex_b ON tb_student (sex); -- 查看索引:user_indexes表
select * from user_indexes;
-- 删除索引
DROP INDEX idx_sex_b;

十、 创建同义词

/*十、    创建同义词
语法:
CREATE [PUBLIC] SYNONYM <同义词> FOR <数据库对象名>
说明:若没有添加public表示创建的同义词使用范围为当前用户,
反之就是所有用户
举例:
*/
select * from emp;
CREATE PUBLIC SYNONYM emp FOR SCOTT.emp;
-- 查看同义词All_SYNONYMS,私有的条件指定为大写用户名,公共的用public,
select * from All_SYNONYMS where owner = 'PUBLIC' and TABLE_OWNER = 'SCOTT';
-- 删除同义词,若同义词是公共的需要添加public
drop public synonym emp;

Oracle数据库与MySQL的不同点的更多相关文章

  1. Oracle数据库和MySQL数据库的不同之处

    1.体积不同. Oracle它体积比较庞大,一般是用来开发大型应用(例如分布式)的.而MySQL的体积相对来说比较小,较之Oracle更容易安装.维护以及管理,操作也简单,最重要的是它是三个中唯一一个 ...

  2. 使用oracle数据库和MySQL数据库时hibernate的映射文件.hbm.xml的不同

    假设是使用oracle数据库.那么hibernate的映射文件.hbm.xml例如以下: <id name="xuehao" column="xuehao" ...

  3. 懒要懒到底,能自动的就不要手动,Hibernate正向工程完成Oracle数据库到MySql数据库转换(含字段转换、注释)

    需求描述 需求是这样的:因为我们目前的一个老项目是Oracle数据库的,这个库呢,数据库是没有注释的,而且字段名和表名都是大写风格,比如 在代码层面的po呢,以前也是没有任何注释的,但是经过这些年,大 ...

  4. oracle数据库兼容mysql的差异写法

    1.sysdate改为sysdate(),或者now(); 2.nvl(expr1,expr2) 改为IFNULL(expr1,expr2) nvl2(expr1,expr2,expr3)改为 IF( ...

  5. MYSQL数据库迁移到ORACLE数据库

    一.环境和需求1.环境 MySQL数据库服务器: OS version:Linux 5.3 for 64 bit mysql Server version: 5.0.45 Oracle数据库服务器: ...

  6. Oracle数据库安装完成之后的启动操作

    由于是菜鸟,在 完成Oracle数据库的安装之后,不知道该怎么启动.在经过一番折腾之后明白了其中的一些道理,总结如下: 其实Oracle数据库和Mysql数据库的启动都是相同的原理. Mysql数据库 ...

  7. 详解大数据采集引擎之Sqoop&采集oracle数据库中的数据

    一.Sqoop的简介: Sqoop是一个数据采集引擎/数据交换引擎,采集关系型数据库(RDBMS)中的数据,主要用于在RDBMS与HDFS/Hive/HBase之间进行数据传递,可以通过sqoop i ...

  8. python操作数据库(Mysql)

    原文地址:https://www.cnblogs.com/R-bear/p/7022231.html python DB-API介绍 1.python标准数据库接口为 python DB-API,py ...

  9. ThinkPHP连接Oracle数据库的详细教程

    一. 操作环境搭建 系统:Windows7 旗舰版 64位PHP环境:wampserver2.2e-php5.4.3-httpd2.2.22-mysql5.5.24 32位版ThinkPHP:3.0正 ...

随机推荐

  1. python-函数-动态传参,作用域的问题,函数嵌套,global nonlocal

    ⼀. 函数参数--动态传参 之前我们说过了传参, 如果我们需要给⼀个函数传参, ⽽参数⼜是不确定的. 或者我给⼀个 函数传很多参数, 我的形参就要写很多, 很⿇烦, 怎么办呢. 我们可以考虑使⽤动态参 ...

  2. linux nohup python 后台运行无输出问题

    参考:https://blog.csdn.net/zj360202/article/details/78894512 nohup python test.py & nohup python t ...

  3. css3属性 -webkit-filter

    css3属性 -webkit-filter -webkit-filter是css3的一个属性,Webkit率先支持了这几个功能,感觉效果很不错.下面咱们就学习一下filter这个属性吧. 现在规范中支 ...

  4. GetWindowsDirectoryA and GetSystemDirectory

    #include <iostream> #include <Windows.h> using std::cout; using std::endl; // 获取Windows文 ...

  5. spring boot 四大组件之Auto Configuration

    SpringBoot 自动配置主要通过 @EnableAutoConfiguration, @Conditional, @EnableConfigurationProperties 或者 @Confi ...

  6. foreach循环的跳出

    由于foreach循环中不像for循环可以直接通过return或break来终止当前循环,不过这里可以借助try...catch...来完成var arr = [1,2,3,4,5,6,7,8,9,1 ...

  7. PHP FILTER_VALIDATE_REGEXP 过滤器

    定义和用法 FILTER_VALIDATE_REGEXP 过滤器根据兼容 Perl 的正则表达式来验证值. Name: "validate_regexp" ID-number: 2 ...

  8. onethink中的用户登录session签名

    用户登录签名问题,即防止伪造登录session,增加一个用户登录数组的加密签名 onethink的登录控制,先调用UC表中(UC表也是存储在网站或本地的数据库中的),确认登录信息.如果UC表登录成功, ...

  9. 最常用的C++序列化方案:protobuf

    参考链接:最常用的两种C++序列化方案的使用心得(protobuf和boost serialization) [c++] Google Protobuf库1. 什么是序列化?程序员在编写应用程序的时候 ...

  10. BZOJ 1927: [Sdoi2010]星际竞速(费用流)

    传送门 解题思路 仿照最小路径覆盖问题,用费用流解决此题.最小路径覆盖问题是拆点连边后用\(n-\)最大匹配,这里的话也是将每个点拆点,源点向入点连流量为\(1\),费用为\(0\)的边,向出点连流量 ...