SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 05.11.2011 12:45:12

MakcumOK
Участник
Зарегистрирован: 05.11.2011
Сообщений: 7

ERROR 1064

столкнулся с непонятной мне проблемой.имеется база данных,которая была написана на sqlite, решил сделать её на mysql.
но столкнулся с данной ошибкой.
всю базу описывать не буду для простоты.
имеется главная таблица аэропорт:

CREATE TABLE Airport (
    code                   integer PRIMARY KEY
                                       NOT NULL UNIQUE
                                       CHECK ( code > 0 ),
    capacityAirfield       integer    CHECK ( capacityAirfield > 0 ),
    address                CHAR( 15 )  NOT NULL UNIQUE,
    name                   CHAR( 15 )  NOT NULL,
    numberRunways          integer    CHECK ( numberRunways > 0 ),
    capacityAirportComplex integer  CHECK ( capacityAirportComplex > 0 )
);
и дочерняя к ней самолёт.в котором есть внешнее поле код аэропорта,по которому и идёт связь.

CREATE TABLE Airplane (
    code         integer    PRIMARY KEY
                             NOT NULL CHECK ( code > 0 ),
    name         CHAR( 15 )  NOT NULL,
    numberSeats  integer    NOT NULL CHECK ( numberSeats > 0 ),
    range        integer   CHECK ( range > 0 ),
    maximumSpeed integer    CHECK ( maximumSpeed > 0 ),
    codeAirport  integer    NOT NULL CHECK ( codeAirport > 0 )
                             REFERENCES Airport ( code)
);
при создании таблицы аэропорт не возникает ошибок.после создания таблицы самолёт ошибка.
скрин с ошибкой выложил


Прикрепленные файлы:
Attachment Icon error.png, Размер: 22,809 байт, Скачано: 294

Неактивен

 

#2 05.11.2011 13:01:47

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: ERROR 1064

Если используете такие слова, как range в качесте имён полей - то оборачивайте в апострофы.

Не
range        integer   CHECK ( range > 0 )
а
`range`        integer   CHECK ( `range` > 0 )

И м/п если объявляете поле primary key, то нет нужды писать not null и unique.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 05.11.2011 13:13:30

MakcumOK
Участник
Зарегистрирован: 05.11.2011
Сообщений: 7

Re: ERROR 1064

deadka написал:

Если используете такие слова, как range в качесте имён полей - то оборачивайте в апострофы.

Не
range        integer   CHECK ( range > 0 )
а
`range`        integer   CHECK ( `range` > 0 )

И м/п если объявляете поле primary key, то нет нужды писать not null и unique.

спасибо,эту ошибку отловил.зато теперь ругается на REFERENCES Airport(code)

Неактивен

 

#4 05.11.2011 13:16:57

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: ERROR 1064

объявите это поле как foreign key.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 05.11.2011 13:22:45

MakcumOK
Участник
Зарегистрирован: 05.11.2011
Сообщений: 7

Re: ERROR 1064

CREATE TABLE Airplane (
    code         integer    PRIMARY KEY CHECK ( code > 0 ),
    name         CHAR( 15 )  NOT NULL,
    numberSeats  integer    NOT NULL CHECK ( numberSeats > 0 ),
    flyRange        integer   CHECK (flyRange > 0 ),
    maximumSpeed integer    CHECK ( maximumSpeed > 0 ),
    FOREIGN KEY codeAirport REFERENCES Airport ( code)
);
вот так?
тоже выдаёт ошибку.
я уже много вариантов написания внешних ключей перепробывал.


Прикрепленные файлы:
Attachment Icon error.png, Размер: 39,717 байт, Скачано: 226

Неактивен

 

#6 05.11.2011 14:03:51

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: ERROR 1064

Так поле-то code Airport сперва объявить нужно, а потом уже делать его вторичным ключом.

CREATE TABLE Airplane (
    code         integer    PRIMARY KEY CHECK ( code > 0 ),
    codeAirport integer,
    name         CHAR( 15 )  NOT NULL,
    numberSeats  integer    NOT NULL CHECK ( numberSeats > 0 ),
    flyRange        integer   CHECK (flyRange > 0 ),
    maximumSpeed integer    CHECK ( maximumSpeed > 0 ),
    FOREIGN KEY codeAirport REFERENCES Airport ( code)
);


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 05.11.2011 14:21:37

MakcumOK
Участник
Зарегистрирован: 05.11.2011
Сообщений: 7

Re: ERROR 1064

и на это у него тоже ошибка(
на всякий случай в этом скрине привёл вывод столбцов таблицы airport.

такое ощущение что он просто не видит таблицу аэропорт.
создание базы данных производил командой create database
потом зашёл в неё при помощи use
может в этом ошибка?


Прикрепленные файлы:
Attachment Icon error.png, Размер: 20,249 байт, Скачано: 230

Неактивен

 

#8 05.11.2011 14:33:35

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: ERROR 1064

Нет, просто поле при объявлении вторичного ключа берется в скобки.

CREATE TABLE Airplane (
    code         integer    PRIMARY KEY CHECK ( code > 0 ),
    codeAirport integer,
    name         CHAR( 15 )  NOT NULL,
    numberSeats  integer    NOT NULL CHECK ( numberSeats > 0 ),
    flyRange        integer   CHECK (flyRange > 0 ),
    maximumSpeed integer    CHECK ( maximumSpeed > 0 ),
    FOREIGN KEY (codeAirport) REFERENCES Airport ( code)
);


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#9 05.11.2011 14:35:41

MakcumOK
Участник
Зарегистрирован: 05.11.2011
Сообщений: 7

Re: ERROR 1064

спасибо за помощь,вы очень помогли.

Неактивен

 

#10 05.11.2011 14:50:23

MakcumOK
Участник
Зарегистрирован: 05.11.2011
Сообщений: 7

Re: ERROR 1064

а составной внешний ключ пишется на подобии этого?
FOREIGN KEY (code,ticketNumber) REFERENCES Airplane ( code ),Passenger(ticketNumber)

вся таблица

CREATE TABLE AirplaneFlight (
    code         integer NOT NULL UNIQUE CHECK ( code > 0 ),
    ticketNumber integer NOT NULL UNIQUE CHECK ( ticketNumber > 0 ),
    PRIMARY KEY ( code, ticketNumber ),
    FOREIGN KEY (code,ticketNumber) REFERENCES Airplane ( code ),Passenger(ticketNumber) 
   
);
таблицу passenger опускаю,достаточно знать что она создана и там есть поле ticketNumber типа integer

Неактивен

 

#11 05.11.2011 14:52:44

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: ERROR 1064

Почитайте здесь.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#12 05.11.2011 15:14:04

MakcumOK
Участник
Зарегистрирован: 05.11.2011
Сообщений: 7

Re: ERROR 1064

спасибо,разобрался)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson