当前位置: 56net亚洲必嬴 > 数据库 > 正文

oracle 中生成流水号 方法

时间:2019-11-01 16:36来源:数据库
  hbase shell命令的运用 再采用hbase 命令早先先检查一下hbase是不是运转经常 hadoop@Master:/usr/hbase/bin$ jps2640 HMaster27170 NameNode27533 SecondaryNameNode3038 Jps27795 TaskTracker27351 DataNode2574 HQuorumPeer2761

 

hbase shell命令的运用

再采用hbase 命令早先先检查一下hbase是不是运转经常

hadoop@Master:/usr/hbase/bin$ jps
2640 HMaster
27170 NameNode
27533 SecondaryNameNode
3038 Jps
27795 TaskTracker
27351 DataNode
2574 HQuorumPeer
27618 JobTracker
2872 HRegionServer

譬喻运转不寻常的话,关闭hbase后再也起动一下

stop-hbase.sh
start-hbase.sh

 

1.  status命令

hbase(main):008:0> status
1 servers, 0 dead, 3.0000 average load

 

2. version命令

hbase(main):007:0> version
0.94.12, r1524863, Fri Sep 20 00:25:45 UTC 2013

 

3. create 命令
创制三个名称为 test 的表,这几个表唯有三个名列 cf。其间表名、列都要用单引号括起来,并以逗号隔断。

hbase(main):001:0> create 'test', 'cf'
0 row(s) in 10.3830 seconds

4. list 命令
翻开当前 HBase 中兼有啥样表。

hbase(main):009:0> list
TABLE                                                                           
test                                                                            
1 row(s) in 0.3590 seconds

 

5. put 命令
利用 put 命令向表中插入数据,参数分别为表名、行名、列名和值,在那之中列名前供给列族最为前缀,时间戳由系统自动生成。
格式: put 表名,行名,列名([列族:列名]),值
例子:
参与生机勃勃行数据,行名称叫“row1”,列族“cf”的列名称为”(空字符串)”,值位 value1。
自身这里插入3条记下

hbase(main):003:0> put 'test', 'row1', 'cf:a', 'value1'
0 row(s) in 0.2350 seconds

hbase(main):004:0> put 'test', 'row2', 'cf:b', 'value2'
0 row(s) in 0.0350 seconds

hbase(main):005:0> put 'test', 'row3', 'cf:c', 'value3'
0 row(s) in 0.0040 seconds

6. describe 命令
查看表“test”的构造。

hbase(main):010:0> describe 'test'
DESCRIPTION                                          ENABLED                    
 'test', {NAME => 'cf', DATA_BLOCK_ENCODING => 'NONE true                       
 ', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0',                            
  VERSIONS => '3', COMPRESSION => 'NONE', MIN_VERSIO                            
 NS => '0', TTL => '2147483647', KEEP_DELETED_CELLS                             
 => 'false', BLOCKSIZE => '65536', IN_MEMORY => 'fal                            
 se', ENCODE_ON_DISK => 'true', BLOCKCACHE => 'true'                            
 }                                                                              
1 row(s) in 1.6630 seconds

7.get 命令
a.查看表“test”中的行“row2”的连带数据。

hbase(main):011:0> get 'test','row2'
COLUMN                CELL                                                      
 cf:b                 timestamp=1381568161926, value=value2                     
1 row(s) in 0.4500 seconds

b.查看表“test”中行“row2”列“cf :b”的值。

hbase(main):012:0> get 'test','row2', 'cf:b'
COLUMN                CELL                                                      
 cf:b                 timestamp=1381568161926, value=value2                     
1 row(s) in 0.3090 seconds

或者

hbase(main):012:0> get 'test', 'row2', {COLUMN=>'cf:b'}
hbase(main):012:0> get 'test', 'row2', {COLUMNS=>'cf:b'}

备注:COLUMN 和 COLUMNS 是差异的,scan 操作中的 COLUMNS 内定的是表的列族, get操作中的 COLUMN 钦定的是特定的列,COLUMNS 的值实质上为“列族:列修饰符”。COLUMN 和 COLUMNS 必须为大写。

8. scan 命令
a. 查看表“test”中的全数数据。

hbase(main):006:0> scan 'test'
ROW                   COLUMN+CELL                                               
 row1                 column=cf:a, timestamp=1381568140492, value=value1        
 row2                 column=cf:b, timestamp=1381568161926, value=value2        
 row3                 column=cf:c, timestamp=1381568176693, value=value3        
3 row(s) in 0.0770 seconds

注意:
scan 命令能够钦点 startrow,stoprow 来 scan 七个 row。
例如:

scan 'user_test',{COLUMNS =>'info:username',LIMIT =>10, STARTROW => 'test', STOPROW=>'test2'}

b.查看表“scores”中列族“course”的全部数据。

hbase(main):012:0> scan  'scores', {COLUMN => 'grad'}
hbase(main):012:0> scan  'scores', {COLUMN=>'course:math'}
hbase(main):012:0> scan  'scores', {COLUMNS => 'course'}
hbase(main):012:0> scan  'scores', {COLUMNS => 'course'}

9.count 命令——总括出表中有微微条记下

hbase(main):013:0> count 'test'
3 row(s) in 1.6530 seconds

10. exists 命令——查看表是不是存在

hbase(main):014:0> exists 'test'
Table test does exist                                                           
0 row(s) in 1.1620 seconds

11. incr 命令

给‘test’那个列扩张 uid 字段,并采纳counter完成依次增加
接连几日来实行incr以上,COUNTEWrangler VALUE 的值会依次增加,通过get_counter

hbase(main):010:0> incr 'test', 'row2', 'uid', 2
COUNTER VALUE = 2

hbase(main):011:0> incr 'test', 'row2', 'uid', 3
COUNTER VALUE = 5

查看表能够旁观:

hbase(main):012:0> scan 'test'
ROW                   COLUMN+CELL                                               
 row1                 column=uid:1, timestamp=1381571789416, value=buym:1       
 row2                 column=uid:, timestamp=1381572436088, value=x00x00x00x
                      00x00x00x00x05                                        
 row2                 column=uid:2, timestamp=1381571805008, value=buym:20      
2 row(s) in 0.0790 seconds

12. delete 命令
删除表“test”中行为“row3”, 列族“cf”中的“c”。

hbase(main):015:0> delete 'test','row3','cf:c'
0 row(s) in 0.4640 seconds

 

13. truncate 限令——将表删除后再另行创建

hbase(main):018:0> truncate 'test'
Truncating 'test' table (it may take a while):
 - Disabling table...
 - Dropping table...
 - Creating table...
0 row(s) in 5.6480 seconds

 

14. disbale、drop 命令
透过“disable”和“drop”命令删除“test”表。

hbase(main):001:0> disable 'test'
hbase(main):003:0> drop 'test'
0 row(s) in 3.9310 seconds

必嬴56net 1

 

  采取流水号子表,此表用于保存未有用过的流水号。当顾客取号时,首推剖断子表是不是含有流水号,当临时,收取贰个,并删除此个(幸免别此外顾客取用);不然调用主表得到新流水号。

就算如此新生成了贰个流水号,不过不能够直接使用,因为若是@maxNo的值不是4位数,那么就能够搅乱pk_id的队形,所以需求展开判别

 

 

create table test(
     pk_id varchar(12) not null,
     name varchar(10) null
)

 

必嬴56net 2必嬴56net 3代码

----拿到上一个最近生成的pk_id
select top 1 pk_id from table test order by pk_id desc 

 

 通过几个流水号表,记录当前最大的流水号,以便下一次取用。每趟取号时,将流水号表更新成大的。

终极,把供给插入表中的多寡作为参数字传送递到存款和储蓄进程中,在蕴藏过程中实行插入操作

   实验情形:sqlserver 二〇一〇 CRUISER2  

  结果为:hp2010020001

<h3>分析</h3>
该字段由三有的构成:QQ字符 + 201706(年月,即当明日子)+ 0001(流水号,自动拉长)

 3.对有的时候表自个儿举行左连接(前风流倜傥行和后风度翩翩行互补),然后对比行中两张表的keyId 是不是离开1,

 

CONVERT(varchar(8), GETDATE(), 112)  --获取对应格式(20170601)的当前系统时间

 2.使用with as (cte)表明式将再也生成流水号的表放入有时表

二、新扩充时须呈现流水号,如获得获得三番三回流水号

declare @maxNo varchar(4)  ----定义变量
----把上诉得到的最近生产的pk_id,通过substring()方法截取最后的4位流水号,然后对其加1
select @maxNo=(Select SUBSTRING( (select top 1 pk_id from test order by pk_id desc),9,4)+1);

   假若间距1,则意味延续数据行,反之为非一而再再而三行数据

结果:

  1. QQ字符不用管
  2. 201706,当然是先获得到系统当下的时光,然后得到对应的6位数值
  3. 流水号,为了确认保障主键不另行,同时内,那朝气蓬勃部分流水号应该是众口难调的,所以流水号从 0000~9999 ,即同大器晚成段时间最多会有后生可畏万个例外的流水号。(这段时间不思考9999加1之后的图景)

 

必嬴56net,方法:

常常本身在写小demo的时候,都以行使的纯数字自增(1,2,3……)这种。比较来说,流水号方式的看起来更专门的职业,何况能够从流水号中询问多少的增长期及各类,当然,是或不是望着更有逼格。

摘要:

 

兑现的流水号样式(字符+日期+流水号)如下

 

 方法:

USE [Test] ----Test是test表所在的数据库名
GO
/****** Object:  StoredProcedure [dbo].[AddData]    Script Date: 06/01/2017 18:51:04 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[AddData]  
    @name varchar(10)  ----参数,用于接收传入的name值
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    declare @dateStr varchar(6),  ----定义变量,用于存储6位数的时间
    @maxNo varchar(4), ----定义变量,用于存储4位流水号
    @result varchar(12) -----定义变量,用于存储新生成的pk_id

    ----获取到系统当前时间,并截取符合条件的6位,同时赋值给@dateStr
    select @dateStr = (select SUBSTRING((Select CONVERT(varchar(8), GETDATE(), 112)),1,6))

    ----先判断是否第一次向test表中插入数据(即当前表中是否存在数据)
    if exists (select * from test) begin
        ----获取数据表中最近产生的一个pk_id,并截取最后4位流水号,对4位流水号进行加1,最后赋值给@maxNo
        select @maxNo=(Select SUBSTRING( (select top 1 pk_id from test order by pk_id desc),9,4)+1);

        ----对上诉的@maxNo做判断,确保流水号一定是4位,不够的在前面补0
        if (@maxNo < 10) begin
            set @maxNo = '000' + @maxNo; --如果是1位数的话,需要在前面加3个0,补够4位
        end 
        else if (@maxNo < 100) begin
            set @maxNo = '00' + @maxNo; --如果是2位数的话,需要在前面加2个0,补够4位
        end
        else if (@maxNo < 1000) begin
            set @maxNo = '0' + @maxNo; --如果是3位数的话,需要在前面加1个0,补够4位
        end

        ----将上诉结果合成一个新的pk_id
        select @result=(Select 'QQ' + @dateStr + @maxNo)
    end 
    else
       ----如实当前插入的数据时第一条数据,那么直接把4位流水号设为0000
       select @result = 'QQ' + @dateStr + '0000'

    ----将数据插入到test表中
    insert into test(pk_id,name) values(@result,@name);
END

编辑:数据库 本文来源:oracle 中生成流水号 方法

关键词: