我有一个表,其中有一ID
列(主键自动递增)和一列名称。
我想根据格式生成的 ID 列值在插入时自动填充名称列的值
<IDColumnValue>_School
我知道有两种方法可以做到这一点
- 使用触发器
- 先插入行,然后根据插入的行 id 列值更新其列值
但实际上我想让这个字段不可为空,但要使用第二个选项,我必须让它可以为空。
在插入行时是否有任何直接的方法可以做到这一点,以便我可以使该字段不可为空?
我有一个表,其中有一ID
列(主键自动递增)和一列名称。
我想根据格式生成的 ID 列值在插入时自动填充名称列的值
<IDColumnValue>_School
我知道有两种方法可以做到这一点
但实际上我想让这个字段不可为空,但要使用第二个选项,我必须让它可以为空。
在插入行时是否有任何直接的方法可以做到这一点,以便我可以使该字段不可为空?
正如我在评论中所说,您可以为该name
列使用临时值。您可以使用如下请求:
INSERT INTO `table` VALUES('', 'name') /*let's assume name is the real name you want to insert*/
我不确定如何使用触发器,但你可能想写这样的东西:
delimiter #
CREATE TRIGGER update_name_after_insert INSERT ON `table`
for each row
begin
update `table` set name = CONCAT_WS("_", id, name)
end#
它适用于 firebird,但我认为它必须适用于 MySQL,因为 MySQL 有new/old
运算符。带有字段 B 和 C(非空)的表 XYZ 的波纹管触发器。
CREATE OR ALTER trigger xyz_bi0 for xyz
active before insert position 0
AS
begin
new.c=new.b||' some text';--this construction must work in MySQL
end