- 创建表
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 '年龄';
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 '年龄';
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 '年龄'
)
- 删除表
- 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的区别:
- drop (删除表):删除内容和定义,释放空间。简单来说就是把整个表去掉,以后要新增数据是不可能的,除非新增一个表。drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。
- truncate (清空表中的数据):删除内容、释放空间但不删除定义(保留表的数据结构)。与drop不同的是,只是清空表数据而已。注意:truncate 不能删除行数据,要删就要把表清空。
- delete (删除表中的数据):delete 语句用于删除表中的行。delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存,以便进行进行回滚操作。
- 修改表名
- Oracle:
ALTER TABLE OLDTABLENAME RENAME TO NEWTABLENAME;
- MySQL:
A.RENAME TABLE OLDTABLENAME TO NEWTABLENAME;
B.ALTER TABLE OLDTABLENAME RENAME TO NEWTABLENAME;
- 修改表注释
- Oracle:
COMMENT ON TABLE 表名 IS '表的注释信息';
- MySQL:
ALTER TABLE OLDTABLENAME COMMENT '新注释';
- 添加字段
- 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
- 删除字段
- 删除一个字段
ALTER TABLE TABLENAME DROP COLUMN COLUMNNAME;
- 删除多个字段
ALTER TABLE TABLENAME DROP (COLUMNNAME1,COLUMNNAME2);
- 修改字段名
- Oracle:
ALTER TABLE TABLENAME RENAME COLUMN OLDCOLUMNNAME TO NEWCOLUMNNAME; 注:不能有字段类型
- MySQL:
ALTER TABLE TABLENAME CHANGE [COLUMN] OLDCOLUMNNAME NEWCOLUMNNAME 新数据类型(必须);
- 修改字段的注释
- Oracle:
COMMENT ON COLUMN 表名.字段名 IS '字段的注释信息';
- MySQL:
ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME 数据类型 COMMENT '修改后的字段注释';
- 修改字段类型
- Oracle:
不允许修改字段类型
- Postgresql:
ALTER TABLE TABLENAME ALTER COLUMN COLUMNNAME TYPE 新数据类型;
- MYSQL:
ALTER TABLE TABLENAME MODIFY [COLUMN] COLUMNNAME 新数据类型 新默认值 新注释;
- 插入数据
- 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名的序列序列参考: