• Oracle与MySQL的SQL语句区别


    2 表

    2.1 创建表(同)

    create table tableName(

    columnName1 int,

    columnName2 int

    )

    2.2 删除表(异)

    MySQL:

    drop table if exists tableName

    Oracle:

    drop table tableName

    注:Oracle没有if exists关键字,也没用类似if exists的SQL语法。

    3 列

    3.1 添加列(异)

    MySQL:

    A. alter table tableName add column columnName1 int;

    B. alter table tableName add column columnName1 int, add column columnName2 int;

    注:其中关键字column可有可无。

    Oracle:

    A. alter table tableName add columnName1 int;

    B. alter table tableName add (columnName1 int);

    C. alter table tableName add (columnName1 int, columnName2 int); 

    注:对于A,只有添加单列的时候才可使用,对于添加多列时需要使用C,不能像MySQL那样重复使用add column关键字。

    3.2 删除列(异)

    MySQL:

    A. alter table tableName drop column columnName1

    B. alter table tableName drop column columnName1, drop column columnName2

    注:其中关键字column可有可无。

    Oracle:

    A. alter table tableName drop column columnName2

    B. alter table tableName drop (columnName1)

    C. alter table tableName drop (columnName1,columnName2)

    注:对于A,只有删除单列的时候才可使用,对于删除多列时需要使用C,不能像MySQL那样重复使用drop column关键字。

    3.3 修改列名(异)

    MySQL:

    alter table tableName change column columnNameOld columnNameNew columnType;

    Oracle:

    alter table tableName rename column columnNameOld to columnNameNew;

    3.4 修改列类型(说明)

    Oracle中,在列有数据的时候,无法修改列类型;没有数据时可以。

    MySQL中,无论列是否有数据都可以修改列类型。

    但是当有数据是,直接修改列类型都可能对数据造成丢失等,所以一般需要结合具体的业务来对列数据做处理后,再修改列类型类型。所以修改列的类型并非使用SQL语句进行一步到位的修改,而是通过以下流程:

    A. 添加临时列

    B. 将需要更改的列的值经过类型转换的验证后,赋值给临时列

    C. 删除原有列

    D. 将临时列的列名修改为原有列列名

    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。

  • 相关阅读:
    smtplib.py
    淘宝链接中的spm参数
    with 上下文管理
    python RecursionError: maximum recursion depth exceeded while calling
    GraphQL两年实战
    Exception 异常处理
    Simple decorator that intercepts connection errors and ignores these if settings specify this.
    namedtuple
    服务治理在猫眼娱乐的演进之路
    路由、限流、熔断 微服务治理
  • 原文地址:https://www.cnblogs.com/liyi113115/p/6825370.html
Copyright © 2020-2023  润新知