如果未提供,MySQL 触发器自动生成一个数字
Posted
技术标签:
【中文标题】如果未提供,MySQL 触发器自动生成一个数字【英文标题】:MySQL Trigger to Auto generating a number if not supplied 【发布时间】:2019-04-04 10:03:19 【问题描述】:如果没有为表中的列提供任何内容,是否可以自动生成一个数字
#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`
【问题讨论】:
你的 mysql 服务器版本是多少?如果可以升级到8.0的最新补丁;您可以将表达式设置为列的默认值。然后就可以使用UUID()
函数
通常自动递增列不是您想要直接插入数据的列。生成电话号码背后的逻辑是什么?
mysql 版本 5.7.23 @MadhurBhaiya
您是说您希望电话号码成为主键吗?
只要有一个人工智能。停止所有这些电话号码PK废话。
【参考方案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;
【讨论】:
我正在寻找一个可以在将数据插入我的表时执行的触发器,我尝试过使用以下内容,但它似乎不是我想要的 @MirieriMogaka 如果你不指定它我无能为力^^【参考方案2】:如果不为空则COALESCE获取,否则为FLOOR+RAND获取随机数,CONCAT最后添加AUTO
?
SELECT `#SurveyId`,`Name`,COALESCE(`PhoneNumber`,CONCAT((FLOOR(RAND()*(9999999-1000000+1))+1000000),'AUTO')) AS PhoneNumber
【讨论】:
以上是关于如果未提供,MySQL 触发器自动生成一个数字的主要内容,如果未能解决你的问题,请参考以下文章