首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >触发器在更新行之前设置段塞。

触发器在更新行之前设置段塞。
EN

Stack Overflow用户
提问于 2016-08-17 05:05:16
回答 1查看 275关注 0票数 1

我运行以下MySQL代码来创建full_contact_social_networks表

代码语言:javascript
运行
复制
 CREATE TABLE `full_contact_social_networks` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `base_id` bigint(20) UNSIGNED NOT NULL,
  `name` varchar(24) COLLATE utf8_unicode_ci DEFAULT NULL,
  `slug` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

ALTER TABLE `full_contact_social_networks`
  ADD PRIMARY KEY (`id`),
  ADD KEY `base_id` (`base_id`);

ALTER TABLE `full_contact_social_networks`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

然后,我想要创建一个触发器,以将段塞列的值设置为sha256 of base_id+name。我使用的方法如下:

代码语言:javascript
运行
复制
CREATE TRIGGER full_contact_social_networksUpd BEFORE UPDATE ON full_contact_social_networks 
FOR EACH ROW SET `slug` = SHA2((CONCAT (`base_id`, `name`)), 256);   

但是这给了我以下错误信息:

代码语言:javascript
运行
复制
[errno] => 1193
[sqlstate] => HY000
[error] => Unknown system variable 'slug'       
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-17 07:26:48

在触发器正文中,旧的和新的关键字使您能够访问受触发器影响的行中的列。旧的和新的是触发器的MySQL扩展;它们不区分大小写。

参考文献:http://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html

所以你的扳机必须是:

代码语言:javascript
运行
复制
CREATE TRIGGER full_contact_social_networksUpd BEFORE UPDATE ON full_contact_social_networks 
FOR EACH ROW SET NEW.slug = SHA2((CONCAT (NEW.base_id, NEW.name)), 256);

但是这只适用于更新,您可能也想要一个用于插入。在mysql中,不能有一个触发器显示需要两个触发器插入或更新

代码语言:javascript
运行
复制
 CREATE TRIGGER full_contact_social_networksIns BEFORE INSERT ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38988470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档