因此,我有一个简单的创建表格动物,为此我假装仅通过插入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”指定值。
感谢您的帮助。 最好的问候。
答案 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;