【发布时间】:2019-11-03 05:18:31
【问题描述】:
逻辑是在Keycloak用户表中插入一行时,在另一个DB的表中添加一行。(我猜很简单) 发生的只是 Key 有值,其余的都是 NULL 插入的(它们确实有值,它们都在触发发生之前正确插入到 KeyCloak 表中)
Caesar 遇到了同样的问题,但他的解决方案不起作用。 MySQL "After Insert" Trigger keeps inserting nulls
我正在为 Mysql 使用 PHPMyAdmin 一些代码将自动添加,例如“对于每一行...”
名称:添加
表:USER_ENTITY
时间:之后
事件:插入
定义:
BEGIN
INSERT INTO AnotherDB.application_user
(`user_id`,`first_name`,`last_name`,`hash`) VALUES (NEW.ID, NEW.FIRST_NAME,
NEW.LAST_NAME, md5(NEW.ID));
END
我希望插入的行是 ID、FIRST、LAST、HASH 但我得到 ID, NULL , NULL, HASH 那么造成这个问题的原因是什么?
6 月 21 日编辑: 感谢您的编辑和建议。 目标插入表的创建sql为
CREATE TABLE `application_user` (.
`user_id` varchar(256) NOT NULL,
`type` varchar(256) DEFAULT NULL,
`first_name` varchar(256) CHARACTER SET utf8 DEFAULT NULL,
`last_name` varchar(256) CHARACTER SET utf8 DEFAULT NULL,
`group_id` varchar(256) DEFAULT NULL,
`wallet_id` varchar(256) NOT NULL,
PRIMARY KEY (`user_id`).
) ENGINE=InnoDB DEFAULT CHARSET=latin1.
Keycloak 的 USER_ENTITY 表更长,但问题可能出在:
CREATE TABLE `USER_ENTITY` (
`ID` varchar(36) COLLATE utf8_unicode_ci NOT NULL,
`EMAIL` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`EMAIL_CONSTRAINT` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`EMAIL_VERIFIED` bit(1) NOT NULL DEFAULT b'0',
`ENABLED` bit(1) NOT NULL DEFAULT b'0',
`FEDERATION_LINK` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`FIRST_NAME` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
`LAST_NAME` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
`REALM_ID` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`USERNAME` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
`CREATED_TIMESTAMP` bigint(20) DEFAULT NULL,
`SERVICE_ACCOUNT_CLIENT_LINK` varchar(36) COLLATE utf8_unicode_ci DEFAULT NULL,
`NOT_BEFORE` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`),
UNIQUE KEY `UK_DYKN684SL8UP1CRFEI6ECKHD7` (`REALM_ID`,`EMAIL_CONSTRAINT`),
UNIQUE KEY `UK_RU8TT6T700S9V50BU18WS5HA6` (`REALM_ID`,`USERNAME`),
KEY `IDX_USER_EMAIL` (`EMAIL`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
我还在一个新数据库中创建了这个测试表并放入了同一个触发器,它适用于两个表:
CREATE TABLE `test` (
`ID` varchar(256) NOT NULL,
`FIRST_NAME` varchar(256) NOT NULL,
`LAST_NAME` varchar(256) NOT NULL,
`SOMETHING` varchar(256) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
问题是我不知道当 Keycloak 收到来自其适配器的注册请求时会执行什么 sql Keycloak 并且我无法重现我的表的问题。
【问题讨论】:
-
execute
SHOW CREATE TABLE AnotherDB.application_user和问题中的其他相关表格,并通过编辑将输出粘贴到问题中.. -
代码应该可以工作。请为 keycloak、application_user 和所有触发代码添加表定义以及对 keycloak 的插入。
-
感谢所有 cmets 让这一切变得更好。