varchar(2000) mysql テーブルなどのビッグ データ型に外部キーを追加する
P粉378264633
2023-09-05 17:33:34
<p>「affiliate_stats」と「transaction」という 2 つのテーブルがあります。
「affiliate_stats」には列「affiliate_sales」varchar(2000) (サブテーブル) があります。
「transaction」には列「_id」があり、varchar(100) 主キー (親テーブル) </p>
<p>「_id」を参照する外部キーを「affiliate_sales」に追加した場合
通り抜ける
<code>テーブル変更</code>affiliate_stats<code>制約の追加</code>fk_affili_sales<code>外部キー (affiliate_sales) 参照トランザクション (</code>_id<code>);</code> < /p>
<p>このエラーを表示<code>指定されたキーが長すぎます。最大キー長は tes</code> で 3072 です。
両方の列のサイズが等しい必要があることはわかっていますが、私の場合、これを処理するには異なるサイズが必要です。
多くの情報源を検索しましたが、明確な答えはなく、どの解決策も私にとっては役に立ちませんでした。 </p>
列
リーリーaffiliate_sales
をVARCHAR(100)
に変更します。これが
transaction(_id)
の外部キーである場合、100 文字を超える文字列を保持できないため、VARCHAR(2000)
である必要はありません。ともかく。この操作を実行する前に、現在列に 100 文字を超える文字列がないことを確認してください。
コメントへの返信:
「配列」(つまり、カンマ区切りのリストを含む文字列) を列に格納する予定がある場合は、いずれにしても外部キーを作成できないことを理解しておく必要があります。外部キーには、 値と transaction
テーブル内の行を関連付ける列が必要です。外部キー制約を追加すると、列に格納できる ID は 1 つだけになります。
affiliate_stats
と
transactionの間には確かに多対多の関係があるようです。多対多の関係をモデル化するには 3 番目のテーブルが必要です。
varchar(2000)
2000 文字を格納しますが、各文字は必ずしも 1 バイトであるとは限りません。 a、1、? などの単純なヨーロッパ文字はすべて 1 バイトです。ただし、ü または å または َََُِِّْ は複数バイトを占めます。文字列型が同じ長さである必要はない可能性があります 。
ただし、これは必須ではありません。キーは 100 文字を超えることはできません。主キーは varchar(100)
ただし、であるため、外部キーは 100 文字を超えることはできません。
この列には 2 つの異なるタイプのデータを保存したいようです。 1 つは特定の配列タイプで、もう 1 つは外部キーです。あなたはできません。 外部キー 各 値に一致する主キー値があることを確認します。
代わりに、
自動インクリメント主キー を使用してテーブルをリンクします。よりシンプルで高速で、使用するストレージが少なく、明確で決して変更されません。
両方のテーブルの主キーとして新しい列を追加します。それからそれを引用します。複数のキーを 1 つの列に保存することはできません。 MySQL は、各外部キーに一致する主キーがあることを確認できる必要があり、これを行うには、それらが正確に等しいことを確認する必要があります。
結合テーブルが必要です。これは 1 対多の関係と呼ばれます。アフィリエイト統計の 1 行は、多くのアフィリエイト_セールスに関連しています。 リーリー
次に、affiliate_stats 行に追加するそれぞれのaffiliate_sale の行を、affiliate_stats_sales に挿入します。リーリー
売上と統計データは、このテーブルを結合することによって関連付けられます。たとえば、100 個の販売の統計を表示したい場合。リーリー
最初は少し難しいですが、非常に強力です。これがリレーショナル データベースの仕組みです。