如果未提供,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 触发器自动生成一个数字的主要内容,如果未能解决你的问题,请参考以下文章

即使未打开django应用程序页面,Django如何也能自动触发任务

mysql怎么自动更新表格里数据

MySQL自动递增自定义值

WebDriver:更改事件未触发

MySQL 触发器自动增量

如果未提供模型,则 ASP.NET MVC 自动模型实例化