web-dev-qa-db-fra.com

# 1064 -Vous avez une erreur dans votre syntaxe SQL; consultez le manuel correspondant à la version de votre serveur MySQL

Je suis nouveau sur PHP et MySQL et j'ai eu un petit problème avec un projet d'apprentissage sur lequel je travaille.

Chaque fois que j'essaie de créer une table

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),
)

Je reçois le message d'erreur suivant:

# 1064 - Vous avez une erreur dans votre syntaxe SQL; Consultez le manuel correspondant à la version de votre serveur MySQL pour connaître la syntaxe à utiliser près de ') NOT NULL, tapez varchar (6) NON NULL, note varchar (512), reçu int (10), à la ligne 6 **

Voici quelques informations sur ce avec quoi je travaille

  1. Type de serveur: MySQL 
  2. Version du serveur: 5.5.32 - MySQL Community Server (GPL)
  3. phpMyAdmin: 4.0.4.1, dernière version stable: 4.1.7

J'ai passé une journée à me cogner la tête contre le mur et je pense qu'il est temps de demander de l'aide. Je me demandais si quelqu'un pouvait me dire ce que je faisais mal?

9
tsjr63

Supprimer la virgule

receipt int(10),

Et aussi AUTO INCREMENT devrait être un CLÉ

Le type de données double requiert également la précision des décimales; la syntaxe correcte est donc double(10,2)

8
G one

Une chose évidente est que vous devrez enlever la virgule ici

receipt int(10),

mais le problème est en raison de la ligne

amount double(10) NOT NULL,

changez le en

amount double NOT NULL,
4
Ahmed Salman Tahir

Dans MySQL, le mot "type" est un mot réservé.

1
ak-SE

Je vois deux problèmes:

Les définitions de précision DOUBLE (10) nécessitent un nombre total de chiffres, ainsi qu'un nombre total de chiffres après la décimale:

DOUBLE (10,8) Aurait un total de dix chiffres, 8 étant autorisés après la virgule.

En outre, vous devrez spécifier votre colonne id en tant que clé:

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) );
0
oxtub

Règle 1: Vous ne pouvez pas ajouter une nouvelle table sans spécifier la contrainte primary key [ce n’est pas une bonne pratique si vous la créez en quelque sorte] . Ainsi, le code:

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));

Règle 2: Vous n'êtes pas autorisé à utiliser les mots-clés (mots avec une signification prédéfinie) comme nom de champ . Ici, type est similaire à celui utilisé (couramment utilisé avec Join Types) .Alors le code:

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));

Maintenant, essayez avec ce code . Commencez par le vérifier dans votre interface utilisateur de base de données (je suis sous HeidiSQL, ou vous pouvez l’essayer également sur votre serveur xampp/wamp) et assurez-vous que ce code fonctionne. Supprimez maintenant la table de votre base de données et exécutez le code dans votre programme ..__ Merci.

0
Ataboy Josef