一篇文章让Oracle程序猿学会MySql【未完待续】

一篇文章让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的二进制运算。

        

时间: 2024-10-07 07:23:27

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

指数型基金购买技巧汇总(程序猿买基金必备——未完待续)

熊市,多数基金赔钱,很多人高点进低点出更赔. 牛市,基金赚钱,总有人高点进低点出赔钱,而贪大又对股市一点不懂却碰指数基金者,即使牛市未必赚钱,操作不当,赔钱更多. 股市行情好也要有计划,买基是短线还是中长线,短线顺势而为,调整时分批进仓,波段有赚高位就出,鱼尾多长都要留给他人,它疯不要眼红追进:中长线也要分批进仓,这与资金多少无关,别说10万8万的,即使一共1千元也要分批进!大低时例外,资金安全重中之重,暴富是天命.

Python核心编程(第二版) 第二章习题答案 未完待续

2-2.程序输出.阅读下面的Python脚本.#!/usr/bin/env python1 + 2 * 4(a)你认为这段脚本是用来做什么的?(b)你认为这段脚本会输出什么?(c)输入以上代码,并保存为脚本,然后运行它,它所做的与你的预期一样吗?为什么一样/不一样?(d)这段代码单独执行和在交互解释器中执行有何不同?试一下,然后写出结果.(e)如何改进这个脚本,以便它能和你想象的一样工作?答:(a)这段脚本是用来计算表达式的值(b)脚本会输出9(c)保存为脚本,运行后没有输出.和自己预期不一样.

干货篇:一篇文章让你——《深入解析MySQL索引原理 》

概述 最近一段时间重新深入研究了一遍MySQL的内容,今天主要分享分析MySQL索引原理,后续会输出一些关于MySQL方面的干货,希望各位小伙伴喜欢.一.什么是索引.为什么要建立索引? 关于索引的理解,个人更加喜欢将其比喻为字典里面的目录,根据字典来进行查询的速度远大于每一页逐个逐个字排查的速度. 索引主要用于快速找出在某个列中有特定值的行,倘若不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多.如果表中查询的列有一个索引,MySQL能够快

Oracle解析 xml 记录一下(未完待续)

Oracle解析 xml 记录一下. SQL> desc xmlparser; PROCEDURE FREEPARSER Argument Name                  Type                    In/Out Default? ------------------------------ ----------------------- ------ -------- P                              RECORD          

Oracle 常用sql场景应用(未完待续......)

--1.创建一张学生信息表stuinfo,字段包括学号.姓名.性别.年龄.入学日期 SQL>CREATE TABLE stuinfo (snochar(4),sname varchar2(10),sex int,age int,sdate date); Table created --2.创建stuinfo表主键约束 SQL>ALTER TABLE stuinfo ADD CONSTRAINT pk_stu PRIMARY KEY (SNO); Table altered Executed i

python 3.x 学习笔记18 (mysql 未完 )

1.数据库(Database)是按照数据结构来组织.存储和管理数据的仓库 2.RDBMS即关系数据库管理系统(Relational Database Management System)的特点: 1).数据以表格的形式出现 2).每行为各种记录名称 3).每列为记录名称所对应的数据域 4).许多的行和列组成一张表单 5).若干的表单组成database 3.RDBMS 术语 数据库:     数据库是一些关联表的集合..数据表:     表是数据的矩阵.在一个数据库中的表看起来像一个简单的电子表

python核心编程第二版 第二章练习题解答 未完待续

有人可能会想,连2-1和2-2这样的题目都回答,够无聊的啊.因为现在处于并长期处于成为大师的第一阶段------守的阶段 2-1 >>> a= '123' >>> a '123' >>> print (a) 123 a是字符串123,如果格式化输出有问题报如下错误: >>> print ('a is %d'% a) Traceback (most recent call last): File "<stdin>&

MySQL日志详解(未完待续)

前言 MySQL日志记录了MySQL数据库日常操作和错误信息.MySQL有不同类型的日志文件(各自存储了不同类型的日志),从日志当中可以查询到MySQL数据库的运行情况.用户的操作.错误的信息等. MySQL的日志分为以下四大类: 错误日志:记录mysql服务的启动,运行或停止mysql服务时出现的问题: 查询日志:记录建立的客户端的连接和执行的语句: 二进制日志:记录所有更改数据的语句,可以用于数据的复制: 慢查询日志:记录所有执行的时间超过long_query_time的所有查询或不使用索引

第二章-第二题(练习使用git的add/commit/push/pull/fetch/clone等基本命令)-By郭青云(未完待续)

题目描述: 每人自己建立一个HelloWorld项目,练习使用git的add/commit/push/pull/fetch/clone等基本命令.比较项目的新旧版本的差别. 使用步骤: 未完待续...... 参考文件:http://blog.csdn.net/u012575819/article/details/50553501