一篇文章让Oracle DB学会MySql【未完待续】

随笔前言:

  本篇文章是针对已经能够熟练使用Oracle数据库的DB所写的快速学会MySql,为什么敢这么说,是因为本人认为Oracle在功能性方面和难度方面都比MySql要高一些,所以精通Oracle的DB在学习MySql的时候,没有必要从头到尾再去搞一遍,只需要掌握两者的用法区别即可。故本篇文章就针对Oracle和MySql的区别来把MySql的知识掌握住,在文章中,实例都是MySql环境下的实例,而Oracle可能知识一句话来概括,所以看本篇文章,一定要熟悉Oracle并有一定的经验哦。

  在本篇所有涉及的实例都是围绕scott用户/数据库的操作。

  当然了,如果你经验丰富,在看文章的时候发现哪些是不合理的或者错误的,一定要留下你的见解,我在此先感谢了,下面我们就开始学习之旅吧!

一.用户体验角度。

  从用户体验角度来说的话,其实MySql是稍微好一些的。

  1.MySql是可以自动的将系统关键字改为大写的,而Oracle不。

  2.MySql可以使用tab键将关键字自动补全,而Oralce虽然有提示,但是因为它的强大性的局限,它不可能就一个tab来补全,因为选项太多,所以Oracle没有自动补全的功能,而是可以通过提示去手选。

  3.MySql的注释可以使用"杠杠空格"和#来单行注释、/*..*/多行注释,Oracle多行注释和它一样,单行注释只有--。

  4.Oracle和MySql在代码角度上来说都是不区分大小写的,而在查看数据的时候确是区别的。就是MySql中的数据表示时保持你输入时的状态,而Oracle的数据表示时,都会把英文字母搞成大写的。

二.存储数据角度和创建存储单位角度。

  存储数据角度:

  • 从宏观上来看,Oracle在存储数据的时候,使用的是一个数据库下面有多个用户,用户下面有对象等等;而MySql是一个用户登录上之后,有多个数据库,每个数据库下面有各自的对象。
  • 从微观上讲,Oracle和MySql存储一系列数据使用的是表空间,有系统给的,临时的。每个表空间下还可以分区。

  创建存储单位角度:在这里就不说Oracle了,只说MySql。

  • 创建数据库。
CREATE DATABASE scott;
  • 查看当前所有存在的数据库,跟Oracle中的查看用户的概念一样。
SHOW DATABASES;
  • 查看数据库的定义。就是查看数据库创建时语句,默认的字符编码等。
SHOW CREATE DATABASE scott;
  • 删除数据库。
drop database scott;
  • 查看默认存储引擎。
SHOW VARIABLES LIKE 'storage_engine';

三.常用数据类型的不同。

  数据类型的差别还是挺大了,数值类型中没有Oracle的number,字符类型中没有Oracle的varchar2。其他常用的大致相同,MySql也有自己特有的数据类型。

          MySql中的整数类型数据类型

类型名称 存储大小 说明 有符号取值范围 无符号取值范围
TINYINT 1字节 极小整数 -128~127 0~255
SMALLINT 2字节 小整数 -32768~-32767 0~65535
MEDIUMINT 3字节 中等大小整数 -8388608~8388607 0~16777215
INT|INTEGER 4字节 普通整数 -2147483648--2147483647 0-4294967295
BIGINT 8字节 大整数 很大 很大

  

          MySql中的浮点数类型数据类型

类型名称 存储大小 说明 有符号取值范围 无符号取值范围
FLOAT 4字节 单精度 -3.4E+38~-1.17E-38 0和1.17E-38~3.4E+38
DOUBLE 8字节 双精度 -1.79E+308~-2.22E-308 0和2.22E-308~1.79+308
DECIMAL(M,D),DEC M+2字节 定点数 M表示总位数,D表示小数位数

          MySql中的日期与时间类型数据类型

类型名称 日期格式 日期范围 存储需求
YEAR YYYY 1901~2155 1字节
TIME HH:MM:SS -838:59:59~838:59:59 3字节
DATE YYY-MM-DD 1000-01-01~9999-12-3 3字节
DATETIME YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~9999-12-3 23:59:59 8字节
TIMESTAMP YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 UTC~2038-01-19 03:14:07 UTC 4字节

          MySql中的字符类型数据类型

类型名称 说明 存储需求
CHAR(M) 固定长度 M字节,1<=M<=255
VARCHAR(M) 变长 L+1字节,L<=M,1<=M<=255
TINYTEXT 极小的非二进制字符串 L+1字节,L<2^8
TEXT 小的非二进制字符串 L+1字节,L<2^16
MEDIUMTEXT 中等大小的非二进制字符串 L+1字节,L<2^24
LONGTEXT 大的非二进制字符串 L+1字节,L<2^32
ENUM 枚举类型,只能有一个枚举字符串值 1或者2字节,最大65535
SET 一个设置,字符串对象可以有0个或者多个SET成员  1,2,3,4,8个字节,取决于成员的数量,最多64个成员

  

  char与varchar的区别。char和varchar都为4个字节的话,那么不管数据多大,都占4个字节,而varchar会根据数据所占的字节数再加1.如果数据为‘abcde’,那么char和varchar的最终结果都为‘abcd’,char为4个字节,varchar为5个字节。

         MySql中的二进制数据类型

类型名称 说明 存储需求
BIT(M) 位字段类型 大约(M+7)/8个字节
BINARY(M) 固定长度 M个字节
VARBINARY(M) 可变长度 M+1个字节
TINYBLOB(M) 极小的BLOB L+1字节,L<2^8
BLOB(M) 小的BLOB L+1字节,L<2^16
MEDIUMBLOB(M) 中等BLOB L+1字节,L<2^24
LONGBLOB(M) 大的BLOB L+1字节,L<2^32

四.对象表的不同。

  • 创建表

    在创建表之前,MySql中要先选择在哪个database下来创建表,可以手动在工具栏那一行选,也可以在编辑框用use database_name来选择,而Oracle中打开的编辑器就是某个用户下的,所以不考虑这个问题。创建表的时候,MySql和Oracel中的语法和格式基本相同。

    在这里也把约束的区别总结一下。

    Oracle中的约束类型只多不少,MySql中的约束类型有主键,外键,非空,唯一,默认约束。基本的用法和格式都相同,在这里只说细节方面不同的两点:

      1.外键。Oracle中外键约束可以直接写在列名的后面如:id int not null references a(id),这样就可以起到外键的约束作用。MySql虽然也可以这样写,但是却没有外键约束的效果,而是必须在所有列的后面这样写:FOREIGN KEY(deptno) REFERENCES dept(deptno),这样才能起到外键的约束效果,如建表语句。

      2.唯一约束的不同。Oracle和MySql中都是说唯一约束的列可以有一个空值,但是在实际操作中,可能使软件的原因把,Oracle可以有多列空值,而MySql中一个空值也不能有。

    在这里也把MySql中scott的建表语句写下供大家操作:

-- 创建员工表
CREATE TABLE EMP(
EMPNO DECIMAL(4) PRIMARY KEY,
ENAME VARCHAR(10),
JOB VARCHAR(9),
MGR VARCHAR(10),
HIREDATE DATE,
SAL DECIMAL(7,2),
COMM DECIMAL(7,2),
DEPTNO DECIMAL(2) ,
FOREIGN KEY(deptno) REFERENCES dept(deptno)
);
-- 创建部门表
CREATE TABLE DEPT(
DEPTNO DECIMAL(2) PRIMARY KEY,
DNAME VARCHAR(14),
LOC VARCHAR(13)
);
-- 创建工资等级表
CREATE TABLE SALGRADE(
GRADE INT UNIQUE PRIMARY KEY,-- 等级`salgrade``salgrade``salgrade`
LOSAL INT, -- 等级中最低的薪水
HISAL INT -- 等级中最高的薪水
);

      3.check约束不同。MySql中也有check约束,但是没有数据检测效果,因此是无用的。

  • 修改表

    1.修改表名和修改列的数据类型的用法与Oracle相同。

    2.修改列名的用法不同,Oracle中是使用关键字COLUMN和RENAME,而MySQl只使用一个关键字CHANGE;并且MySql中修改列名时还要更改数据类型字段,如果不更改就设置为原先的就行了,语法如下:

      ALTER TABLE table_name CHANGE old_name new_name 新数据类型;

    3.添加列不同。Oracle在添加列的时候,可能没有添加到指定位置的语法,我找乐很多资料都没找到。但是MySql中可以。语法如下:

      ALTER TABLE table_name ADD new_column_name 数据类型 约束条件 [FIRST|AFTER exist_column_name]

    4.MySql中可以修改列在表中的位置。语法如下:

      ALTER TABLE talbe_name MODIFY column1_name 数据类型 FIRST|AFTER column2_name;

  • 删除表

    1.删除整个表。Oracle和MySql都是Drop Table table_name;不过MySql中可以使用IF EXISTS关键字,更高端一些。

    2.删除表中某行。Oracle中是 ALTER TABLE table_name DROP COLUMN column_name;而MySql中则不需要COLUMN关键字。

    3.删除表中的外键约束。

      Oracle中删除外键的时候,不管你直接写在列的后面还是写在最后,你都得通过关键字CONSTRAINT 加约束名来删除,如果你没有添加约束名的话,系统会给你一会外键约束的系统名,你需要通过user_constraints视图去查找到这个约束名,再删除。语法是 :

        ALTER TABLE table_name DROP CONSTRAINTS 约束名;

      MySql中的语法不同,它删除外键约束的时候是通过 FOREIGN KEY加外键约束名来删,如果你没有给外键起名字,那么可以通过SELECT * FROM table_constraints;来查到约束名再删除。

        ALTER TABLE table_name DROP FOREIGN KEY 外键约束名;

  • MySql中有关表的查询

    1.显示当前数据下的表。

SHOW TABLES;

    2 .查看表的结构信息。

DESCRIBE emp;

    3.查看表的创建信息。

SHOW CREATE TABLE emp;

    4.查询表的约束信息。

SELECT * FROM table_constraints;

五.DML语句的不同。

  • 插入insert

    1.单行插入数据时相同的。

    2.多行插入数据不同。MySql中可以很简单的插入多行数据,语法如:insert into table_name values(数值1..数值n),(数值1..数值n),..,(数值1..数值n);但是Oracle中稍微有点复杂,语法如下:

  insert into table_name select 数值1,数值2,...数值n from dual union select 数值1,数值2,...数值n from dual union....union select 数值1,数值2,...数值n from dual;

  • 删除delete

    删除的时候Oracle中可以delete table_name来删除,省略了from;但是MySql中必须加上from关键字。

  • 更改update

    更改数据时相同的。

    update table_name set column_name='what' 条件where;

  • 查询select

    查询有很大的不同,而且用到的运算符也挺多,我们先从运算符开始说吧,只说不一样的。

    1.算数运算符的差别。

      Oracle中没有求余运算符,只能调用系统函数MOD(x,y);MySql中可以通过运算符%来求余。

    2.关系运算符的差别。Oracle中有的MySql中基本上都有。MySql中还有其他的:

      LEAST       ——当有两个或者多个参数返回时,取最小的值。相当于Oracle的函数MIN(m);

      GREATEST——当有两个或者多个参数返回时,取最大的值。相当于Oracle的函数MAX(m);

      REGEXP    ——正则表达式匹配;

        '^':   匹配以该字符后面的字符开头的字符串

        '$':    匹配以该字符后面的字符开头的字符串

        '.':     匹配任意一个单字符

        '...':   匹配方括号的任意字符。范围用-来表示[0-9][a-z]

        '*':   匹配0个或多个在它前面的字符串。例如"[0-9]*"匹配任何数量的数字;".*"匹配任何数量的的任意字符。

        <=>    ——安全的等于:当两边的值都是NULL时,返回的是1不是NULL;当一边的值为NULL时,返回的是0而不是NULL;

    

    3.逻辑运算符的区别。

      ORACLE中有以下独特的。

        ANY:匹配任何一个

        ALL:匹配所有

      MySql中有以下独特的和独特的用法。Oracle中不可以select not 1 from dual,select 1 and 1 from dual;等等,但是MySql中却可以,而且MySql中还不用加 from dual;

        NOT|!:逻辑非

        AND|&&:逻辑与

        OR或者||:逻辑或

        XOR:逻辑异或

    4.位运算符。

      |  位或:二进制或运算

      &  位与:二进制与运算

      ^  位异或:不同为1,相同为0的二进制运算

      << 位左移:二进制数左移,左边丢弃,右边补0

      >> 位右移:二进制右移,右边丢弃,左边补0

      ~   位取反,反转所有比特:1取0,0取1的二进制运算。

        

一篇文章让Oracle程序猿学会MySql【未完待续】的更多相关文章

  1. 命令行操作mysql 未完待续......

    复制数据表 create table 新表 like 旧表: 删除表中某个字段 alter table 表名 drop column 字段; 例子: alter table news_apply_lo ...

  2. 【笔记】LR配置ODBC连接数据库进行参数化(mysql )未完待续

    很多时候我们需要大量的参数数据,但是光光靠手填写是非常麻烦的,既然被测对象的数据都在数据库,那么我们直接读取数据库回来就轻松简便很多. data  wizard 提供了一个从ODBC的连接获得数据转化 ...

  3. virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续)

    virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续) 第一次接触到 linux,不知道linux的确很强大,然后用virtualbox ...

  4. MySQL开发篇(未完待续)

    一.索引 什么是索引? 索引是帮助Mysql提高获取数据的数据结构,换一句话讲就是"排好序的快速查找的数据结构". 1.索引的分类 MySQL主要的几种索引类型:1.普通索引.2. ...

  5. 疯狂Java:突破程序员基本功的16课-李刚编著 学习笔记(未完待续)

    突破程序员基本功(16课) 数组 静态语言: 在编译的时候就能确定数据类型的语言,大多静态语言要求在使用变量之前必须声明数据类型(少数具有强推导能力的现代语言不用) 动态语言: 在程序运行时确定数据类 ...

  6. 一篇文章图文并茂地带你轻松学会 HTML5 storage

    html5 storage api localStorage 和 sessionStorage 是 html5 新增的用来存储数据的对象,他们让我们可以以键值对的形式存储信息. 为什么要有 stora ...

  7. 浅析Oracle PL/SQL 学习--未完待续

    这是一篇关于Oracle Pl/SQL数据库编程的课程学习分享... 首先说明几点: 学习这门课程之前,已经学过并且掌握一些基础的SQL语句.数据库结构分析.ER图设计等知识: 这里也只是较为大概地将 ...

  8. Oracle表操作 (未完待续)

    1. Oracle 中将一个表中数据导入到另外一个表的方法 insert into scd_data_201007 select * from analog_data_201007 ; 2. 纵表转换 ...

  9. oracle 统计语句 与常见函数的归纳(未完待续)

    一.统计语句 1. count count(*)与count(0)语句的区别: count(*)统计所有数量 count(0)统计第一列不为空的 2. 两个统计量的减法 select (select ...

随机推荐

  1. PHP语句【变量、运算符表达式、语句】

    一.变量的方法.1.empty可以用empty的方法能够判断变量的值是不是为空.①如果我们看一下某一个变量是不是已经存在过了假如我们输出一下 var_dump (empty($a)); 返回值为tru ...

  2. 2.oracle 12c 创建-访问-关闭-删除PDB

    1.创建PDB SQL> select name from v$datafile;   NAME ------------------------------------------------ ...

  3. iOS APP提交上架最新流程(转)

    时隔1年又让我鼓捣iOS,刚接手就是上架,经验值为0的我,虽然内心是拒绝的,但还是要接受这项任务滴!也就是在被拒后重新审核,再改在提交...这样 反复的过程中也对上架流程熟悉了好多,写篇帖子送给同为菜 ...

  4. css样式思维导图

  5. java 猜数字游戏

    作用:猜数字游戏.随机产生1个数字(1~10),大了.小了或者成功后给出提示. 语言:java 工具:eclipse 作者:潇洒鸿图 时间:2016.11.10 >>>>> ...

  6. 使用urllib2打开网页的三种方法

    #coding:utf-8 import urllib2 import cookielib url="http://www.baidu.com" print '方法 1' resp ...

  7. Daily Scrum Meeting ——FourthDay

    一.Daily Scrum Meeting照片 橙汁去北京参加 ICPC比赛了,差不多15号回来 二.Burndown Chart 终于不是一条直线了..

  8. Android实现自定义带文字和图片的Button

    Android实现自定义带文字和图片的Button 在Android开发中经常会需要用到带文字和图片的button,下面来讲解一下常用的实现办法. 一.用系统自带的Button实现 最简单的一种办法就 ...

  9. Windows远程连接CentOS桌面

    VNC (Virtual Network Console)是虚拟网络控制台的缩写.它 是一款优秀的远程控制工具软件.VNC的基本运行原理和一些Windows下的远程控制软件很相像 VNC基本上是由两部 ...

  10. C语言For循环详解--saying2

    c语言中的for循环语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句.for(表达式 1;表达式 2;表达式 3 ...