MySQL:来自另一个 table 列的列的默认值

MySQL: default value of column from another table column

假设您有 table USER,它在字段 USER_ID 上有主键。并且你的数据库中的每个 table 都应该包含 MODIFIED_BY 字段和实际用户的 id。我的目标是在该字段上指定默认值,该默认值等于具有适当名称的用户 ID。 F.E。您有名称为 system 的用户,并且您希望每个 table 的每条记录都在 MODIFIED_BY 字段中包含此用户的 ID。您还希望所有新记录都满足此要求。

假设您指的是数据库用户以外的其他类型的用户(例如 'registered users'),也许触发器是您问题的解决方案。使用两个触发器,一个在插入时触发,一个在更新时触发,您可以使用自定义代码指定 modified_at 列的值,例如select user_id from ... where ...

请检查下面的示例代码,它应该直接回答你的问题;希望它能解决你的问题。否则,请给我们更多信息/更多背景信息。

DELIMITER |

drop table if exists sometable
|
CREATE TABLE `sometable` (
  `somecolumn` int(11) DEFAULT NULL,
  `modified_by` int(11) DEFAULT NULL
)
|
drop table if exists registered_user
|
CREATE TABLE registered_user (
  user_id integer primary key,
  name varchar(50)
)
|
drop trigger if exists sometable_inserted
|
drop trigger if exists sometable_modified
|
CREATE TRIGGER sometable_inserted BEFORE INSERT ON sometable
FOR EACH ROW
BEGIN
SET new.modified_by := (select user_id from registered_user where name=@name);
END;
|
CREATE TRIGGER sometable_modified BEFORE UPDATE ON sometable
FOR EACH ROW
BEGIN
SET new.modified_by := (select user_id from registered_user where name=@name);
END;
|

DELIMITER ;

insert into registered_user values (5, 'joe');
insert into registered_user values (6, 'sam');

set @name='sam';
insert into sometable(somecolumn) values (1);
insert into sometable(somecolumn) values (2);
set @name='joe';
update sometable set somecolumn = 3 where somecolumn = 2;