mysql - MySQL 表中的错误 "generated Column cannot refer to auto-increment column "

标签 mysql sql database

我正在尝试在 MySQL 中创建一个表,其 idbigint not null auto_increment 。这是MySQL表的结构

create table test_profile (
  id bigint not null auto_increment,
  type integer not null,
  type2 integer generated always as (case when type = 0 then id else type end),
  primary key (id),
  constraint fk_profile_to foreign key(test_profile_1) references test_profile_1(id) on delete cascade
);

我在 MySQL workbench 上运行这个表,我收到以下错误

Error Code: 3109. Generated column 'type2' cannot refer to auto-increment column.

有解决此类错误的想法吗?任何替代方法或建议?

最佳答案

改用触发器来满足您的要求,因为生成的列不能引用自动增量列。这是执行此类任务的一个很好的选择。下面是插入触发器,我认为您还必须创建 AFTER UPDATE 触发器

DELIMITER $$
CREATE TRIGGER TRGUpdateTestProfile
    AFTER INSERT ON test_profile
    FOR EACH ROW 
BEGIN  
    UPDATE test_profile SET Type2 = case when type = 0 then new.id else new.type end 
    WHERE id = new.id;
END$$
DELIMITER;

关于mysql - MySQL 表中的错误 "generated Column cannot refer to auto-increment column ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47648923/

相关文章:

mysql - 具有限制和偏移量的 PDO 不起作用....所以

MySQL 通过列的 SUM 选择 LIMIT

mysql - 在 MySQL 中创建结构

php - 如何在同一台服务器上内部连接两个不同 mysql 数据库中的两个表?

html - Perl - 将用户输入的 cgi 表单数据传递给 perl 程序,然后将其放入 mysql 数据库

php - 上一个 - mysql 中的下一个查询

MySQL - 根据一列中的重复项满足另一列中的要求进行选择

php - 远程访问WAMP服务器

mysql - 如何修复 MariaDB 的高内存使用率?

mysql - 在 MySQL 中使用 IF(不是函数)