Yii2 資料庫分表, id 統一生成方法

2021-07-14 00:24:22 字數 1291 閱讀 3014

資料庫做分表之後,沒法使用簡單的 auto_increment  id 來做 primary key,為了維持 id 在多個物理分表上的全域性唯一,我們需要一種替代 auto_increment 方式的統一  id 生成方法。 所有的 id 都統一從這裡生成,確保不同分表的 id 是全域性唯一的。只要保證了不同物理分表的 id 是全域性唯一的,我們就能很容易的在不同分表之間遷移資料,而不同擔心 id 衝突。

這裡我們採用 儲存過程來為所有的表統一生成  id ,結構如下:

$sequence_table_fields = array(

'generator' => 'varchar(32) not null primary key', # id 生成器名稱

'id' => 'bigint(32) unsigned not null default 0', # 生成器對應的 id

);$this->createtable('}', $sequence_table_fields, 'engine=innodb default charset=utf8');

// 為 article_title表 生成 id

$this->insert('}', array('generator' => 'article_title', 'id' => 0));

// 為 article_content表 生成 id

$this->insert('}', array('generator' => 'article_content', 'id' => 0));

// 儲存過程,用於生成 id

$this->execute("

create procedure `p_sequence_id_gen`(generatorname varchar(32))

begin

start transaction;

update `sequence` set `id` = last_insert_id(`id` + 1) where `generator` = generatorname;

select last_insert_id();

commit;

end");

儲存過程的呼叫,直接用於生成表id

class storeprocedurehelper 

public static function generateartitletitleid()

public static function generateartitlecontentid()

}

yii2資料庫遷移

yii migrate create create test table 建立乙個資料庫遷移 yii migrate 提交所有的遷移 yii migrate m160623 034801 create test table 指定類名,提交乙個遷移 yii migrate down 還原最近一次遷移 ...

基礎YII2資料庫操作

注意 為了保持精度,從資料庫中取出的資料都被表示為字串,即使相應的資料庫列型別數值。當建立從乙個帶引數的sql乙個db命令,你應該總是使用繫結引數的方法來防止sql注入攻擊。引數繫結是通過預處理語句來實現。除了防止sql注入攻擊,也可通過一次準備sql語句和多次使用不同的引數執行它提高效能 yii ...

yii2 查詢資料庫語法

1 query0 imgroupuser find where gid 56680dfc60b215d62104a4d8 select user client id all ar2 query1 imgroupuser findall gid 56680dfc60b215d62104a4d8 ar3...