Error in CREATE table statement in MySQL [duplicate] - mysql

This question already has answers here:
Error creating table: You have an error in your SQL syntax near 'order( order_id INT UNSIGNED NOT NULL AUTO_INCREMENT, user_id ' at line 1 [duplicate]
(2 answers)
Closed 5 years ago.
I wanted to create a table ORDER in database called Projects and which has another table CUSTOMER.
Here are the statements I used :
mysql> Create Table ORDER(
-> OrderNo Integer(5) Primary Key,
-> CustNo Integer(7),
-> ItemName Varchar(30),
-> Qty Integer(5),
-> Price Decimal(6,2) Not Null,
-> Foreign Key (CustNo) references CUSTOMER(CustID));
but I am getting this error :
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 'ORDER(
OrderNo Integer(5) Primary Key,
CustNo Integer(7),
ItemName Varchar(30),
' at line 1
What is wrong here?

As the comments mentioned, ORDER among others are reserved in MySQL. The complete list is in the documentation here.
You have three options, either to change the table name (my personal recommendation), escape the name, or qualify the name with the database such as: CREATE TABLE mydb.ORDER ..... If you do choose to stick with a keyword named table (or column), you run the risk of confusion later if you forget to escape it in another query. If this is tied to customers, perhaps it could be the 'CustomerOrder' table.
CREATE TABLE `ORDER`(
OrderNo Integer(5) Primary Key,
CustNo Integer(7),
ItemName Varchar(30),
Qty Integer(5),
Price Decimal(6,2) Not Null,
Foreign Key (CustNo) references CUSTOMER(CustID)
);
Given that you have a primary key, you may also want it to auto increment so you don't have to create the keys manually.
CREATE TABLE `ORDER`(
OrderNo Integer(5) Primary Key AUTO_INCREMENT,
CustNo Integer(7),
ItemName Varchar(30),
Qty Integer(5),
Price Decimal(6,2) Not Null,
Foreign Key (CustNo) references CUSTOMER(CustID)
);

Related

[42000][1064] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use [duplicate]

This question already has answers here:
How do I escape reserved words used as column names? MySQL/Create Table
(4 answers)
Closed 3 months ago.
I have created tables like before, with the given primary and foreign keys. However I get this error when I try to create a new table with the code below.
create table Order (
oid int(255),
sid int(255),
sku int(255),
quantity int(255),
foreign key (sid) references Suppliers(sid),
foreign key (sku) references Parts(sku),
primary key(sid,sku)
)
and I have created Suppliers and Parts tables with the code below
create table Parts(
sku int(255) auto_increment primary key,
pname varchar(255),
stock_level int(255),
color varchar(255)
)
create table Suppliers (
sid int(255) auto_increment primary key,
sname varchar(255),
city varchar(255),
street varchar(255)
)
sid and sku already exist in their respective tables. I do not understand why I get such an error.
The complete output is:
[42000][1064] 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 'Order( oid int (255), sid int (255), sku int(255), quantity
i' at line 1
I solved the problem with creating the table with the name "Orders" instead of just Order. I think it got confused with the order by keyword hence the syntax error.
I suppose it chokes on INT(255).
INT is a signed four-byte integer. Its max positive value is 2147483647.
So, just use INT and not INT(255), and it will work.
Check this page on the topic, for example:
https://blog.devart.com/mysql-int-data-type.html#what_is_mysql_integer

mySQL: Error when attempting to create a Foreign Key [duplicate]

This question already has answers here:
ERROR 1452: Cannot add or update a child row: a foreign key constraint fails
(28 answers)
Closed 6 years ago.
I am trying to create two tables that share a common column. These tables are currently empty as I would like to add the data after all are linked appropriately. I can't seem to get to the bottom of the syntax error. I can create the table 'publisher' with no issues but can't reference it's primary key 'publishername' as a foreign key to the next table.
I get the dreaded E
RROR 1064 "near 'references publisher(publishername))' at line 1".
I'm lost because I've used a similar syntax previously to do this. Much thanks in advance!
create table publisher (
publishername varchar(30) primary key,
city varchar(15),
country varchar(10),
telephone varchar(15),
yearfounded int(4));
create table book (
booknumber int(3) primary key,
bookname varchar(50),
publicationyear int(4),
pages int(4),
publishername varchar references publisher(publishername));
It seems like you didn't give length of the foreign key. This works fine . You can check it here.
create table publisher (
publishername varchar(30) primary key,
city varchar(15),
country varchar(10),
telephone varchar(15),
yearfounded int(4));
create table book (
booknumber int(3) primary key,
bookname varchar(50),
publicationyear int(4),
pages int(4),
publishername varchar(30) references publisher(publishername));

MYSQL Error 1064: Can't seem to find the error exactly [duplicate]

This question already has answers here:
Error creating table: You have an error in your SQL syntax near 'order( order_id INT UNSIGNED NOT NULL AUTO_INCREMENT, user_id ' at line 1 [duplicate]
(2 answers)
Closed 5 years ago.
Hello I'm new to SQL and coding in general, and I'm seeing an error in my code and I can't seem to figure it out.
DROP TABLE IF EXISTS record, artist;
CREATE TABLE artist (
id INT AUTO_INCREMENT,
first_name VARCHAR(50),
last_name VARCHAR(50),
PRIMARY KEY (id)
);
CREATE TABLE record (
id INT AUTO_INCREMENT,
title VARCHAR(50),
artist_id INT,
genre TINYTEXT,
year YEAR(4),
price DECIMAL(10, 2) unsigned,
PRIMARY KEY (id),
FOREIGN KEY (artist_id)
REFERENCES artist (id)
);
CREATE TABLE order (
id INT AUTO_INCREMENT,
record_id INT,
quantity INT unsigned,
total DECIMAL(10, 2) unsigned,
PRIMARY KEY (id),
FOREIGN KEY (record_id)
REFERENCES record (id)
);
The error that shows up is:
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 'order (
id INT AUTO_INCREMENT,
record_id INT,
quantity INT unsigned,
total D' at line 1
I know it's telling me exactly where the error is, and I know it's a syntax error, but for some reason I just can't seem to understand where or what the error is exactly. I've tried adding 'order' with the DROP TABLE IF EXISTS but that just comes up with more errors. I know it's probably something really obvious so I'm sorry for asking but I'm so lost.
order is a reserved word in SQL. You could either protect it by surrounding it with forward quotes:
CREATE TABLE `order` (
id INT AUTO_INCREMENT,
record_id INT,
quantity INT unsigned,
total DECIMAL(10, 2) unsigned,
PRIMARY KEY (id),
FOREIGN KEY (record_id)
REFERENCES record (id)
);
or better yet, just find a name that ins't a reserved word, e.g., orders:
CREATE TABLE orders (
id INT AUTO_INCREMENT,
record_id INT,
quantity INT unsigned,
total DECIMAL(10, 2) unsigned,
PRIMARY KEY (id),
FOREIGN KEY (record_id)
REFERENCES record (id)
);

#1064 - 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

Hello I am new to sql and only really using it for JDBC, i am trying to create a database call SuperMarket and create the tables with this sql script
CREATE TABLE item (
ID INT NOT NULL CONSTRAINT pk_item PRIMARY KEY,
name VARCHAR(30),
price DOUBLE PRECISION,
quantity INT
);
CREATE TABLE customer (
ID INT NOT NULL CONSTRAINT pk_customer PRIMARY KEY,
name VARCHAR(30)
);
CREATE TABLE employee (
ID INT NOT NULL CONSTRAINT pk_employee PRIMARY KEY,
name VARCHAR(30),
password VARCHAR(15)
);
CREATE TABLE trans (
ID INT NOT NULL CONSTRAINT pk_transaction PRIMARY KEY,
employee INT,
customer INT,
is_open INT
);
CREATE TABLE acquisition (
ID INT NOT NULL CONSTRAINT pk_acquisition PRIMARY KEY,
trans INT,
item INT,
quantity INT
);
When i try to import it in phpMyAdmin using xampp i get the following error:
Number 1064 - 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 'CONSTRAINT pk_item PRIMARY KEY,
name VARCHAR(30),
price DOUBLE PRECISION,
qua' at line 2
I still cannot find any syntax error can anyone tell me what I am doing wrong?
Try this:
CREATE TABLE item (
ID INT NOT NULL,
name VARCHAR(30),
price DOUBLE PRECISION,
quantity INT,
CONSTRAINT pk_item PRIMARY KEY (ID)
);
Your CONSTRAINT keyword was in the wrong spot. Same goes for the rest of the tables as well.
If you simply want ID to be the primary key, you can do:
CREATE TABLE item (
ID INT NOT NULL PRIMARY KEY,
name VARCHAR(30),
price DOUBLE PRECISION,
quantity INT
);

Why is my SQL statement throwing a syntax error?

I tried to create a table like so:
CREATE TABLE Persons
(
id int PRIMARY KEY AUTOINCREMENT,
metalId varchar(255),
colorId varchar(255)
)
but it get an error:
1064 - 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 'AUTOINCREMENT, metalId varchar(255), colorId varchar(255) )' at
line 3
Anyone know what's wrong with my code?
You missed an underscore. AUTOINCREMENT should be AUTO_INCREMENT.
Using AUTO_INCREMENT
Try
CREATE TABLE Persons
(
id int PRIMARY KEY AUTO_INCREMENT,
metalId varchar(255),
colorId varchar(255)
)
Here is main source.
Syntax for MySQL
The following SQL statement defines the "P_Id" column to be an
auto-increment primary key field in the "Persons" table:
CREATE TABLE Persons
(
P_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)
MySQL uses the AUTO_INCREMENT keyword to perform an auto-increment
feature.
By default, the starting value for AUTO_INCREMENT is 1, and it will
increment by 1 for each new record.
To let the AUTO_INCREMENT sequence start with another value, use the
following SQL statement: ALTER TABLE Persons AUTO_INCREMENT=100