1

私はphpmyadminの構文でテーブルを作成していました:

DROP TABLE IF EXISTS users;
DROP TABLE IF EXISTS info;

CREATE TABLE users (
  user_id int unsigned NOT NULL auto_increment,
  email varchar(100) NOT NULL default '',
  pwd varchar(32) NOT NULL default '',
  isAdmin int(1) unsigned NOT NULL,
  PRIMARY KEY  (user_id)
) TYPE=INNODB;

CREATE TABLE info (
  info_id int unsigned NOT NULL auto_increment,
  first_name varchar(100) NOT NULL default '',
  last_name varchar(100) NOT NULL default '',
  address varchar(300) NOT NULL default '',
  zipcode varchar(100) NOT NULL default '',
  personal_phone varchar(100) NOT NULL default '',
  mobilephone varchar(100) NOT NULL default '',
  faxe varchar(100) NOT NULL default '',
  email2 varchar(100) NOT NULL default '',
  country varchar(100) NOT NULL default '',
  sex varchar(1) NOT NULL default '',
  birth varchar(1) NOT NULL default '',

  email varchar(100) NOT NULL default '',
  PRIMARY KEY  (info_id),
  FOREIGN KEY (email) REFERENCES users(email) ON UPDATE CASCADE ON DELETE CASCADE
) TYPE=INNODB;

しかし、エラーを示しています:

「#1064-SQL構文にエラーがあります。11行目の「TYPE = INNODB」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。」

テーブルの作成の最後にTYPE=INNODBを削除すると、エラーが表示されます。

"#1005-テーブル'curriculo.info'(errno:150)を作成できません"。

4

2 に答える 2

2

作成の最後に「Engine=INNODB」を試してください。(タイプではありません)

お持ちでない場合は、mysql設定のデフォルトのエンジンタイプに依存するため、機能しない可能性があります... MyIsam(最も一般的なデフォルトエンジン)は外部キーをサポートしていません。

于 2012-04-11T23:03:12.083 に答える
1

ENGINE = INNODBではなく、を使用してくださいTYPE = InnoDB

MySQLドキュメント、バージョン5.1、CREATE TABLE構文から:

ノート

古いTYPEオプションは。と同義でしたENGINETYPE MySQL 4.0以降は非推奨になっていますが、MySQL 5.1(MySQL 5.1.7を除く)の下位互換性のために引き続きサポートされています。MySQL 5.1.8以降、警告が生成されますMySQL5.5では削除されています。新しいアプリケーションでは使用TYPEしないでください。代わりにENGINEを使用するように、既存のアプリケーションの変換をすぐに開始する必要があります。(セクションD.1.64「MySQL5.1.8での変更(リリースされていません)」を参照してください。)


この外部キーが必要な場合:

FOREIGN KEY (email) REFERENCES users(email)

制約がusers(email)必要です。UNIQUEすべての外部キーは、主キーまたは一意キーのいずれかを参照する必要があります。テーブル内の行がinfo(FKを介して)1人のユーザー(usersテーブル内の行)のみを参照するようにします。


ただし、(さまざまな理由で)ベストプラクティスは、外部キーとして幅の狭い(小さい)列と一定の幅の列を使用することです。あなたemailは100文字で、100から300バイト(文字セットによって異なります)になる可能性があります。したがって、user_id幅がわずか4バイトのFKとして使用することを検討してください。

CREATE TABLE info (
  ...
             ---- email varchar(100) NOT NULL default '',   
             ---- removed
  user_id int unsigned NOT NULL, 
  PRIMARY KEY  (info_id),
  FOREIGN KEY (user_id) REFERENCES users(user_id)
      ON UPDATE CASCADE ON DELETE CASCADE
) TYPE=INNODB;
于 2012-04-11T23:18:49.953 に答える