各大数据库之间的序列、元数据操作的比较

各大数据库间的比较

目录

  • 各大数据库间的比较
    • 1. PostgreSQL
      • 1.1 序列
        • 1.1.1 查询下一个序列值
        • 1.1.2 查询当前序列值
      • 1.2 元数据操作
        • 1.2.1 查询所有的表
        • 1.2.2 查询表所有字段
    • 2. MySQL
      • 2.1 序列
        • 2.1.1 创建序列表
        • 2.1.2 创建函数获取当前序列值
        • 2.1.3 创建函数获取下一个序列值
      • 2.2 元数据操作
        • 2.2.1 获取所有表名
        • 2.2.2 获取表所有字段
    • 3. Oracle
      • 3.1 序列
        • 3.1.1 查询下一个序列值
        • 3.1.2 查询当前序列值
      • 3.2 元数据操作
        • 3.2.1 查询所有的表
        • 3.2.2 查询表所有字段
    • 4. H2
      • 4.1 序列
        • 4.1.1 获取下一个序列值
        • 4.1.2 获取当前序列值
      • 4.2 元数据操作
        • 4.2.1 获取所有的表
        • 4.2.2 获取表所有字段


1. PostgreSQL


1.1 序列

create sequence seq_common_id
increment 1
minvalue  1
maxvalue 99999999
start 1
cache 20;

1.1.1 查询下一个序列值

select nextval('seq_common_id') ;

1.1.2 查询当前序列值

select currval('seq_common_id') ;

1.2 元数据操作


1.2.1 查询所有的表

查询PG当前数据库中的所有的表

SELECT T.TABLENAME FROM PG_TABLES T WHERE SCHEMANAME = 'public' 

1.2.2 查询表所有字段

根据表名,查询表的所有的字段

select a.attname 
from pg_class c, pg_attribute a 
where c.relname = 'table_name' 
and a.attrelid = c.oid 
and a.attnum > 0 
order by a.attnum ;



2. MySQL


2.1 序列

没有序列这个说法

但是可以设置 主键为 auto-increment

也可以结合数据库表和函数来实现 序列相同的效果



2.1.1 创建序列表

创建一张表来存序列相关信息(包括:序列名称、当前序列值、步长)

CREATE TABLE `tab_sequence` (
  `sequence_name` varchar(255) NOT NULL COMMENT '序列名称',
  `current_value` int(255) NOT NULL COMMENT '序列当前值',
  `increment` int(255) DEFAULT NULL COMMENT '步长,每次递增多大'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入一个序列(就是一条表记录)

INSERT INTO tab_sequence(sequence_name, current_value, increment) VALUES ('seq_common_id', 0, 1);



2.1.2 创建函数获取当前序列值


创建一个函数 current_value ,取序列的当前值

CREATE FUNCTION current_value(seq_name varchar(50)) RETURNS int(10)
begin
	declare retValue int ;
	set retValue = 0 ;
	select current_value into retValue from tab_sequence where sequence_name = seq_name ;
	return retValue;
end

使用方式:

SELECT current_value('seq_common_id') ;



2.1.3 创建函数获取下一个序列值

创建一个函数 next_value,取序列的下一个值

CREATE FUNCTION next_value(seq_name varchar(50)) RETURNS int(10)
BEGIN
	update tab_sequence set current_value = current_value + increment 
	where sequence_name = seq_name ;
	RETURN current_value(seq_name);
END

调用方式:

SELECT next_value('seq_common_id') ;

2.2 元数据操作


2.2.1 获取所有表名

select table_name 
from information_schema.TABLES 
where TABLE_SCHEMA = '数据库名' 
and TABLE_TYPE = 'BASE TABLE' ;



2.2.2 获取表所有字段

select COLUMN_NAME 
from information_schema.COLUMNS 
where TABLE_NAME = '表名';

3. Oracle


oracle 建序列的语句不一样,有些小出入


3.1 序列

create sequence seq_common_id
minvalue 1 
maxvalue 9999999999 
increment by 1 
start with 1 
cache 20 
noorder  
nocycle ;

3.1.1 查询下一个序列值

select seq_common_id.nextval from dual ;

3.1.2 查询当前序列值

SELECT seq_common_id.currval from dual ;

3.2 元数据操作


3.2.1 查询所有的表

查询当前数据库中所有的表

SELECT t.TABLE_NAME FROM USER_TABLES t ;

3.2.2 查询表所有字段

根据表名,查询表的所有的字段

SELECT T.COLUMN_NAME 
FROM USER_TAB_COLUMNS T 
WHERE T.TABLE_NAME = 'table_name' 
ORDER BY T.COLUMN_ID ;



4. H2

H2数据库


4.1 序列

create sequence seq_common_id
increment 1
minvalue  1
maxvalue 99999999
start 1
cache 20;

4.1.1 获取下一个序列值

select SEQ_COMMON_ID.nextval ;

4.1.2 获取当前序列值

select SEQ_COMMON_ID.currval;

4.2 元数据操作


4.2.1 获取所有的表

SELECT t.table_name 
FROM INFORMATION_SCHEMA.TABLES t 
where t.table_schema = 'PUBLIC' 
and t.table_type = 'TABLE'

4.2.2 获取表所有字段

SELECT t.column_name 
FROM INFORMATION_SCHEMA.COLUMNS t 
where t.table_name = 'table_name' 
order by t.ordinal_position



欢迎关注,谢谢!



刚开始写微信公众号,请多多关注,欢迎,多谢!

微信公众号:《Java学习积累》
请关注一下,多谢!!!
微信公众号:Java学习积累

你可能感兴趣的:(MySQL,mysql,postgresql,oracle,序列,元数据)