不同数据库的语法和SQL函数对比

  1. 创建表
  • Oracle
CREATE TABLE TEST(
 DATA_DT DATE,
 ID VARCHAR2(32) DEFAULE 0 NOT NULL PRIMARY KEY,
 NAME VARCHAR2(32) ,
 AGE VARCHAR2(32)
)
COMPRESS PARTITION BY RANGE(DATA_DT)
INTERNAL (NUMTODSINTERVAL(1,'DAY'))
(PARTITION T1 VALUES LESS THAN (TO_DATE('2022-01-01','YYYY-MM-DD')));
添加表注释:
COMMENT ON TABLE TEST IS '个人信息';
添加字段注释:
COMMENT ON COLUMN TEST.ID IS 'ID';
COMMENT ON COLUMN TEST.NAME IS '姓名';
COMMENT ON COLUMN TEST.AGE IS '年龄';
  • Postgresql
CREATE TABLE TEST(
 DATA_DT DATE,
 ID VARCHAR2(32) ,
 NAME VARCHAR2(32) ,
 AGE VARCHAR2(32)
)
WITH (APPENDONLY=TRUE,COMPRESSTYPE=LZ4,COMPRESSLEVEL=9,ORIENTATION=COLUMN)
DISTRIBUTED BY(ID)    ID为分布建
PARTITION BY RANGE(DATA_DT) (START DATE'2024-09-17') INCLUSIVE END (DATE'2024-09-18') EXCLUSIVE );
添加表注释:
COMMENT ON TABLE TEST IS '个人信息';
添加字段注释:
COMMENT ON COLUMN TEST.ID IS 'ID';
COMMENT ON COLUMN TEST.NAME IS '姓名';
COMMENT ON COLUMN TEST.AGE IS '年龄';
  • MySQL
CREATE TABLE TEST(
 DATA_DT DATA,
 ID INT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键ID',  
 NAME VARCHAR(32) DEFAULT NULL COMMENT '姓名',
 AGE INT UNSIGNED DEFAULT NULL COMMENT '年龄'
)ENGINE=InnoDB ROW_FORMAT=COMPRESSED AUTOINCREMENT=100001 DEFAULT CHARSET=utf8
COMMENT='测试表';
  • UNSIGNED:无符号位。接在数据类型关键字之后,只出现在整数类型和浮点数据类型中,表示该值不存在负值。设置该属性后该字段的正数范围可以扩大一倍。(例如:TINYINT有符号值储存范围为-128到127,TINYINT无符号值储存范围为0到255)
  • ENGINE=InnoDB:指定储存使用InnoDB引擎。InnoDB引擎是一个提供外键约束的数据存储引擎,提供事务和行锁等。尽管当前很多版本中InnoDB为默认的储存引擎,但是在建表时加入该配置仍然是一个好习惯。
  • AUTO_INCREMENT=100001:当表中的主键设置了自动增长,可以在这里设置自动增长的初始值,默认为1。
  • DEFAULT CHARSET=utf8:设置表的编码为utf8。
  • ROW_FORMAT用于定义表的行存储格式,包括DEFAULT(默认)、DYNAMIC(动态列宽)、COMPACT(紧凑)、REDUNDANT(冗余)和COMPRESSED(压缩)。DYNAMIC节省磁盘空间,COMPACT节省空间但查询可能较慢,REDUNDANT避免类型转换但占用更多空间。
  • Hive:
CREATE TABLE TEST(
 DATA_DT DATA,
 ID STRING NOT NULL PRIMARY KEY COMMENT '主键ID',
 NAME STRING DEFAULT NULL COMMENT '姓名',
 AGE DECIMAL(18) DEFAULT NULL COMMENT '年龄'
)
  1. 删除表
  • Oracle
    DROP TABLE TABLENAME;
  • Postgresql
    DROP TABLE IF EXISTS TABLENAME;
  • MySQL
    DROP TABLE IF EXISTS TABLENAME;
    注:Oracle没有if exists关键字,也没用类似if exists的SQL语法。
    drop、truncate、delete的区别:
  1. drop (删除表):删除内容和定义,释放空间。简单来说就是把整个表去掉,以后要新增数据是不可能的,除非新增一个表。drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。
  2. truncate (清空表中的数据):删除内容、释放空间但不删除定义(保留表的数据结构)。与drop不同的是,只是清空表数据而已。注意:truncate 不能删除行数据,要删就要把表清空。
  3. delete (删除表中的数据):delete 语句用于删除表中的行。delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存,以便进行进行回滚操作。
  4. 修改表名
  • Oracle:
    ALTER TABLE OLDTABLENAME RENAME TO NEWTABLENAME;
  • MySQL:
    A.RENAME TABLE OLDTABLENAME TO NEWTABLENAME;
    B.ALTER TABLE OLDTABLENAME RENAME TO NEWTABLENAME;
  1. 修改表注释
  • Oracle
    COMMENT ON TABLE 表名 IS '表的注释信息';
  • MySQL
    ALTER TABLE OLDTABLENAME COMMENT '新注释';
  1. 添加字段
  • Oracle:
  • ALTER TABLE TABLENAME ADD COLUMNNAME1 INT;
  • ALTER TABLE TABLENAME ADD (COLUMNNAME1 INT);
  • ALTER TABLE TABLENAME ADD (COLUMNNAME1 INT, COLUMNNAME2 INT);
  • MySQL:
  • ALTER TABLE TABLENAME ADD [COLUMN] COLUMNNAME1 INT(10);
  • ALTER TABLE TABLENAME ADD [COLUMN] COLUMNNAME1 INT(10), ADD COLUMN COLUMNNAME2 INT(10);
    MySQL可在指定位置插入新字段,可使用关键字AFTER或FIRST,而Oracle无这种用法
  • ALTER TABLE TABLENAME ADD [COLUMN] COLUMNNAME 数据类型 COMMENT '注释' AFTER 指定某字段;
  • B.ALTER TABLE TABLENAME ADD [COLUMN] COLUMNNAME 数据类型 COMMENT '注释' FIRST
    没有before的用法,只有first
  1. 删除字段
  • 删除一个字段
    ALTER TABLE TABLENAME DROP COLUMN COLUMNNAME;
  • 删除多个字段
    ALTER TABLE TABLENAME DROP (COLUMNNAME1,COLUMNNAME2);
  1. 修改字段名
  • Oracle:
    ALTER TABLE TABLENAME RENAME COLUMN OLDCOLUMNNAME TO NEWCOLUMNNAME; 注:不能有字段类型
  • MySQL:
    ALTER TABLE TABLENAME CHANGE [COLUMN] OLDCOLUMNNAME NEWCOLUMNNAME 新数据类型(必须);
  1. 修改字段的注释
  • Oracle:
    COMMENT ON COLUMN 表名.字段名 IS '字段的注释信息';
  • MySQL:
    ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME 数据类型 COMMENT '修改后的字段注释';
  1. 修改字段类型
  • Oracle:
    不允许修改字段类型
  • Postgresql:
    ALTER TABLE TABLENAME ALTER COLUMN COLUMNNAME TYPE 新数据类型;
  • MYSQL:
    ALTER TABLE TABLENAME MODIFY [COLUMN] COLUMNNAME 新数据类型 新默认值 新注释;
  1. 插入数据
  • Oracle:
    INSERT INTO TABLENAME (COLUMN1,COLUMN2,COLUMN3) VALUES (TABLENAME.NEXTVAL,COLUMN2VALUE,COLUMN3VALUE)
  • MySQL:
    INSERT INTO TABLENAME (COLUMN1,COLUMN2,COLUMN3) VALUES (NULL,COLUMN2VALUE,COLUMN3VALUE)
    注:column1是自增主键字段,默认Oracle已创建了tableName名的序列序列参考:
posted @ 2021-04-15 13:58  蔓越煤  阅读(761)  评论(0编辑  收藏  举报