Oracle与MySQL总结

Oracle数据库与MySQL数据库总结


        数据库(DataBase)就是数据(Data)的集合,数据就是描述事物的符号,用户可以通过这个集合进行增、删、改、查等操作,且可共享,并与应用程序独立的数据集合

    常见名词:

        数据库管理系统(DBMS)

        数据库应用程序(DBAS)

        数据库管理员(DBA)

完整的数据库包括:1.数据库    2.数据库管理系统

表之间的关系

        一对多:处理数据冗余,把外键添加到多方,再引用关联到一方的主键

        一对一:特殊的一对多,外键可以在任意一方,只需把外键加上唯一约束

        多对多:可以看成两个一对多

Mysql与Oracle主要区别

    实例区别:

        MySQL是轻量级数据库,开源免费,Oracle是收费的而且价格非常高

        MySQL一个实例可以操作多个库,而Oracle一个实例只能对应一个库

        MySQL安装安后300M而Oracle有3G左右

    操作区别:

        主键:MySQL一般使用自动增长类型,而Oracle则需要使用序列对象

        单引号的处理:MySQL里可以用双引号包起字符串,Oracle里只可以用单引号包起字符串

        分页的SQL语句:MySQL用limit,而Oracle需要使用内建视图和rownum伪列

    事务处理:

        MySQL默认是自动提交,可以通过 start transaction语句来开始执行事务

Commit提交  rollback 回滚 来手工确认对事务的处理

MySQL关闭事务提交

        而Oracle默认不自动提交,需要用户TCL语言进行事务提交

        MySQL不支持检查约束


Oracle的数据类型

varchar2
整型
浮点类型
日期
二进制
long

MySQL中没有varchar2类型


SQL语言约束的作用

约束

Oracle中的约束类型

约束类型

MySQL中没有检查约束类型


SQL语言的分类

Oracle与MySQL中的增、删、改、查、基本语句都是相同的

    1.DQL(数据查询语言)select语句

        a.基本查询

        b.带条件的查询(精确查找,模糊查找,范围查找...)

        c.连接查询(等值连接,非等值连接,外连接:左外连接,右外连接,全外连接,自然连接,交叉

连接,内连接,自然连接...)

        d.排序:order by

        e.分组:group by

        f.函数(单行函数/多行函数/(又称为组函数..))

        g.子查询

    2.DML(数据操作语言)

        新增:insert语言

        修改:update语句

        删除:delete语句

    3.DDL语句(数据定义语言)

        创建:create语句

        修改:alter语句

        删除:drop语句

    4.TCL(数据事务控制语言)

        提交事务:commint语句

        回滚事务:rollback语句

    5.DCL(数据控制语言)

        授权:grant语句

        撤销:revoke语句

Oracle数据库默认端口号:1521,MySQL默认端口为:3306

    select选择语句:列选择;(投影操作)

    基本查询语句:

        seclect +列名1,列名2...  from +表名;

        改表名:select +旧表名 as +新表名,(可操作多个表) from +来自哪个表中;

        escape:转义字符,跟在like后面 'XX\_' escape '\';告诉查询语句,当前的'\'为转移字

        符,后面跟的为具体的字符,转移符号可以是任意的

        not:取反

        逻辑条件:and or not

        排序:order by 列名 [asc/desc]

        查哪些数据,来自哪个表

        行选择:(选择操作)

        连接:(多表操作)

        包含空值的算术表达式结算结果为空

什么是函数:

        函数是数据库中提供的能够处理查询结果的方法

函数的作用:

        1.执行数据结算

        2.修改单个数据项

        3.格式化显示日期和数字(本地语言环境)

        4.转换列数据类型

        5.函数有输入参数,并且总有一个返回值

单行函数:仅对单行做出运算,并且每行返回一个结果

单行函数包括

        字符函数:接收字符输入,可以返回字符或数字之

        数字函数:接收数字输入,返回数字值

        日期函数:输入日期,转换为字符串

转换函数:从一个数据类型到另一个数据类型转换一个值

通用函数:

        多行函数(聚合函数):可以操纵成组的行,每个行组给出一个结果,也被称为组函数

        转换函数:(数据类型的转换:包含隐式转换和强制转换)

    隐式转换(不推荐)

        select '1'+1 from dual

        select '1'||1 from dual

    强制转换:使用转换函数对类型进行强制转换

        to_char(num,format):num代表等待转换的数字,format:代表需要转换的格式

        -9:代表一位数字(占位符号)

        -0:代表一位数字,如果该位没有则强制显示0,小数点后面的也会强制显示

        -$:代表美元符号

        -L:代表本地货币符号

        -.:代表小数点

        -,:代表千分位符号

        to_char(date,format):将日期转换为字符串

        to_date(char,'fomat_model'):可以将字符串转换为日期类型

        to_number:将字符转换为数字

函数嵌套:

        单行函数能够被嵌套任意层次,嵌套函数的计算是从最里层到最外层

    NVL(exp1,exp2)函数:转换一个空值到一个实际的值

    exp1,exp2:可用的数据类型可以是日期、字符和数字,两个参数的数据类型必须匹配

    exp1:是包含控制的源值或者表达式

    exp2:是用于转换控制的目的值

    NVL2(exp1,exp2,exp3)函数:NVL函数检查第一个表达式,如果第一个表达式不为空,那么NVL2函数返回第二个表达式;如果第一个表达式为空,那么第三个表达式返回

    exp1:是可能包含空的源值或表达式

    exp2:当exp1非空时的返回值

    exp3:当exp1为空时的返回值

    多表连接查询:主要解决目标数据分布在不同的表中(如果目标数据不在同一张表,可以通过多表连接查询来解决)

        笛卡尔乘积(总记录数=A表的总记录*B表的总记录数),会出现大量的冗余数据........可以使用添加where子语句限制查询结果 从而避免笛卡尔乘积

        多表查询的语法: select 表名1,列名1,表名2,列名2 ...from 表名1,表名2...where子语句

        实现思路:先确定需要查询的列分布在哪些表中,再确定表之间的关联关系(主外键关联关系)

    多表查询包括等值查询和非等值查询

    一个用户查询请求涉及到多个表的时候,连接两个表的条件为=时,就是等值连接查询;其他的运算符连接的就是非等值查询。

        自连接:表自身连接自身(代表父子关系/递归关系)

        外连接:外连接是指查询出符合连接条件的数据同时还包含孤儿数据

        孤儿数据:孤儿数据是指被连接的列的值为空的数据

        左外(left [out] join):包含左表的孤儿数据(两种表分别是A表和B表相关联,使用左外连接查询以"左表为主",左边的表记录全部展现,右边的只展示与左边相关联的数据)

        右外(right [out] join):包含右表的孤儿数据(两种表分别是A表和B表相关联,使用右外连接查询以"右表为主",右边的表记录将全部展现,左边只展示与右边相关联的数据)

        全外(full [out] join):包含两个表中的孤儿数据(关联的两张表中的所有数据均会出现)

    内连接取交集,外连接分左和右,左连接左边的全取,右连接右边的全取

        内连接  inner join (join)

        交叉连接  cross join  笛卡尔积 效率低

        外连接  outer join  (left join ,right join ,full join)

        没有约束条件(没有where。。)时候,inner join 和 cross join 结果集一样

        组函数/统计函数/多行函数/聚合函数

        max(列名):求最大值

        min(列名):求最小值

        sum(列名):求和

        avg(列名):求平均值

        count(*):计算总数

        count(expr):返回在列中有expr指定的非控制的总数

        count(distinct expr):去重,在expr指定的列

        count(列名):会忽略空值,count(*):不忽略空值

        单行函数对查询到每个结果集做处理,而组函数只对分组数据做处理单行函数对每个结果集返回一个结果,而组函数对每个分组返回一个结果

        avg和sum函数参数类型只能是数字

        count/max/min参数类型可以是日期,字符和数字

        组函数会默认忽略控制,可以在组函数中使用nvl来处理空值

        group:查询分组的作用,显示每列不同组的数据

        group by 列名1,列名2...

        HAVING子语句:在分组函数中添加筛选条件

        where子语句不允许在分组函数作为条件直接使用

        子查询是一个select语句,他是嵌套在另一个select语句中的子句(把一个查询语句的结果当作条件查询)

        1.子查询语句必须用括号括起来(区分优先级)且在主查询之前执行一次

        2.若需要放在比较中,子查询放在比较条件的右边

        3.子查询的结果被用于主查询

        单行子查询:子查询语句只返回一行的查询(使用单行比较符)

        多行子查询:子查询语句返回多行的查询(使用多行比较符)

    新增语句:insert into 表名[列名1,列名2...] values(值1,值2..)

        修改语句:

        1.update 表名 set 列名1=值1,列名2=值2...where子句

        2.update 表明 set 列名 = (子查询语句) where子句

        删除语句:delete [from] 表名 where子句---->删除哪列或者表全删除

        事务:(不可分割的逻辑执行单元,要么全部成功,要么全部失败)指作为单个逻辑工作单元执行的一系列操作,要么完全的执行,要么完全的不执行,事务主要是对DML语言进行控制

    事务特性:

        1.原子性    2.一致性    3.隔离性    4.持久性

        事务提交:commit  事务的回滚: rollback

    创建表:create table

        视图是基于一个表或另一个视图的逻辑表,一个视图并不包含它自己的数据,像一个窗口,数据保存在"基"表

视图的优点

        1.限制数据的访问,选择显示"基表"中的列

        2.视图通过简单的查询返回复杂的结果

        3.视图针对特别的用户和应用程序提供数据独立性

    简单视图:数据来自一个表,不包含函数或数据分组,能通过视图执行DML操作

    复杂视图:数据来自多个表,包含函数或数据分组,不允许通过视图进行DML操作

    视图本身是一张逻辑表(虚拟表),可以进行DML操作

    创建视图 create view 视图名 as select语句

    只读视图: 添加 with read only

    也可以通过可视化操作创建视图

    删除视图:drop view 视图名

    内建视图

        内建视图由位于From子句中命名了别名的子查询创建(将一个查询语句的结果看作一张虚拟的表/视图,可以和其他表进行连接查询或执行子查询)

    TOP—N 查询:查询排名

    Rownum:伪列(行号):每个表都有默认的连续伪列值

Oracle分页查询的实现思路:在内建视图中通过rownum伪列的值来判断指定获取数据的数量

    分页单位:每页展示数据的条数    当前页:展示的第几页

Oracle分页语句规律(反人类的Oracle):

         select    t1.*    from (select    t.*,rownum    rn    from    表名    t    where    rowunum    <=    分页单位*当前页) t1    where    t1.rn    >=    (当前页-1)*分页单位    and    t1.rn    <=    分页单位*当前页序列

MySQL中的分页语句规律实现思路: 使用limit关键字实现分页

MySQL中分页

MySQL中没有序列

    Oracle数据库中序列是用户创建的数据库对象,序列会产生唯一的整数。序列的一个典型用途是创建一个主键的值,它对于每一行必须是唯一的

        创建语法:使用 create sequence 序列名,默认缓存为20

        特点1:默认没有值特点    2:序列名.nextval每执行自增1特点    3:序列名.currval查看当前序列的值

        作用:作为主键使用

        可以创建自定义序列且设置序列开始位置以及自增值

        create sequence aa  --创建序列    start with 5 --起始位置    increment by 2 --设置自增

        删除序列:drop sequence 序列名

        索引:类似于目录,作用:提升查询效率,但是对增/删/改效率有影响

        索引分类:唯一索引/非唯一索引

        唯一索引:当前在指定的裂伤添加了主键约束或唯一约束时,该列自动添加了唯一索引

        非唯一索引:单行索引,复合索引(组合索引),函数索引

    命名语法:create index 索引名 on 表名(列名)

        特点:显示的创建,隐式的执行    注意:oracle会自动给表的主键创建索引

删除索引:drop index 索引名

    三大范式

        第一范式:保证列的原子性(字段不能再分)

        第二范式:限制多对多(不存在局部依赖)

        第三范式:限制一对多(不含传递依赖)

        优点:结构合理,冗余较小,尽量避免插入删除修改异常    缺点:性能降低,多表查询比单表查询速度慢

        数据库的设计应该根据当前情况和需求做出灵活的处理

        特定表的设计可以违反第三范式,增加冗余提高性能

SQL语言执行顺序:select    ---> from    --->where    --->    group by    ---> having    ---> order by

你可能感兴趣的:(Oracle与MySQL总结)