0

これは私がこれまでに持っているMySQLコードです:

CREATE DATABASE bankbase;

USE bankbase;

CREATE TABLE clienttable(
ClientID SMALLINT(15) NOT NULL DEFAULT 0,
ClientFirstName VARCHAR(30) NOT NULL DEFAULT "first name",
ClientLastName VARCHAR(30) NOT NULL DEFAULT "last name",
ClientPhone CHAR(10) NOT NULL, ClientEmail 

TINYTEXT(30) NULL,
ClientAddress TINYTEXT(128) NOT NULL,
PRIMARYKEY(ClientID)
);

CREATE TABLE branchtable(
BranchID SMALLINT(15) NOT NULL DEFAULT 0,
BranchCity TINYTEXT(30) NOT NULL DEFAULT city, 

BranchManagerFName VARCHAR(30) NULL DEFAULT "Branch Manager's First Name",
BranchManagerLName VARCHAR(30) NULL 

DEFAULT "Branch Manager's LAst Name",
BranchPhone CHAR(10) NOT NULL,
BranchEmail TINYTEXT(30) NULL DEFAULT @bank.com,
PRIMARYKEY(BranchID)
);

CREATE TABLE transactiontable(
TypeID SMALLINT(15) NOT NULL DEFAULT 0,
Type ENUM('CHEQUING','SAVINGS') NOT NULL,
TransAmount DECIMAL NOT NULL,
TransDate TIMESTAMP NOT NULL,
Balance DOUBLE NOT NULL,
PRIMARYKEY(TypeID)
);

コマンドラインで MySQL でこのコードを実行すると、次のエラーが表示されます。

エラー 1064 (42000): SQL 構文にエラーがあります。7 行目の '(TypeID) )' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

NULL/NOT NULL を除外して、さまざまなテスト テーブルを作成しようとしましたが、何も機能していないようです。どんな助けでも大歓迎です!

4

1 に答える 1

10

元のスクリプトで見られる問題は次のとおりです。

  1. BLOB列に値をTEXT含めることはできませんDEFAULT

  2. TINYTEXTはと同じVARCHAR(255)であるため、フィールドの最大長を宣言することはできません。これは、TINYTEXTフィールドがすでに暗黙指定されているためです。

  3. 単語の間にスペースが必要ですPRIMARYKEY。する必要がありますPRIMARY KEY

  4. 最後に、それ自体は問題ではありませんが、最初のCREATE TABLEステートメントでは、間隔が奇数になっています。行を次のように変更ClientEmailすると、読みやすくなります。

ずっといい:

ClientPhone CHAR(10) NOT NULL,
ClientEmail TINYTEXT NOT NULL,

詳細については、MySQLのドキュメントを参照してください。これらすべての修正の後、これらは機能するMySQLクエリです。

CREATE DATABASE bankbase;
USE bankbase;
    
CREATE TABLE clienttable(
ClientID SMALLINT(15) NOT NULL DEFAULT 0,
ClientFirstName VARCHAR(30) NOT NULL DEFAULT "first name",
ClientLastName VARCHAR(30) NOT NULL DEFAULT "last name",
ClientPhone CHAR(10) NOT NULL,
ClientEmail TINYTEXT NULL,
ClientAddress TINYTEXT NOT NULL,
PRIMARY KEY(ClientID)
);

CREATE TABLE branchtable(
BranchID SMALLINT(15) NOT NULL DEFAULT 0,
BranchCity TINYTEXT NOT NULL,
BranchManagerFName VARCHAR(30) NULL DEFAULT "Branch Manager's First Name", 
BranchManagerLName VARCHAR(30) NULL DEFAULT "Branch Manager's LAst Name",
BranchPhone CHAR(10) NOT NULL,
BranchEmail TINYTEXT NULL,
PRIMARY KEY(BranchID)
);
    
CREATE TABLE transactiontable(
TypeID SMALLINT(15) NOT NULL DEFAULT 0,
Type ENUM('CHEQUING','SAVINGS') NOT NULL,
TransAmount DECIMAL NOT NULL,
TransDate TIMESTAMP NOT NULL,
Balance DOUBLE NOT NULL,
PRIMARY KEY(TypeID)
);

このSQLフィドルをクリックBuild Schemaすると、機能することがわかります。

このようなエラーを系統的に修正する方法に関するもう少しの情報

CREATE TABLE系統だった場合、これらの問題は、特にステートメントを使用すると簡単に解決できます。たとえば、最初のCREATE TABLEステートメントをデバッグするときは、列の宣言を1つずつ移動します。

最初の列だけでテーブルを作成してみてください。

CREATE TABLE clienttable(
ClientID SMALLINT(15) NOT NULL DEFAULT 0);

そのコードは機能するので、エラーをスローするものを追加するまで、テーブルを削除し、列を1つずつ追加します。

DROP TABLE clienttable;
CREATE TABLE clienttable(
ClientID SMALLINT(15) NOT NULL DEFAULT 0,
ClientFirstName VARCHAR(30) NOT NULL DEFAULT "first name",
ClientLastName VARCHAR(30) NOT NULL DEFAULT "last name",
ClientPhone CHAR(10) NOT NULL, ClientEmail 

TINYTEXT(30) NULL);

あなたが尋ねたエラーが発生します:

エラー1064(42000):SQL構文にエラーがあります。7行目の「(30)NULL)」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

これで、どの行にエラーがあるかが正確にわかります。私は時々このように書かれたコードを見たことがあります(これは前の例と同じコードです):

CREATE TABLE clienttable(
ClientID
SMALLINT(15) 
NOT NULL 
DEFAULT 0,
ClientFirstName 
VARCHAR(30) 
NOT NULL 
DEFAULT "first name",
ClientLastName 
VARCHAR(30) 
NOT NULL 
DEFAULT "last name",
ClientPhone 
CHAR(10) 
NOT NULL,
ClientEmail 
TINYTEXT(30) //Line 18 <- This is where the error occurs 
NULL);

はい、読みやすくはありませんが、実行すると構文エラーat line 18、つまりTINYTEXT(30)行が発生します。ドキュメントを読んだり、オンラインで質問したりするなどして、これが間違っている理由がわかります。すべてのエラーが修正されたら、コードを再度読み取り可能にして、設定を完了します。

于 2012-06-27T02:51:12.823 に答える