一篇文章让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【未完待续】的更多相关文章
-
命令行操作mysql 未完待续......
复制数据表 create table 新表 like 旧表: 删除表中某个字段 alter table 表名 drop column 字段; 例子: alter table news_apply_lo ...
-
【笔记】LR配置ODBC连接数据库进行参数化(mysql )未完待续
很多时候我们需要大量的参数数据,但是光光靠手填写是非常麻烦的,既然被测对象的数据都在数据库,那么我们直接读取数据库回来就轻松简便很多. data wizard 提供了一个从ODBC的连接获得数据转化 ...
-
virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续)
virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续) 第一次接触到 linux,不知道linux的确很强大,然后用virtualbox ...
-
MySQL开发篇(未完待续)
一.索引 什么是索引? 索引是帮助Mysql提高获取数据的数据结构,换一句话讲就是"排好序的快速查找的数据结构". 1.索引的分类 MySQL主要的几种索引类型:1.普通索引.2. ...
-
疯狂Java:突破程序员基本功的16课-李刚编著 学习笔记(未完待续)
突破程序员基本功(16课) 数组 静态语言: 在编译的时候就能确定数据类型的语言,大多静态语言要求在使用变量之前必须声明数据类型(少数具有强推导能力的现代语言不用) 动态语言: 在程序运行时确定数据类 ...
-
一篇文章图文并茂地带你轻松学会 HTML5 storage
html5 storage api localStorage 和 sessionStorage 是 html5 新增的用来存储数据的对象,他们让我们可以以键值对的形式存储信息. 为什么要有 stora ...
-
浅析Oracle PL/SQL 学习--未完待续
这是一篇关于Oracle Pl/SQL数据库编程的课程学习分享... 首先说明几点: 学习这门课程之前,已经学过并且掌握一些基础的SQL语句.数据库结构分析.ER图设计等知识: 这里也只是较为大概地将 ...
-
Oracle表操作 (未完待续)
1. Oracle 中将一个表中数据导入到另外一个表的方法 insert into scd_data_201007 select * from analog_data_201007 ; 2. 纵表转换 ...
-
oracle 统计语句 与常见函数的归纳(未完待续)
一.统计语句 1. count count(*)与count(0)语句的区别: count(*)统计所有数量 count(0)统计第一列不为空的 2. 两个统计量的减法 select (select ...
随机推荐
-
maven工程导入时解决Cannot change version of project facet Dynamic Web Module to 2.3
解决方法:修改web.xml,在头部加入内容,加入后为: <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&q ...
-
Java类的加载、链接和初始化
一.Java的类加载机制回顾与总结: 我们知道一个Java类要想运行,必须由jvm将其装载到内存中才能运行,装载的目的就是把Java字节代码转换成JVM中的java.lang.Class类的对象.这样 ...
-
IntelliJ IDEA的下载、安装和WordCount的初步使用(本地模式和集群模式)
包括: IntelliJ IDEA的下载 IntelliJ IDEA的安装 IntelliJ IDEA中的scala插件安装 用SBT方式来创建工程 或 选择Scala方式来创建工程 本地模式或集群 ...
-
ASP.NET(C#) GridView (编辑、删除、更新、取消)
转自:http://my.oschina.net/dldlhrmc/blog/93458 前台代码 view source print? 01 <%@ Page Language=" ...
-
Linux - 输入输出流程序 代码(C)
输入输出流程序 代码(C) 本文地址:http://blog.****.net/caroline_wendy 使用输入输出流,控制文件流. STDIN_FILENO,STDOUT_FILENO代表标准 ...
-
6最好的之一 HTML5/CSS3 演示(PPT)框架
HTML 是全世界最流行的网页编程语言.而HTML5是这门语言的升级版本号.越来越多的开发人员和设计师開始使用HTML5.以下介绍几个 HTML5/CSS3 的演示工具和框架,你能够用它们来创建你的网 ...
-
关于在官网上下载Eclipse遇到的问题!!
首先Eclipse是什么? Eclipse 是一个开放源代码的.基于Java的可扩展开发平台.就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境. 幸运的是,Eclipse 附带了一 ...
-
java运行环境增加字体
背景 今天在使用jfreeChart时,显示中文乱码,如下图: 环境:Ubuntu 13.04 64bit java7 tomcat 7.0.42 解决方法--增加系统字体 0. 安装环境包 su ...
-
c#调用GetModuleFileNameEx获取进程路径
原文最早发表于百度空间2009-09-04 [DllImport("Kernel32.dll", EntryPoint = "OpenProcess")]pub ...
-
用TexturePacker打图集用于UGUI中
UGUI的原理则是,让开发者彻底模糊图集的概念,让开发者不要去关心自己的图集.做界面的时候只用小图,而在最终打包的时候unity才会把你的小图和并在一张大的图集里面.Editor->Projec ...