Ошибка общего синтаксиса MySQL для объявления переменной от LAST_INSERT_ID () - трудно анализировать - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь установить переменную на основе идентификатора вставки вставки. Итак, я написал:

INSERT INTO person (first_name, last_name, middle_names, suffix, title)
VALUES ("Frank", "Thring", "", "", "Mr");
SET @person_frank_thring_id = LAST_INSERT_ID();

INSERT INTO address (line2, line3, postcode, state, suburb)
VALUES ("Dock 3", "22 Boundary Rd", 2088, "NSW", "Mascot");
SET @address_franks_aircraft_maintenance_id = LAST_INSERT_ID();

INSERT INTO contact (email, phone)
VALUES ("info@franks.com", "0245732552");
SET @contact_franks_aircraft_maintenance_id = LAST_INSERT_ID();

INSERT INTO maintainer (abn, address_id, contact_id, nk, name, person_id)
VALUES (73507986550, @address_franks_aircraft_maintenance_id, @contact_franks_aircraft_maintenance_id,
"c49439a4-a24a-4e1b-bc92-ebad6caf5e74", "Frank's Airplane Repairs", @person_frank_thring_id);
SET @maintainer_franks_maint_id = LAST_INSERT_ID();

INSERT INTO approved_process (nk, approval_number, description, expires, maintainer_id)
VALUES ("ee114aab-d201-498d-85a4-2b95e9df8b3d", "13226A", "Welding and Heat Treatment", "2021-05-02", @maintainer_franks_maint_id);

персона, адрес, контакт и сопровождающий - все это уже существующие таблицы. И я провел первые три вставки изолированно и проверил, что данные были вставлены в таблицы. Когда я запускаю весь блок, я получаю очень общую ошибку:

[ОШИБКА в запросе 73] В вашем синтаксисе SQL есть ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '@maintainer_franks_maint_id' в строке 2 Казнь остановлена!

РЕДАКТИРОВАТЬ - Пожалуйста, смотрите инструкции DROP и CREATE ниже:

DROP TABLE IF EXISTS address;
DROP TABLE IF EXISTS contact;
DROP TABLE IF EXISTS person;
DROP TABLE IF EXISTS maintainer;

CREATE TABLE person (
    id BIGINT NOT NULL AUTO_INCREMENT,
    first_name varchar(255),
    last_name varchar(255),
    middle_names varchar(255),
    suffix varchar(255),
    title varchar(255),
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

CREATE TABLE address (
    id BIGINT NOT NULL AUTO_INCREMENT,
    line1 varchar(255),
    line2 varchar(255),
    line3 varchar(255),
    postcode integer,
    state varchar(255),
    suburb varchar(255),
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

CREATE TABLE contact (
    id BIGINT NOT NULL AUTO_INCREMENT,
    email varchar(255),
    fax varchar(255),
    mobile varchar(255),
    phone varchar(255),
    address_id bigint,
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

CREATE TABLE maintainer (
    id BIGINT NOT NULL AUTO_INCREMENT,
    abn bigint,
    image varchar(255),
    nk varchar(255),
    name varchar(255),
    address_id bigint,
    contact_id bigint,
    person_id bigint,
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

ALTER TABLE maintainer 
ADD CONSTRAINT UK_maintainer_nk unique (nk);

ALTER TABLE maintainer 
ADD CONSTRAINT FKs7jo395jusgm3631g7w845wy4 FOREIGN KEY (address_id) REFERENCES address (id);

ALTER TABLE maintainer 
ADD CONSTRAINT FKgixmfq21peg70qtff3q4ktq1 FOREIGN KEY (contact_id) REFERENCES contact (id);

ALTER TABLE maintainer 
ADD CONSTRAINT FK86boj3163qysduc7x3a2m84mh FOREIGN KEY (person_id) REFERENCES person (id);

и добавление утвержденных + процесс:

CREATE TABLE approved_process (
    id BIGINT NOT NULL AUTO_INCREMENT,
    nk varchar(255),
    approval_number varchar(255),
    description varchar(255),
    expires date,
    maintainer_id bigint,
    subcontractor_id bigint,
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

Надеюсь, это прояснит ситуацию.

1 Ответ

0 голосов
/ 08 июля 2018

Извините всех, похоже, ошибка пользователя на каком-то уровне. Было две проблемы: одна была странным невидимым символом в начале строки INSERT INTO approved_process, а также, по какой-то причине, Sequel Pro не смог определить разницу между @franks в значении электронной почты и @franks в начале объявление переменной.

...