Ошибка SQL 1064 (42000) Синтаксическая ошибка - PullRequest
0 голосов
/ 25 февраля 2012
CREATE TABLE IF NOT EXISTS message(
  id INT NOT NULL auto_increment,
  userid INT NOT NULL,
  date Date NOT NULL,
  text varchar(255) NOT NULL,
  PRIMARY KEY  ('id')
  FOREIGN KEY ('userid') REFERENCES users('id'));

Мне просто интересно, может ли кто-нибудь помочь мне определить синтаксическую ошибку, поскольку я не могу создать таблицу.

Ответы [ 5 ]

5 голосов
/ 25 февраля 2012

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

Обновление: я думаю, это должно быть

CREATE TABLE IF NOT EXISTS message (
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  userid INT NOT NULL,
  date Date NOT NULL,
  text varchar(255) NOT NULL,
  FOREIGN KEY (userid) REFERENCES users(id));
0 голосов
/ 07 сентября 2016

Попробуйте изменить имя таблицы, возможно, сообщение является встроенным ключевым словом в MySQL.

Обновление к этому: я думаю, это должно быть

CREATE TABLE IF NOT EXISTS myMessage (
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  userid INT NOT NULL,
  date Date NOT NULL,
  text varchar(255) NOT NULL,
  FOREIGN KEY (userid) REFERENCES users(id));
0 голосов
/ 25 февраля 2012

Ваш запрос должен выглядеть следующим образом:

CREATE TABLE IF NOT EXISTS message(
  id INT NOT NULL auto_increment,
  userid INT NOT NULL,
  date Date NOT NULL,
  text varchar(255) NOT NULL,
  PRIMARY KEY  ('id'),
  FOREIGN KEY ('userid') REFERENCES users('id')
) Engine=InnoDB;

Обратите внимание на , после PRIMARY KEY ('id').

Маленький трюк

Не нужно указыватьвнешние ключи в определениях таблиц.Это практично, когда вы делаете это следующим образом (поскольку dump может экспортировать таблицы для того, чтобы при создании / вставке внешних ключей не получалось):

CREATE TABLE 1; -- With references to table 2
CREATE TABLE 2;
INSERT INTO 1;
INSERT INTO 2;
ALTER TABLE 1 ADD FOREIGN KEY (user_id) REFERENCES 2 2(id);
0 голосов
/ 25 февраля 2012

Ваш запрос должен быть таким, как показано ниже

CREATE TABLE IF NOT EXISTS message (
  id INT auto_increment PRIMARY KEY,
  userid INT NOT NULL,
  date Date NOT NULL,
  text varchar(255) NOT NULL,
  FOREIGN KEY (userid) REFERENCES users(id));

При условии, что у вас есть id в качестве первичного ключа в таблице users.

CREATE TABLE users (id INT PRIMARY KEY)
0 голосов
/ 25 февраля 2012

Я предполагаю, что это для MS SQL Server?Если вы получаете MS SQL Server Studio, вы можете написать сценарий, который дает вам представление:

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[message]') AND type in (N'U'))
CREATE TABLE message(
id INT IDENTITY NOT NULL,
userid INT NOT NULL,
date Date NOT NULL,
text varchar(255) NOT NULL,
PRIMARY KEY  (id),
FOREIGN KEY (userid) REFERENCES users(id))
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...