# 1064 -У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL

Я новичок в PHP и MySQL, и у меня возникли небольшие проблемы с учебным проектом, над которым я работаю.

Всякий раз, когда я пытаюсь создать таблицу

CREATE TABLE transactions(
id int NOT NULL AUTO_INCREMENT,
location varchar(50) NOT NULL,
description varchar(50) NOT NULL,
category varchar(50) NOT NULL,
amount double(10) NOT NULL,
type varchar(6) NOT NULL, 
notes varchar(512),
receipt int(10),
)

Я получаю следующее сообщение об ошибке:

# 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с ') NOT NULL, введите varchar (6) NOT NULL, обратите внимание на varchar (512), получение int (10),' в строке 6 **

Вот некоторая информация о том, с чем я работаю

  1. Тип сервера: MySQL
  2. Версия сервера: 5.5.32 - Сервер сообщества MySQL (GPL)
  3. phpMyAdmin: 4.0.4.1, последняя стабильная версия: 4.1.7

Я потратил день на то, чтобы биться головой об стену над этим, и теперь я думаю, что пора попросить о помощи. Мне было интересно, может ли кто-нибудь сказать мне, что я делаю не так?


person tsjr63    schedule 15.02.2014    source источник
comment
В конце строки receipt стоит запятая.   -  person Gordon Linoff    schedule 15.02.2014


Ответы (5)


Убрать запятую

receipt int(10),

А также AUTO INCREMENT должен быть КЛЮЧ

double тип данных также требует точности десятичных знаков, поэтому правильный синтаксис double(10,2)

person G one    schedule 15.02.2014
comment
Этот ответ отчасти верен. Он не ответил, что вернуло сообщение об ошибке. - person Ravinder Reddy; 15.02.2014
comment
Тип данных double также требует точности десятичных знаков, поэтому правильный синтаксис - double (10,2) - person Randika Vishman; 19.02.2017

Очевидно, что здесь вам придется убрать запятую.

receipt int(10),

но настоящая проблема связана с линией

amount double(10) NOT NULL,

измените это на

amount double NOT NULL,
person Ahmed Salman Tahir    schedule 15.02.2014
comment
Это сработало для меня. Почему бы мне не дать удвоение длины? - person instanceof; 11.10.2016
comment
Прошло много лет с тех пор, как вы спросили об этом, но для потомков причина, по которой это работает, заключается в том, что синтаксис, который вы использовали для определения длины двойного значения, был неправильным. Вам нужно указать длину в формате double (10, 2), где 2 - количество десятичных знаков. Удаление длины просто заставило его использовать значение по умолчанию. - person Kallaste; 02.10.2018

В MySQL слово «тип» - это зарезервированное слово.

person ak-SE    schedule 10.05.2015

Я вижу две проблемы:

Для определений точности DOUBLE (10) требуется общее количество цифр, а также общее количество цифр после десятичной дроби:

DOUBLE (10,8) составит всего десять цифр, из которых разрешено 8 после десятичной дроби.

Кроме того, вам необходимо указать столбец идентификатора в качестве ключа:

CREATE TABLE transactions( 
id int NOT NULL AUTO_INCREMENT, 
location varchar(50) NOT NULL, 
description varchar(50) NOT NULL, 
category varchar(50) NOT NULL, 
amount double(10,9) NOT NULL, 
type varchar(6) NOT NULL,  
notes varchar(512), 
receipt int(10), 
PRIMARY KEY(id) );
person oxtub    schedule 15.02.2014

Правило 1. Вы не можете добавить новую таблицу, не указав ограничение primary key [не рекомендуется, если вы создадите ее каким-либо образом]. Итак, код:

CREATE TABLE transactions( 
id int NOT NULL AUTO_INCREMENT, 
location varchar(50) NOT NULL, 
description varchar(50) NOT NULL, 
category varchar(50) NOT NULL, 
amount double(10,9) NOT NULL, 
type varchar(6) NOT NULL,  
notes varchar(512), 
receipt int(10), 
PRIMARY KEY(id));

Правило 2: Вам не разрешается использовать ключевые слова (слова с предопределенным значением) в качестве имени поля. Здесь используется что-то вроде типа (обычно используется с типами соединения). Итак, код:

CREATE TABLE transactions( 
id int NOT NULL AUTO_INCREMENT, 
location varchar(50) NOT NULL, 
description varchar(50) NOT NULL, 
category varchar(50) NOT NULL, 
amount double(10,9) NOT NULL, 
transaction_type varchar(6) NOT NULL,  
notes varchar(512), 
receipt int(10), 
PRIMARY KEY(id));

Теперь попробуйте с этим кодом. Сначала проверьте его в пользовательском интерфейсе своей базы данных (я использую HeidiSQL, или вы также можете попробовать его на своем сервере xampp / wamp) и убедитесь, что этот код работает. Теперь удалите таблицу из своей базы данных и выполните код в своей программе. Спасибо.

person Community    schedule 17.11.2014