Mysql

不知道為什麼 MySQL 不創建具有主鍵約束的表

  • March 29, 2016

我不明白為什麼 MySQL 顯示此錯誤:

#1064 - 您的 SQL 語法有錯誤;檢查與您的 MySQL 伺服器版本相對應的手冊,以在第 1 行的 ‘CONSTRAINT (uname_pk) PRIMARY KEY, pwd Varchar(50), fname Varchar(50), lname ’ 附近使用正確的語法

這是查詢:

創建表 uinfo_master(uname Varchar(50) NOT NULL CONSTRAINT (uname_pk) PRIMARY KEY,
密碼 Varchar(50),
fname Varchar(50),
lname Varchar(50),
電子郵件 Varchar(50),
phno Varchar(50),
地址 Varchar(200),
城市 Varchar(50),
狀態 Varchar(50),
銷 Varchar(50),
國家 Varchar(50));

我的查詢有什麼問題,請指出我的錯誤。

正確的語法,對你的風格的改變最小:

create table uinfo_master(
uname Varchar(50) NOT NULL, 
CONSTRAINT uname_pk PRIMARY KEY (uname),
pwd Varchar(50),
fname Varchar(50),
lname Varchar(50),
email Varchar(50),
phno Varchar(50),
address Varchar(200),
city Varchar(50),
state Varchar(50),
pin Varchar(50),
country Varchar(50));

您不能CONSTRAINT在與列定義相同的行上使用 PK 的語法。

請參閱CREATE TABLE語法:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
   { LIKE old_tbl_name | (LIKE old_tbl_name) }

create_definition:
   col_name column_definition
 | [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)
     [index_option] ...

定義列本身是在col_name column_definition語法的版本上完成的。後面的|在文件中代表 OR,這意味著替代的 CREATE TABLE(逗號分隔)“行”可以使用以 開頭的語法CONSTRAINT,它可以選擇包含一個“符號”(這就是括號的含義:可選),然後PRIMARY KEY是可選的一個index_type,然後是列本身,在括號中。

從外觀上看,你試圖在一條線上完成所有這些,這就是你的問題所在。您可以在定義列的行上將列聲明為 PRIMARY KEY,但不能使用 CONSTRAINT 語法來執行此操作。

引用自:https://dba.stackexchange.com/questions/133578