zoukankan      html  css  js  c++  java
  • mysql和oracle建表语句以及数据类型的区别

    1、mysql和oracle建表语句的区别

    mysql

    DROP TABLE IF EXISTS `order`;
    CREATE TABLE `order` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `number` varchar(255) NOT NULL COMMENT '工单编号',
      `applicant` varchar(255) NOT NULL COMMENT '工单申请人',
      `state` int(1) NOT NULL COMMENT '工单状态',
      `count` int(4) NOT NULL COMMENT '个数',
      `ctime` varchar(255) NOT NULL,
      `depart` varchar(255) NOT NULL COMMENT '部门',
      `projectname` varchar(255) NOT NULL COMMENT '项目名称',
      PRIMARY KEY (`id`),
      UNIQUE KEY `index_id` (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8;

    oracle

    ---创建表
    create table ZHANGSAN.ORDER 
    (
      id           NUMBER not null,
      number    VARCHAR2(255),
      applicant VARCHAR2(255),
      state     NUMBER(1),
      count     NUMBER(6),
      ctime     VARCHAR2(30),
      depart    VARCHAR2(255),
      projectname  VARCHAR2(255)
    )

    ---为每一行添加注释
    comment on column ZHANGSAN.ORDER.number
      is '工单编号';
    comment on column ZHANGSAN.ORDER.applicant
      is '工单申请人';
    comment on column ZHANGSAN.ORDER.state
      is '工单状态';
    comment on column ZHANGSAN.ORDER.count
      is '个数';
    comment on column ZHANGSAN.ORDER.ctime
      is '创建时间';
    comment on column ZHANGSAN.ORDER.depart
      is '部门';
    comment on column ZHANGSAN.ORDER.projectname
      is '项目名称';
      
      
    ---指定主键  
    alter table ZHANGSAN.ORDER
      add constraint ID primary key (ID)
      using index 
      tablespace USERS
      pctfree 10
      initrans 2
      maxtrans 255;

    2、数据类型的区别:

    mysql基本数据类型:

    1)数值型:

    优化建议:

     建议使用 TINYINT 代替 ENUM、BITENUM、SET。
    避免使用整数的显示宽度,也就是说,不要用INT(10)类似的方法指定字段显示宽度,直接用INT。
    DECIMAL最适合保存准确度要求高,而且用于计算的数据,比如价格。但是在使用DECIMAL类型的时候,注意长度设置。
     建议使用整形类型来运算和存储实数,方法是,实数乘以相应的倍数后再操作。
     整数通常是最佳的数据类型,因为它速度快,并且能使用AUTO_INCREMENT

    2)日期和时间型:

    优化建议:

    MySQL能存储的最小时间粒度为秒。
    建议用DATE数据类型来保存日期。MySQL中默认的日期格式是yyyy-mm-dd。
    用MySQL的内建类型DATE、TIME、DATETIME来存储时间,而不是使用字符串。
    当数据格式为TIMESTAMP和DATETIME时,可以用CURRENT_TIMESTAMP作为默认(MySQL5.6以后), MySQL会自动返回记录插入的确切时间。
    TIMESTAMP是UTC时间戳,与时区相关。
    DATETIME的存储格式是一个YYYYMMDD HH:MM:SS的整数,与时区无关
    除非有特殊需求,否则建议使用TIMESTAMP,它比DATETIME更节约空间

    3)字符串型:

    优化建议:

    1. 字符串的长度相差较大用VARCHAR;字符串短,且所有值都接近一个长度用CHAR。
    2.  BINARY和VARBINARY存储的是二进制字符串,与字符集无关。
    3. BLOB系列存储二进制字符串,与字符集无关。
    4. TEXT是一个更大的VARCHAR。
    5. BLOB和TEXT都不能有默认值。

    Oracle的基本数据类型

    1)字符串类型

    字符串数据类型还可以依据存储空间分为固定长度类型(CHAR/NCHAR) 和可变长度类型(VARCHAR2/NVARCHAR2)两种.

        所谓固定长度:是指虽然输入的字段值小于该字段的限制长度,但是实际存储数据时,会先自动向右补足空格后,才将字段值的内容存储到数据块中。这种方式虽然比较浪费空间,但是存储效率较可变长度类型要好。同时还能减少数据行迁移情况发生。

    所谓可变长度:是指当输入的字段值小于该字段的限制长度时,直接将字段值的内容存储到数据块中,而不会补上空白,这样可以节省数据块空间。

    1.1:CHAR类型 CHAR(size [BYTE | CHAR])

    CHAR类型,定长字符串,会用空格填充来达到其最大长度。非NULL的CHAR(12)总是包含12字节信息。CHAR字段最多可以存储2,000字节的信息。如果创建表时,不指定CHAR长度,则默认为1。另外你可以指定它存储字节或字符,例如 CHAR(12 BYTYE) CHAR(12 CHAR).一般来说默认是存储字节,你可以查看数据库参数

    NLS_LENGTH_SEMANTICS的值。

    注意:数据库的NLS_CHARACTERSET 为AL32UTF8,即一个汉字占用三到四个字节。如果NLS_CHARACTERSET为ZHS16GBK,则一个字符占用两个字节。

    1.2: NCHAR类型

    这是一个包含UNICODE格式数据的定长字符串。NCHAR字段最多可以存储2,000字节的信息。它的最大长度取决于国家字符集。另外查询时,如果字段是NCHAR类型,则需要如下书写

    SELECT translated_description FROM product_descriptions

    WHERE translated_name = N'LCD Monitor 11/PM';

    1.3 VARCHAR类型

    不要使用VARCHAR数据类型。使用VARCHAR2数据类型。虽然VARCHAR数据类型目前是VARCHAR2的同义词,VARCHAR数据类型将计划被重新定义为一个单独的数据类型用于可变长度的字符串相比,具有不同的比较语义。

    1.4: VARCHAR2类型

    变长字符串,与CHAR类型不同,它不会使用空格填充至最大长度。VARCHAR2最多可以存储4,000字节的信息。

    1.5: NVARCHAR2类型

    这是一个包含UNICODE格式数据的变长字符串。 NVARCHAR2最多可以存储4,000字节的信息。

    2)数字类型

    2.1 NUMBER类型

    NUMBER(P,S)是最常见的数字类型,可以存放数据范围为10^130~10^126(不包含此值),需要1~22字节(BYTE)不等的存储空间。

    P 是Precison的英文缩写,即精度缩写,表示有效数字的位数,最多不能超过38个有效数字

    S是Scale的英文缩写,可以使用的范围为-84~127。Scale为正数时,表示从小数点到最低有效数字的位数,它为负数时,表示从最大有效数字到小数点的位数

    下面是官方文档的示例

    2.2 INTEGER类型

    INTEGER是NUMBER的子类型,它等同于NUMBER(38,0),用来存储整数。若插入、更新的数值有小数,则会被四舍五入。

    Oracle 数据库提供了专为浮点数的两种数值数据类型:

    2.3 浮点数

    BINARY_FLOAT

    BINARY_FLOAT 是 32 位、 单精度浮点数字数据类型。可以支持至少6位精度,每个 BINARY_FLOAT 的值需要 5 个字节,包括长度字节。

    BINARY_DOUBLE

    BINARY_DOUBLE 是为 64 位,双精度浮点数字数据类型。每个 BINARY_DOUBLE 的值需要 9 个字节,包括长度字节。

    在数字的列中,浮点数有小数精度。在 BINARY_FLOAT 或 BINARY_DOUBLE 的列中,浮点数有二进制的精度。二进制浮点数支持的特殊值无穷大和 NaN (不是数字)。

    您可以指定列在表 2-4 范围内的浮点数。"数字文本"中定义了用于指定浮点数的格式。

    Table 2-3 Floating Point Number Limits

    2.4 FLOAT类型

    FLOAT类型也是NUMBER的子类型。

    Float(n),数 n 指示位的精度,可以存储的值的数目。N 值的范围可以从 1 到 126。若要从二进制转换为十进制的精度,请将 n 乘以 0.30103。要从十进制转换为二进制的精度,请用 3.32193 乘小数精度。126 位二进制精度的最大值是大约相当于 38 位小数精度。

     3)日期类型

    日期类型用于存储日期数据,但是并不是使用一般的格式(2012-08-08)直接存储到数据库的。

    3.1 DATE类型

    DATE是最常用的数据类型,日期数据类型存储日期和时间信息。虽然可以用字符或数字类型表示日期和时间信息,但是日期数据类型具有特殊关联的属性。为每个日期值,Oracle 存储以下信息: 世纪、 年、 月、 日期、 小时、 分钟和秒。一般占用7个字节的存储空间。

    3.2 TIMESTAMP类型

    这是一个7字节或12字节的定宽日期/时间数据类型。它与DATE数据类型不同,因为TIMESTAMP可以包含小数秒,带小数秒的TIMESTAMP在小数点右边最多可以保留9位

    3.3 TIMESTAMP WITH TIME ZONE类型

    这是TIMESTAMP类型的变种,它包含了时区偏移量的值

    3.4 TIMESTAMP WITH LOCAL TIME ZONE类型

    3.5 INTERVAL YEAR TO MOTH

    3.6 INTERVAL DAY TO SECOND

    参考:

    https://blog.csdn.net/qq_27648991/article/details/80411566

     

  • 相关阅读:
    查看端口有没有被占用
    微信公众号2()
    How to insert a segment of noise to music file
    puppet practice
    Docker Commands
    LempelZiv algorithm realization
    The algorithm of entropy realization
    Java network programmingguessing game
    Deploy Openstack with RDO and Change VNC console to Spice
    puppet overview
  • 原文地址:https://www.cnblogs.com/isme-zjh/p/11399882.html
Copyright © 2011-2022 走看看