| 
                        副标题[/!--empirenews.page--]
                         
        
            
  1数据库
  /* ? mysql可以创建数据库,而oracle没有这个操作,oracle只能创建实例; ? sql数据库操作:database ? 格式: ? ? * create database 数据库名; ? ? * create database 数据库名 character set 字符集; */ CREATE DATABASE j0815_1;? CREATE DATABASE j0815_2 CHARACTER SET utf8; -查看数据库 SHOW DATABASES; -查看定义的数据库 SHOW CREATE DATABASE j0815_1; -删除数据库 DROP DATABASE j0815_1; -切换数据库 USE j0815_1; -查看正在使用的数据库: SELECT database();
 
  2 表
 
  2.1 创建表(异)
 
  /* ? mysql: ? ? 1、mysql没有number、varchar2()类型; ? ? 2、mysql可以声明自增长:auto_increment; ? ? 3、mysql有double类型; ? oracle: ? ? 1、oracle没有double类型、有int类型但多数会用number来代替int; ? ? 2、oracle不可以声明自增长:auto_increment,主键自带自增长; ? ? 3、oracle小数只有float类型; */
 
  --MySQL: create TABLE emp( ? eno INT PRIMARY KEY AUTO_INCREMENT, ? ename VARCHAR(20) NOT NULL UNIQUE, ? job VARCHAR(10) DEFAULT ‘员工‘, ? mgr INT(10), ? hiredate ?DATE, ? comm DOUBLE? );
 
  --Oracle: create table emp( ? empno number(10) primary key,--主键 ? ename varchar2(20) not null unique,--不能为空,唯一 ? job varchar2(10) default ‘匿名‘,--默认值,用单引号 ? mgr number(10), ? hiredate date,--默认格式DD-MM-YY ? sal number(10,2), ? comm float, ? deptno number(10) );
 
  ??
 
  2.2 删除表(异) /* ? ?MySQL: ? ? DROP TABLE IF EXISTS 表名; ? ? 或drop table if exists 表名;
 
  ? ?Oracle:
 
  ? ? drop table 表名;
 
  ? ?注:Oracle没有if exists关键字,也没用类似if exists的SQL语法。 */
 
  --MySQL:
 
  DROP TABLE IF EXISTS emp;
 
  drop table if exists emp;
 
  ?
 
  --Oracle:
 
  drop table emp
 
 
 
  3 列
 
  3.1 添加列(异) /* ? MySQL:
 
  ? ? A. alter table 表名 add column 字段 数据类型;
 
  ? ? B. alter table 表名 add column 字段1 数据类型,add column 字段2 数据类型;
 
  ? ? 注:其中关键字column可有可无。
 
 
 
  ? Oracle:
 
  ? ? A. alter table 表名 add 字段 数据类型;
 
  ? ? B. alter table 表名 add (字段 数据类型);
 
  ? ? C. alter table 表名 add (字段1 数据类型,字段2 数据类型);?
 
  ? ? 注:对于A,只有添加单列的时候才可使用,对于添加多列时需要使用C,不能像MySQL那样重复使用add column关键字。 */ --MySQL: ALTER TABLE emp ADD COLUMN marriage VARCHAR(2);? ALTER TABLE emp ADD marriagedate DATE;? ALTER TABLE emp ADD COLUMN lovename VARCHAR(50),ADD COLUMN loveage INT;
 
  --Oracle: alter table emp add marriage varchar2(2); alter table emp add (marriagedate DATE); alter table emp add (lovename varchar2(50),loveage INT);
 
  desc emp;
 
  3.2 删除列(异) /* ? MySQL:
 
  ? ? A. alter table 表名 drop column 字段;
 
  ? ? B. alter table 表名 drop column 字段,drop column 字段;
 
  ? ? 注:其中关键字column可有可无。
 
  ? ?
 
  ? Oracle:
 
  ? ? A. alter table 表名 drop column 字段;
 
  ? ? B. alter table 表名 drop (字段);
 
  ? ? C. alter table 表名 drop (字段1,字段2);
 
  ? ? 注:对于A,只有删除单列的时候才可使用,对于删除多列时需要使用C,不能像MySQL那样重复使用drop column关键字。 */ --MySQL: ALTER TABLE emp DROP COLUMN marriage; ALTER TABLE emp DROP COLUMN marriagedate,DROP COLUMN lovename,DROP COLUMN loveage;
 
  --Oracle: alter table emp drop column marriage; alter table emp drop (marriagedate); alter table emp drop (lovename,loveage);
 
  3.3 修改列名(异) /* ? MySQL:
 
  ? ? alter table 表名 change column 原来字段 新的字段 字段类型(必须);
 
 
 
  ? Oracle:
 
  ? ? alter table 表名 rename column 原来字段 to 新的字段; ?注:不能有字段类型 ? ?? ? ?? ? ? 修改字段类型:alter table 表名 modify(字段 数据类型 约束条件); */
 
  --MySQL: ALTER TABLE emp CHANGE COLUMN mgr manager VARCHAR(20);
 
  --Oracle: alter table emp rename column mgr to manager;
 
 
 
  3.4 修改列类型(说明) /* ? Oracle中,在列有数据的时候,无法修改列类型;没有数据时可以。 ? ? ? alter table 表名 modify(字段 数据类型 约束条件);
 
  ? MySQL中,无论列是否有数据都可以修改列类型。 ? ? ? alter table 表名 modify column 字段名 类型;
 
  ? 但是当有数据时,直接修改列类型都可能对数据造成丢失等,所以一般需要结合具体的业务来对列数据做处理后,再修改列类型类型。所以修改列的类型并非使用SQL语句进行一步到位的修改,而是通过以下流程:
 
  ? ? A. 添加临时列
 
  ? ? B. 将需要更改的列的值经过类型转换的验证后,赋值给临时列
 
  ? ? C. 删除原有列
 
  ? ? D. 将临时列的列名修改为原有列列名 */
 
  --MySQL: ALTER TABLE emp MODIFY COLUMN manager VARCHAR(20);
 
  --Oracle: alter table emp modify(manager varchar2(20));
 
 
 
  4 索引
 
  /*
 
  在整个数据库内,MySQL的索引可以同名,也就是说MySQL的索引是表级别的;但是Oracle索引不可以同名,也就是说Oracle的索引是数据库级别的。
 
  4.1 创建索引(同)
 
  create index indexName on tableName (columnName);
 
  4.2 删除索引(异)
 
  MySQL:
 
  alter table tableName drop index indexName
 
  ?
 
  Oracle:
 
  drop index indexName
 
  4.3 查询表的索引(异)
 
  MySQL:
 
  show index from tableName
 
  ?
 
  Oracle:
 
  select index_name,table_name,column_name from user_ind_columns where table_name=‘ tableName ‘? */ ?
 
  5 空字符串问题 /*
 
  Oracle中空字符串‘‘就是null(也就是说,只有null,没有空字符),而MySQL是区分null和‘‘的。
 
  对于使用语句:select * from table1 where user_name <> ‘‘来查询列user_name不为空(不为null且不为空字符)时,Oracle会查不出任何结果,而MySQL可以正常运行。这里MySQL之所以可以得到正确结果,还因为比较符号<>会先将列为null的内容进行过滤,然后再比较内容是否为空字符串。
 
  这就要求一方面,以后在编写代码的时候,尽量保证不会往数据库插入空字符串‘‘这样的值,要么保持有数据,要么保持为null。另外,对于MySQL中已经同时存在Null和‘‘时,所有判断是否为null或者‘‘的地方改为判断列的长度是否为0。 */ 
 
? 
MySQL与Oracle SQL语言差异比较 
 
 
 
  
 |