MySQL實現自動使用uuid作為主鍵以及解決不能調用觸發器的一點思路

來源:互聯網
上載者:User

標籤:結果   std   statement   use   而且   for   row   let   iter   

這裡使用觸發程式實現此功能.

觸發程式文法如下:

Create trigger <tri_name>

{before|after}

{insert|update|delete}

On <tab_name>

For each row

<觸發程式SQL語句>

核心代碼:

 1 use t14test 2 show tables 3 drop table if exists uuidTest 4 create table uuidTest( 5   testId VARCHAR(36) not NULL DEFAULT ‘1‘, 6   testData VARCHAR(32), 7   PRIMARY KEY(`testId`) 8 ) 9 /*建立觸發器*/10 /*11  * terminal建立預存程序需要定義分隔字元12  * delimiter //13  * */14 create trigger tri_auto_uuid15 before insert16 on uuidTest17 for each ROW18 BEGIN19 if new.testId = ‘1‘ THEN set new.testId = (select uuid());20 end if;21 END22 /*刪除觸發器*/23 drop trigger if exists tri_auto_uuid24 /*插入資料*/25 insert into uuidTest(testData)VALUES(‘一條資料‘) 26 select * from uuidTest

運行了三次插入操作,結果如下:

使用觸發器可實現uuid作為主鍵.

有問題的代碼:

1 create trigger tri_auto_uuid2 after insert3 on uuidTest4 for each ROW5 update uuidTest set testId=((select uuid()))

如果這樣定義觸發程式,看似沒問題,也能添加成功,但是錄入資料會報錯.

Can‘t update table ‘tb_user‘ in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

網上說為了避免遞迴觸發,update一條資料後不能觸發對該資料進行除了Set之外的更新操作.否則就會報錯.

可是我這個觸發器是after insert 而且是Set 操作,為什麼會有問題呢?

這裡存在某種原因,可能和遞迴觸發有關係.暫且不去管他底層是如何運作的.只需要改變一下思路,把after insert 改成 before insert 就行了.

 

MySQL實現自動使用uuid作為主鍵以及解決不能調用觸發器的一點思路

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.