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

各大数据库间的比较


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学习积累

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天涯共明月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值