2013-08-27 2 views
1

Я создал следующий скрипт, чтобы создать свою базу данных MySQL:MySQL ошибка CREATE TABLE с колонкой BOOL

CREATE DATABASE IF NOT EXISTS magicc_hat; 
USE magicc_hat; 

CREATE TABLE people (
    personID INT NOT NULL AUTO_INCREMENT, 
    firstName VARCHAR(45) NOT NULL, 
    lastName VARCHAR(45), 
    archived BOOL NOT NULL DEFAULT '0', 

    PRIMARY KEY (personID) 
); 

CREATE TABLE categories (
    categoryID INT NOT NULL AUTO_INCREMENT, 
    categoryName VARCHAR(45) NOT NULL, 
    description TEXT, 
    archived BOOL NOT NULL DEFAULT '0', 

    PRIMARY KEY (categoryID) 
); 

CREATE TABLE homes (
    homeID INT NOT NULL AUTO_INCREMENT, 
    homeName VARCHAR(45) NOT NULL, 
    notes TEXT, 
    archived BOOL NOT NULL DEFAULT '0', 

    PRIMARY KEY (homeID) 
}; 

CREATE TABLE items (
    itemID INT NOT NULL AUTO_INCREMENT, 
    itemName VARCHAR(100) NOT NULL, 
    identifier VARCHAR(100), 
    quantity INT NOT NULL, 
    categoryID INT NOT NULL, 
    homeID INT NOT NULL, 
    itemStatus ENUM('normal', 'broken', 'missing') NOT NULL DEFAULT 'normal', 
    description TEXT, 
    image VARCHAR(45), 
    notes TEXT, 
    archived BOOL NOT NULL DEFAULT '0', 

    PRIMARY KEY (itemID), 
    FOREIGN KEY (categoryID) REFERENCES categories(categoryID), 
    FOREIGN KEY (homeID) REFERENCES homes(homeID) 
}; 

CREATE TABLE projects (
    projectID INT NOT NULL AUTO_INCREMENT, 
    projectName VARCHAR(45) NOT NULL, 
    description TEXT, 
    archived BOOL NOT NULL DEFAULT '0', 

    PRIMARY KEY (projectID) 
); 

CREATE TABLE checkouts (
    checkoutID INT NOT NULL AUTO_INCREMENT, 
    itemID INT NOT NULL, 
    personID INT NOT NULL, 
    projectID INT, 
    quantity INT NOT NULL, 
    outDateTime DATETIME, 
    inDateTime DATETIME, 
    outNotes TEXT, 
    inNotes TEXT, 
    checkedIn BOOL, 
    archived BOOL NOT NULL DEFAULT '0', 

    PRIMARY KEY (checkoutID), 
    FOREIGN KEY (itemID) REFERENCES items(itemID), 
    FOREIGN KEY (personID) REFERENCES people(personID), 
    FOREIGN KEY (projectID) REFERENCES projects(projectID) 
); 

Однако, когда я запускаю этот скрипт я получаю следующие сообщения об ошибках:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '}' at line 8 

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '}' at line 17 

ERROR 1215 (HY000): Cannot add foreign key constraint 

Я подозреваю, что это имеет какое-то отношение к использованию типа данных bool, поскольку это то, что происходит в строках 8 и 17; однако я не смог найти какие-либо решения этой проблемы в Интернете. Кто-нибудь может понять, что может вызвать проблему? Я запускаю MySQL 5.6.11 на моей локальной машине Windows.

Спасибо!

+2

Считаете ли вы, что вы используете '}', где вы должны использовать ')'? – Phil

+0

Ах, немой синтаксическая ошибка. '' '' И '}' выглядят почти идентичными в текстовом редакторе, который я использовал, поэтому я его не поймал. Спасибо, что заметили! Теперь запрос работает отлично. – dpkoch

+0

Не стесняйтесь принять один из ответов ниже. [This one] (http://stackoverflow.com/a/18457338/283366) был первым – Phil

ответ

7

Персонажи должны быть одинаковыми. Используйте круглые скобки для обоих

CREATE TABLE homes (

}; 

В этом случае: Он показывает вам неправильный характер в сообщении об ошибке:

check the manual that corresponds to your MySQL server version for the right 
syntax to use near '}' at line 8 
0

Попробуйте это, я проверил его и создал базу данных успешно. Проблемы были вызваны тем, что открывающие и закрывающие скобки не совпадают друг с другом.

CREATE DATABASE IF NOT EXISTS magicc_hat; 
USE magicc_hat; 

CREATE TABLE people (
    personID INT NOT NULL AUTO_INCREMENT, 
    firstName VARCHAR(45) NOT NULL, 
    lastName VARCHAR(45), 
    archived BOOL NOT NULL DEFAULT '0', 

    PRIMARY KEY (personID) 
); 

CREATE TABLE categories (
    categoryID INT NOT NULL AUTO_INCREMENT, 
    categoryName VARCHAR(45) NOT NULL, 
    description TEXT, 
    archived BOOL NOT NULL DEFAULT '0', 

    PRIMARY KEY (categoryID) 
); 

CREATE TABLE homes (
    homeID INT NOT NULL AUTO_INCREMENT, 
    homeName VARCHAR(45) NOT NULL, 
    notes TEXT, 
    archived BOOL NOT NULL DEFAULT '0', 

    PRIMARY KEY (homeID) 
); 

CREATE TABLE items (
    itemID INT NOT NULL AUTO_INCREMENT, 
    itemName VARCHAR(100) NOT NULL, 
    identifier VARCHAR(100), 
    quantity INT NOT NULL, 
    categoryID INT NOT NULL, 
    homeID INT NOT NULL, 
    itemStatus ENUM('normal', 'broken', 'missing') NOT NULL DEFAULT 'normal', 
    description TEXT, 
    image VARCHAR(45), 
    notes TEXT, 
    archived BOOL NOT NULL DEFAULT '0', 

    PRIMARY KEY (itemID), 
    FOREIGN KEY (categoryID) REFERENCES categories(categoryID), 
    FOREIGN KEY (homeID) REFERENCES homes(homeID) 
); 

CREATE TABLE projects (
    projectID INT NOT NULL AUTO_INCREMENT, 
    projectName VARCHAR(45) NOT NULL, 
    description TEXT, 
    archived BOOL NOT NULL DEFAULT '0', 

    PRIMARY KEY (projectID) 
); 

CREATE TABLE checkouts (
    checkoutID INT NOT NULL AUTO_INCREMENT, 
    itemID INT NOT NULL, 
    personID INT NOT NULL, 
    projectID INT, 
    quantity INT NOT NULL, 
    outDateTime DATETIME, 
    inDateTime DATETIME, 
    outNotes TEXT, 
    inNotes TEXT, 
    checkedIn BOOL, 
    archived BOOL NOT NULL DEFAULT '0', 

    PRIMARY KEY (checkoutID), 
    FOREIGN KEY (itemID) REFERENCES items(itemID), 
    FOREIGN KEY (personID) REFERENCES people(personID), 
    FOREIGN KEY (projectID) REFERENCES projects(projectID) 
); 
0

у вас есть 2 ошибки синтаксиса, как показано ниже ... А поскольку ниже таблицы не создаются, вы столкнулись с иностранной ошибки ключ .. пробег ниже SQLs ваша проблема будет решена :)

CREATE TABLE homes (
    homeID INT NOT NULL AUTO_INCREMENT, 
    homeName VARCHAR(45) NOT NULL, 
    notes TEXT, 
    archived BOOL NOT NULL DEFAULT '0', 

    PRIMARY KEY (homeID) 
); /* previously }; */ 

CREATE TABLE items (
    itemID INT NOT NULL AUTO_INCREMENT, 
    itemName VARCHAR(100) NOT NULL, 
    identifier VARCHAR(100), 
    quantity INT NOT NULL, 
    categoryID INT NOT NULL, 
    homeID INT NOT NULL, 
    itemStatus ENUM('normal', 'broken', 'missing') NOT NULL DEFAULT 'normal', 
    description TEXT, 
    image VARCHAR(45), 
    notes TEXT, 
    archived BOOL NOT NULL DEFAULT '0', 

    PRIMARY KEY (itemID), 
    FOREIGN KEY (categoryID) REFERENCES categories(categoryID), 
    FOREIGN KEY (homeID) REFERENCES homes(homeID) 
); /* previously }; */ 
Смежные вопросы