Не могу создать возраст столбца из columnbirthday_year в MySQL - PullRequest
0 голосов
/ 03 ноября 2018

поэтому у меня есть простое животное для создания таблицы, для которого я делаю вид, что заполняю столбец возраста, вставляя только 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, чтобы найти правильный синтаксис для использования рядом с ', сгенерированный всегда как (2018 - birth_year), первичный ключ (nome, VAT), внешний ke' в строке 8

Я пробовал также:

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. Значение, указанное для сгенерированного столбца 'age' в таблице 'animal', недопустимо.

Спасибо за помощь. С наилучшими пожеланиями.

1 Ответ

0 голосов
/ 03 ноября 2018

В 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...