无法在mysql中从columnbirthday_year创建列年龄

时间:2018-11-03 13:43:45

标签: mysql sql

因此,我有一个简单的创建表格动物,为此我假装仅通过插入birtday_year来填充年龄列。 我尝试了de getdate(),但无法使用非确定性函数,即使使用其他选项,我最终还是得到了一个简单的函数(从我的角度来看)。但是我无法完成这项任务的要求。

这是代码,也是错误之一:

create table animal
    ( nome varchar(255),
    VAT integer,
    species_name varchar(255),
     color varchar(255),
     gender varchar(255),
     birth_year integer,
     age generated always as ( 2018 - birth_year),
     primary key (nome,VAT),
     foreign key (VAT) references cliente(VAT) ,
     foreign key (species_name) references species(nome) );

---错误代码:1064。您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第8行附近使用“始终生成为(2018-birth_year),主键(nome,VAT),外来关键字”

我也尝试过:

create table animal
( nome varchar(255),
VAT integer,
species_name varchar(255),
 color varchar(255),
 gender varchar(255),
 birth_year integer,
 age  integer as ( 2018 - birth_year),
 primary key (nome,VAT),
 foreign key (VAT) references cliente(VAT) ,
 foreign key (species_name) references species(nome) );

-错误代码:3105。不允许为表“ animal”中的生成列“ age”指定值。

感谢您的帮助。 最好的问候。

1 个答案:

答案 0 :(得分:0)

在MySQL中,您需要指定类型:

create table animal (
     nome varchar(255),
     VAT integer,
     species_name varchar(255),
     color varchar(255),
     gender varchar(255),
     birth_year integer,
     age int generated always as ( 2018 - birth_year),
     primary key (nome,VAT),
     foreign key (VAT) references cliente(VAT) ,
     foreign key (species_name) references species(nome)
);

您的版本:

age  integer as ( 2018 - birth_year),

如果您的MySQL版本支持生成的列,也应该可以使用。

请注意,age的定义非常具体。理想情况下,您需要:

year(curdate()) - birth_year

或类似的东西。

MySQL不允许将诸如curdate()之类的易失函数用于生成的列。要实现此功能,您需要使用视图:

create table v_animal as
    select a.*, (year(curdate()) - birth_year) as age
    from animal;