实例区别:

MySQL是轻量型数据库,开源免费Oracle收费,这个不是重点,,重点是它贵。

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

MySQL安装只有300多兆Oracle3个G。

 

操作的区别

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

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

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

事务处理:MySQL 默认是自动提交,而 Oracle 默认不自动提交,需要用户 CTL 语言进行事务提交。

 

MySQL创建数据库(MySQL的表的创建都需要在有数据库的情况下

创建数据库以及设置数据库的编码:

create database sxt default CHARACTER set utf8;

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_MySQL中数据库和实例有什么区别

 

查看数据库:

show databases;

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_MySQL_02

查看数据库编码:

select SCHEMA_NAME,DEFAULT_CHARACTER_SET_NAME from information_schema.SCHEMATA where SCHEMA_NAME='sxt';

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_MySQL中数据库和实例有什么区别_03

 

删除数据库命令:

drop database sxt;

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_数据库Oracle和MySQL 的不同_04

 

创建表之前需要表示一下用哪个数据库  不然会报错的

use bjsxt;

 

MySQL拥有的数值类型

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_数据库Oracle和MySQL 的不同_05

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_默认值_06

 

MySQL拥有的字符串处理类型

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_MySQL中数据库和实例有什么区别_07

 

MySQL拥有的日期串处理类型

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_默认值_08

Oracle仅仅date表示日期和时间,MySQL的时间和日期是分开的

 

二进制数据(BLOB):

1)BLOB 和 TEXT 存储方式不同,TEXT 以文本方式存储,英文存储区分大小写,而 Blob是以二进制方式存储,不分大小写。

2)BLOB 存储的数据只能整体读出。3)TEXT 可以指定字符集,BLOB 不用指定字符集。

 

Oracle和MySQL的DDL(数据库定义语言)都是相差不太多。

由于MySQL是默认自动提交的,所以不需要去手动commit,但是它也可以设置成手动提交数据。

mysql> start transaction;

这样设置,就需要自己手动提交数据了。

 

Oracle和MySQL的DML(数据库操作语言)俩者几乎没什么差距。

Oracle和MySQL的DQL(数据库查询语言)俩者一样。

MySQL有主键是自动增长类型。所以在设置这个属性有所不同:

alter table emp modify employee_id int auto_increment;

如果要删除主键约束和唯一约束(都有自动增长类型)需要先删除自动增长类型:

alter table emp modify employee_id int;

在添加约束和删除约束俩者都还差不多,不同之处还是这个自动增长

 

 

在插入数据时如果有主键或者唯一约束是自动增长类型,需要用default或者null ,0去占位

insert into departments values(default,"development",2);

自动增长类型:每次增长1,和Oracle的序列效果是一样的,只不过Oracle的序列比它的功能更多。

 

MySQL 中的自动增长类型要求:

• 一个表中只能有一个列为自动增长。

• 自动增长的列的类型必须是整数类型。

• 自动增长只能添加到具备主键约束与唯一性约束的列上。

• 删除主键约束或唯一性约束,如果该列拥有自动增长能力,则需要先去掉自动增长然后在删除约束。

 

默认值处理:

在 MySQL 中可以使用 DEFAULT 为字段设定一个默认值。如果在插入数据时并未指定该列的值,那么 MySQL 会将默认值添加到该列中

 

例:创建 emp3 表,该表包含 emp_id 主键且自动增长,包含 name,包含 address 该列默认 值为”未知”。

create table emp3(emp_id int primary key auto_increment,name varchar(30), address varchar(50) default 'Unknown');

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_MySQL_09

 

修改表添加列的默认值:

alter table emp3 add column job_id int default 0;

插入数据时的默认值处理:

如果在插入数据时并未指定该列的值,那么 MySQL 会将默认值添加到该列中。如果是完全项插入需要使用 default 来占位。

例:向 emp3 表中添加数据,要求 address 列与 job_id 列使用默认值作为该列的值。

insert into emp3(name) values("admin"); insert into emp3 values(default,"oldlu",default,default);

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_MySQL_10

 

mysql update 的特点:

• 更新的表不能在 set 和 where 中用于子查询;

• update 后面可以做任意的查询

 

在删除表中的列数据,MySQL有俩种方法:delete和truncate

• truncate 是整体删除(速度较快), delete 是逐条删除(速度较慢);

• truncate 不写服务器 log,delete 写服务器 log,也就是 truncate 效率比 delete 高的原因;

• truncate 是会重置自增值,相当于自增列会被置为初始值,又重新从 1 开始记录,而不是接着原来的值。而 delete 删除以后,自增值仍然会继续累加。

 

例:删除 emp3 表中 emp_id 为 5 的雇员信息。

delete from emp3 where emp_id = 5;

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_MySQL_11

 

例:删除emp3表中的数据:

TRUNCATE table  emp2;

 

 

MySQL中SELECT 语句中的算术表达式:

+ :加法运算

- :减法运算

* :乘法运算

/ :除法运算,返回商

% :求余运算,返回余数

 

MySQL 中的连字符:

MySQL 中并不支持||作为连字符,需要使用 concat 函数。在参数数量上与 oracle 的 concat函数有区别。

 

例:查询雇员表中的所有数据,将所有数据连接到一起,每列值中通过#分割。

select concat(employees_id,'#',last_name,'#',email,"#",salary,"#",commission_pct) from employees;

 

排序和比较,以及约束,模糊查询,逻辑运算符MySQL和Oracle都是一样。

MySQL没有到目前为止没有检查约束!!

• %表示任意多个任意字符

• _表示一个任意字符

 

注意:MySQL的伪表dual可以省略

 

MySQL的字符处理函数(Oracle的字符串处理类型):

CONCAT(str1,str2,...) 将 str1、str2 等字符串连接起来

select CONCAT('sdda','sda','weqw')

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_MySQL中数据库和实例有什么区别_12

 

 

TRIM(str) 从 str 中删除开头和结尾的空格(不会处理字符串中间含有的空格)

select TRIM('  dad  sda  ')

select LENGTH(TRIM('  dad  sda  '))

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_MySQL中数据库和实例有什么区别_13

 

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_主键_14

 

 

LTRIM(str) 从 str 中删除左侧开头的空格

select LTRIM('  dad  sda  ')
select LENGTH(LTRIM('  dad  sda  '))

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_MySQL_15

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_MySQL中数据库和实例有什么区别_16

 

RTRIM(str) 从 str 中删除右侧结尾的空格

select rTRIM('  dad  sda  ');
select LENGTH(rTRIM('  dad  sda  '));

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_数据库Oracle和MySQL 的不同_17

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_数据库Oracle和MySQL 的不同_18

 

 

数字函数俩个都是一样的(Oracle的数值类型

MySQL日期函数(Oracle日期处理类型

SYSDATE() 或者 NOW() 返回当前系统时间,格式为 YYYY-MM-DD hh-mm-ss

select SYSDATE()

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_主键_19

 

CURDATE() 返回系统当前日期,不返回时间

SELECT CURDATE()

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_MySQL中数据库和实例有什么区别_20

 

DAYOFMONTH(date) 计算日期 d 是本月的第几天

select DAYOFMONTH(SYSDATE())

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_MySQL_21

 

DAYOFYEAR(date) 返回指定年份的天数

select DAYOFYEAR(SYSDATE())

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_数据库Oracle和MySQL 的不同_22

 

DAYNAME(date) 返回 date 日期是星期几

select DAYNAME(SYSDATE())

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_MySQL_23

 

CURTIME() 返回当前系统中的时间,不返回日期

select CURTIME()

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_默认值_24

 

DAYOFWEEK(date) 日期 d 今天是星期几,1 星期日,2 星期一,以此类推

select DAYOFWEEK(SYSDATE())

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_数据库Oracle和MySQL 的不同_25

 

MySQL转换函数(Oracle的字符转换函数):

DATE_FORMAT(date,format) 将日期转换成字符串(类似 oracle 中的 to_char())

select DATE_FORMAT(sysdate(),'%Y年%m月%d日');

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_默认值_26

 

STR_TO_DATE(str,format) 将字符串转换成日期(类似 oracle 中的 to_date())

select STR_TO_DATE('2019年8月1日','%Y年%m月%d日')

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_MySQL_27

 

 

MySQL通用函数(Oracle中的通用函数

IFNULL(expr1,expr2) 判断 expr1 是否为 null,如果为 null,则用 expr2 来代替 null (类似 oracle 的 NVL()函数)

select IFNULL(null,25)

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_MySQL中数据库和实例有什么区别_28

 

IF(expr1,expr2,expr3) 判断 expr1 是否为真(是否不为 null),如果为真,则使用 expr2 替代 expr1;如果为假,则使用 expr3 替代 expr1(类似 oracle 的 NVL2()函数)

select IF(1=2,3,4)

MySQL中数据库和实例有什么区别 mysql和oracle库和实例的区别_主键_29

 

全外链接:

注意:MySQL 中不支持 FULL OUTER JOIN 连接

可以使用 union 实现全完连接。

 

查询所有雇员的名字以及他们的部门名称,包含那些没有雇员的部门以及没有部门的雇员。

(select e.last_name,d.department_name from employees e LEFT OUTER JOIN departments
d on e.dept_id = d.department_id) UNION (select e1.last_name,d1.department_name from employees e1 RIGHT OUTER JOIN departments d1 on d1.department_id = e1.dept_id)