gpt4 book ai didi

Mysql,在触发器中插入不应该插入NULL值

转载 作者:行者123 更新时间:2023-11-29 15:52:45 30 4
gpt4 key购买 nike

逻辑是当在Keycloak用户表中插入一行时,在另一个数据库的表中添加一行。(我猜很简单)发生的情况是只有 Key 有值,其余的都插入了 NULL(它们确实有值,在触发发生之前它们都已正确插入到 KeyCloak 表中)

凯撒也有同样的问题,但他的解决方案不起作用。 MySQL "After Insert" Trigger keeps inserting nulls

我正在使用 PHPMyAdmin for Mysql一些代码将自动添加,例如“对于每一行...”

名称:添加
表: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 向该表添加一行时,它会首先尝试添加仅包含 ID 的行(以测试 UUID 冲突?),然后更新到具有完整上下文的该行。

因此该触发器在逻辑上是正确的,但它只会取回主键,因为插入点没有其他内容。

关于Mysql,在触发器中插入不应该插入NULL值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56685079/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com