2016-03-27 19 views
0

私は次のmysqlコードの構文がドキュメントごとに正しいと思いますが、SQLFiddleはエラーをポップアップし、エラーの原因となる行の構文は正しいと思います。変更する。sqlfiddleのMySQL構文エラー

CREATE TABLE students 
(
student_id DECIMAL(38) NOT NULL, 
username VARCHAR(30), 
email VARCHAR(80), 
password VARCHAR(30), 
f_name VARCHAR(30), 
l_name VARCHAR(30), 
bio VARCHAR(350), 
dp VARCHAR(15), 
is_suspended CHAR(1) DEFAULT '0' NOT NULL, 
suspension_reason VARCHAR(150), 
role_id DECIMAL(38) NOT NULL, 
created_on DATETIME(6) DEFAULT SYSDATE() NOT NULL, 
updated_on DATETIME(6), 
is_active CHAR(1) DEFAULT '1' NOT NULL, 
city VARCHAR(15) NOT NULL, 
state VARCHAR(15) NOT NULL, 
zip VARCHAR(6) NOT NULL, 
b_day DATETIME, 
CONSTRAINT students_id_pk PRIMARY KEY(student_id), 
CONSTRAINT students_role_id_fk FOREIGN KEY(role_id) REFERENCES user_role(role_id), 
CONSTRAINT students_username_uq UNIQUE(username), 
CONSTRAINT students_email_uq UNIQUE(email) 
); 

あなたのSQL構文でエラーが発生しています。 「NULL)SYSDATE(NOT、DATETIME updated_on (6)、 is_active CHAR(1)DEFAULT '近くで使用する権利構文についてはMySQLサーバのバージョンに対応するマニュアルを確認してください1' 行14

でこの問題を解決するのを手伝ってください。

+2

あなたは、あなたの質問にSQLフィドルへのリンクを持っている必要があります。私が最初であることをしようとした –

+0

@GordonLinoff。私がリンクを自分でクリックしたとき、私が見つけたコードは前のテーブルのコードでした。 – Mickey

+0

無効なスキーマでフィドルリンクを作成することはできません。 http://sqlfiddle.com/#!9/21b6e/1 –

答えて

0

としてはdocumentationに説明し、CURRENT_TIMESTAMP同義語は、デフォルト値のために許可されています。 SYSDATE()はそのような同義語ではありません。 NOW()(または他のいくつかの構成要素)を使用することができます。

ので、その列の正しい構文は次のとおりです。

created_on DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 
+0

実は、私はあなたがNOW()を使用したり、彼が挿入するように強制されますCURRENT_TIMESTAMPを使用せずにデフォルトとして他の時間関数、できると思ういけない/アップデート:このいずれかを使用します手動で値をNOW() – sagi

+0

はい....このcoulmn – Naruto

+1

NOWの利用DEFAULTをCURRENT_TIMESTAMPまたは力挿入値()のどちらかがあまりにも正常に動作します。 http://sqlfiddle.com/#!9/eb0a28/1 –