MySQL触发器自动生成数字(如果未提供)

时间:2018-10-31 09:17:42

标签: mysql mysql-5.7

如果表中的列未提供任何内容,是否可以自动生成数字

#SurveyId,Name,PhoneNumber
1,David,071234234
1,John, NULL

预期产量

#SurveyId,Name,PhoneNumber
1,David,071234234
1,John, 3274985AUTO

我想为我的表编写一个触发器以执行自动生成选项;我想使用UUID()自动生成数字

语法错误:

15:10:23    CREATE TRIGGER mobilecheck BEFORE INSERT ON reg02_maininfo  `FOR EACH ROW IF NEW.farmermobile IS NULL THEN SET NEW.farmermobile = floor(rand()*900000)+100000   Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 2  0.0015 sec`

2 个答案:

答案 0 :(得分:1)

您可以通过这种方式完成

SELECT SurveyId, Name, IFNULL(PhoneNumber,floor(rand()*900000)+100000) as PhoneNumber FROM table

我没有在末尾添加AUTO,就好像该字段只接受整数一样,也会给您带来错误。

您还可以更新表以直接替换所有空值

UPDATE Table SET PhoneNumber = floor(rand()*900000)+100000
WHERE PhoneNumber IS NULL;

对于触发器,您可以使用以下命令:

CREATE TRIGGER phonecheck BEFORE INSERT ON tablename FOR EACH ROW IF NEW.PhoneNumber IS NULL THEN SET NEW.PhoneNumber = floor(rand()*900000)+100000; END IF;

答案 1 :(得分:-1)

如果不为空,则使用COALESCE来获取;如果为FLOOR + RAND,则获取一个随机数;否则,使用CONCAT在末尾添加AUTO

SELECT `#SurveyId`,`Name`,COALESCE(`PhoneNumber`,CONCAT((FLOOR(RAND()*(9999999-1000000+1))+1000000),'AUTO')) AS PhoneNumber