oracle nvl2 mysql_数据库Oracle和MySQL 的不同

实例区别:

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

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

MySQL安装只有300多兆,Oracle有3个G。

操作的区别

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

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

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

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

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

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

create database sxt default CHARACTER set utf8;

4c280cac094787757dc24494b7535d33.png

查看数据库:

show databases;

ff9b34d7613469ad6d173806925b4d6e.png

查看数据库编码:

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

400e8027fd77f12f37088af09789042c.png

删除数据库命令:

drop database sxt;

b4d00153a7e4b6b66c664839c0dd77bf.png

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

use bjsxt;

MySQL拥有的数值类型

d21b2b1acce6d96ec334f8b061553d9e.png

0e0c5f00b8804f8a962bc9965c04c475.png

MySQL拥有的字符串处理类型

c3398eec8f1b4e228f47e4719ae22f48.png

MySQL拥有的日期串处理类型

701d6509b40318eecb7f5bb0312097c0.png

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');

87ecc9b1f8a9d66c76f8e2e9d4690a54.png

修改表添加列的默认值:

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);

f301e86410022ea508362442cac6e638.png

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;

5e107e83f14e2c6b0a3725e802158265.png

例:删除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')

abb6b691594ab13de384afcfde7afc80.png

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

select TRIM(' dad sda ')

select LENGTH(TRIM(' dad sda '))

2fc113171811495c4f10848f8c2c9b54.png

cf7c6f09f07c42d68d3f3083c0bcd9a2.png

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

select LTRIM(' dad sda ')

select LENGTH(LTRIM(' dad sda '))

2d24a6a0d6640f763b2c694889525cc8.png

3c85f34e6fce10c25a0d3d75ec6ceb0d.png

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

select rTRIM(' dad sda ');

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

bc97c4600db685f5ab87b773ddf916e0.png

47ce77a0b4c85dcb866d75b5277dc008.png

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

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

select SYSDATE()

d04d78b2b77a2936c0dfbe14eff9d9db.png

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

SELECT CURDATE()

e147f663483a9095be8424b1f2b7f4cc.png

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

select DAYOFMONTH(SYSDATE())

4b2c317350f6c9ff321c74d0e5a156d2.png

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

select DAYOFYEAR(SYSDATE())

61c53fc0019951c2e1b99397b4e39b75.png

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

select DAYNAME(SYSDATE())

cd192b878bc247e5eb534941a799ffc0.png

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

select CURTIME()

dc2c651fa07007faa3e7041b845f3dc4.png

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

select DAYOFWEEK(SYSDATE())

2ae7b45b8b2f81912e8aae686d499343.png

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

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

f165b781c26bc6bea72d962f60de64a1.png

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

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

f5c83e1f79eedef258c54eaf44815541.png

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

select IFNULL(null,25)

fa51a02ebce2fb285cfc1bc088523724.png

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

select IF(1=2,3,4)

702d343f063fd8fa2eb5027644e39b7d.png

全外链接:

注意: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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值