ホームページ  >  に質問  >  本文

varchar(2000) mysql テーブルなどのビッグ データ型に外部キーを追加する

<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>
P粉378264633P粉378264633433日前528

全員に返信(2)返信します

  • P粉321676640

    P粉3216766402023-09-06 12:42:54

    affiliate_salesVARCHAR(100) に変更します。

    リーリー

    これが transaction(_id) の外部キーである場合、100 文字を超える文字列を保持できないため、VARCHAR(2000) である必要はありません。ともかく。

    この操作を実行する前に、現在列に 100 文字を超える文字列がないことを確認してください。


    コメントへの返信:

    「配列」(つまり、カンマ区切りのリストを含む文字列) を列に格納する予定がある場合は、いずれにしても外部キーを作成できないことを理解しておく必要があります。外部キーには、 値と transaction テーブル内の行を関連付ける列が必要です。外部キー制約を追加すると、列に格納できる ID は 1 つだけになります。

    affiliate_statstransaction の間には確かに多対多の関係があるようです。多対多の関係をモデル化するには 3 番目のテーブルが必要です。

    返事
    0
  • P粉147045274

    P粉1470452742023-09-06 00:41:33

    varchar(2000) 2000 文字を格納しますが、各文字は必ずしも 1 バイトであるとは限りません。 a、1、? などの単純なヨーロッパ文字はすべて 1 バイトです。ただし、ü または å または َََُِِّْ は複数バイトを占めます。


    文字列型が同じ長さである必要はない可能性があります

    ただし、これは必須ではありません。

    キーは 100 文字を超えることはできません。主キーは varchar(100) であるため、外部キーは 100 文字を超えることはできません。

    ただし、

    この列には 2 つの異なるタイプのデータを保存したいようです。 1 つは特定の配列タイプで、もう 1 つは外部キーです。あなたはできません。 外部キー 値に一致する主キー値があることを確認します。


    代わりに、

    自動インクリメント主キー を使用してテーブルをリンクします。よりシンプルで高速で、使用するストレージが少なく、明確で決して変更されません。

    両方のテーブルの主キーとして新しい列を追加します。それからそれを引用します。


    複数のキーを 1 つの列に保存することはできません。 MySQL は、各外部キーに一致する主キーがあることを確認できる必要があり、これを行うには、それらが正確に等しいことを確認する必要があります。

    代わりに、各affiliate_stats行が複数のaffiliate_salesに対応する場合は、

    結合テーブルが必要です。これは 1 対多の関係と呼ばれます。アフィリエイト統計の 1 行は、多くのアフィリエイト_セールスに関連しています。 リーリー

    次に、affiliate_stats 行に追加するそれぞれのaffiliate_sale の行を、affiliate_stats_sales に挿入します。

    リーリー

    売上と統計データは、このテーブルを結合することによって関連付けられます。たとえば、100 個の販売の統計を表示したい場合。

    リーリー

    最初は少し難しいですが、非常に強力です。これがリレーショナル データベースの仕組みです。

    返事
    0
  • キャンセル返事