ホームページ データベース mysql チュートリアル MYSQL建立外键失败几种情况记录Can't create table不能创建表_MySQL

MYSQL建立外键失败几种情况记录Can't create table不能创建表_MySQL

Jun 01, 2016 pm 01:21 PM
mysql 開発者 オペレーティング·システム 記録

Mysql外键

bitsCN.com 像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些都不是的,事实上,这个mysql报错已经被报告是一个mysql本身的bug并出现在mysql 开发者列表当中很多年了,然而这似乎又是一种误导。

在很多实例中,这种错误的发生都是因为mysql一直以来都不能很好的支持的关系的问题, 更不幸的是它也并没有指明到底是哪一个问题会导致上面那种错误,下面我把导致这个可怕 的150错误的常见原因列出来了,并且我以可能性的大小作了排序,已知的原因:

1、 两个字段的类型或者大小不严格匹配,例如,如果一个是INT(10), 那么外键也必须设置成INT(10), 而不是 INT(11) 也不能是 TINYINT. 你得使用 SHOW 命令来查看字段的大小,因为一些查询浏览器有时候把 int(10) 和int(11) 都显示为integer。另外,你还必须确定两个字段是否一个为 SIGNED,而另一个又是UNSIGNED, 这两字段必须严格地一致匹配,更多关于signed 和 unsigned 的信息,请参阅:http://www.verysimple.com/blog/?p=57

2、 你试图引用的其中一个外键没有建立起索引,或者不是一个primary key , 如果其中一个不是primary key 的,你必须为它创建一个索引。

3、外键的名字是一个已经存在的一个键值了,这个时候,你应该检查你的数据库以确保外健名字是唯一的,或者你在键名后面加上几个随机的字符以测试是否是这个原因。

4、 其中一个或者两个表是MyISAM引擎的表,若想要使用外键约束,必须是InnoDB引擎,(实际上,如果两个表都是MyISAM 引擎的,这个错误根本不会发生,但也不会产生外键),你可以通过查询浏览器来设置表的引擎类型

5、 你可能设置了ON DELETE SET NULL, 但是相关的键的字段又设置成了NOTS NULL 值。你可能通过修改cascade 的属性值或者把字段属性设置成 allow null 来搞定这个bug.

6、 请确定你的Charset 和 Collate 选项在表级和字段级上的一致

7、 你可能设置为外键设置了一个默认值,如 default=0

8, 在这个关系里面,其中的一个字段是一个混合键值中的一个,它没有自己独立的索引,这时,你必须为它创建一个独立的索引。

9、 ALTER 声明中有语法错误

最后:建立外键有点麻烦,可以直接用Myeclipse生成ddl。。。bitsCN.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPがMySQLに接続された後、ページは空白です。無効なDIE()関数の理由は何ですか? PHPがMySQLに接続された後、ページは空白です。無効なDIE()関数の理由は何ですか? Apr 01, 2025 pm 03:03 PM

PHPがMySQLに接続した後、ページは空白になり、DIE()関数が失敗する理由。 PHPとMySQLデータベースの間の接続を学習するとき、あなたはしばしばいくつかの混乱することに遭遇します...

ランプアーキテクチャの下でnode.jsまたはPythonサービスを効率的に統合する方法は? ランプアーキテクチャの下でnode.jsまたはPythonサービスを効率的に統合する方法は? Apr 01, 2025 pm 02:48 PM

多くのウェブサイト開発者は、ランプアーキテクチャの下でnode.jsまたはPythonサービスを統合する問題に直面しています:既存のランプ(Linux Apache MySQL PHP)アーキテクチャWebサイトのニーズ...

PythonインタープリターはLinuxシステムで削除できますか? PythonインタープリターはLinuxシステムで削除できますか? Apr 02, 2025 am 07:00 AM

Linux Systemsに付属するPythonインタープリターを削除する問題に関して、多くのLinuxディストリビューションは、インストール時にPythonインタープリターをプリインストールし、パッケージマネージャーを使用しません...

Debianで動物園のパフォーマンスチューニングを操作する方法 Debianで動物園のパフォーマンスチューニングを操作する方法 Apr 02, 2025 am 07:42 AM

この記事では、Debian SystemsのZookeeperパフォーマンスを最適化する方法について説明します。ハードウェア、オペレーティングシステム、Zookeeperの構成、監視に関するアドバイスを提供します。 1.システムレベルでのストレージメディアのアップグレードの最適化:従来の機械的ハードドライブをSSDソリッドステートドライブに置き換えると、I/Oパフォーマンスが大幅に向上し、アクセス待ち時間が減少します。スワップパーティションの無効化:カーネルパラメーターを調整し、スワップパーティションへの依存を減らし、頻繁なメモリとディスクスワップに起因するパフォーマンスの損失を回避します。ファイル記述子の上限を改善する:Zookeeperの処理効率に影響を与えるリソース制限を回避するために、システムによって同時に許可されるファイル記述子の数を増やします。 2. Zookeeper構成最適化Zoo.CFGファイルの構成

PCとモバイル側で同じページを共有し、キャッシュの問題を処理する方法は? PCとモバイル側で同じページを共有し、キャッシュの問題を処理する方法は? Apr 01, 2025 pm 01:57 PM

PCとモバイル側で同じページを共有し、キャッシュの問題を処理する方法は? Nginxでは、Baotaの背景を使用して構築されたPHP MySQL環境、PCサイドの作成方法と...

DjangoとMySQLを使用して、数十万から100万個のデータを処理する場合、4コア8Gメモリサーバーはどのようなキャッシュソリューションを選択する必要がありますか? DjangoとMySQLを使用して、数十万から100万個のデータを処理する場合、4コア8Gメモリサーバーはどのようなキャッシュソリューションを選択する必要がありますか? Apr 01, 2025 pm 11:36 PM

DjangoとMySQLを使用して、DjangoおよびMySQLデータベースを使用するときに大量のデータボリュームを処理します。データボリュームが数十万から100万または200万に達すると...

RedisキューとMySQLの安定性の比較:なぜRedisはデータ損失になりやすいのですか? RedisキューとMySQLの安定性の比較:なぜRedisはデータ損失になりやすいのですか? Apr 01, 2025 pm 02:24 PM

RedisキューとMySQLの安定性の比較:なぜRedisはデータ損失になりやすいのですか?開発環境では、php7.2とthinkphpフレームワークを使用して、私たちはしばしば協力の選択に直面しています...

See all articles