Tambahkan kunci asing pada jenis data besar seperti varchar(2000) mysql tables
P粉378264633
2023-09-05 17:33:34
<p>Saya mempunyai dua jadual "statistik_gabungan" dan "urus niaga",
'affiliate_stats' mempunyai lajur 'affiliate_sales' varchar(2000) (subjadual),
dan "transaksi" mempunyai lajur "_id" varchar(100) kunci utama (jadual induk)</p>
<p>Apabila saya menambah kunci asing pada "affiliate_sales" yang merujuk kepada "_id"
melalui
<kod>Tukar jadual</kod>affiliate_stats<kod>Tambah kekangan</code>fk_affili_sales<kod>Transaksi rujukan kunci asing (</kod>/id<<< /p>
<p>beri saya ralat ini <kod>Kekunci yang ditentukan terlalu panjang;
Saya tahu kedua-dua lajur harus sama saiznya, tetapi dalam kes saya, saya memerlukan saiz yang berbeza untuk mengendalikan ini.
Dicari dalam banyak sumber, tiada jawapan yang jelas, dan tiada penyelesaian yang berkesan untuk saya. </p>
akan disenaraikan
affiliate_sales
更改为VARCHAR(100)
.Sekiranya
transaction(_id)
的外键,那么它不需要是VARCHAR(2000)
kerana ia tidak boleh memegang rentetan lebih daripada 100 aksara pula.Sebelum melakukan ini, pastikan pada masa ini tiada rentetan lebih daripada 100 aksara dalam lajur.
Balas komen anda:
Jika anda bercadang untuk menyimpan "tatasusunan" (iaitu rentetan dengan senarai dipisahkan koma) dalam lajur, anda harus faham bahawa anda tidak boleh membuat kunci asing padanya juga. Kunci asing memerlukan lajur untuk mengaitkan nilai dengan
transaction
baris dalam jadual. Jika anda menambah kekangan kunci asing, hanya satu id boleh disimpan dalam lajur.Nampaknya memang wujud perhubungan banyak-ke-banyak antarastatus_afiliasi dan
affiliate_stats
和transaction
. Anda memerlukan jadual ketiga untuk memodelkan perhubungan banyak-ke-banyak.varchar(2000)
Menyimpan 2000 aksara, tetapi setiap aksara tidak semestinya 1 bait. Aksara Eropah mudah seperti a, 1 dan ? Walau bagaimanapun, ü atau å atau َََُِّْ mengambil berbilang bait.Kemungkinan jenis rentetan tidak perlu sama panjang.
Namun, ini tidak perlu. Kunci tidak boleh melebihi 100 aksara. Kunci utama anda ialah
varchar(100)
, jadi kunci asing tidak akan melebihi 100 aksara.Namun, nampaknya anda ingin menyimpan dua jenis data yang berbeza dalam lajur ini. Satu ialah jenis tatasusunan tertentu, dan satu lagi ialah kunci asing. kamu tidak boleh. Kunci asing pastikan bahawa setiap nilai mempunyai nilai kunci utama yang sepadan.
Sebaliknya, gunakan kenaikan automatik kunci utamauntuk memautkan jadual bersama-sama. Ia lebih ringkas, lebih pantas, menggunakan kurang storan, jelas dan tidak pernah berubah.
Tambah lajur baharu sebagai kunci utama untuk kedua-dua jadual. Kemudian memetiknya.
Anda tidak boleh menyimpan berbilang kunci dalam satu lajur. MySQL perlu dapat mengesahkan bahawa setiap kunci asing mempunyai kunci utama yang sepadan, dan hanya boleh melakukan ini dengan menyemak sama ada ia betul-betul sama.
Sebaliknya, jika setiap baris affiliate_stats sepadan dengan berbilang affiliate_sales, anda memerlukan join table. Ini dipanggil hubungan satu-ke-banyak. Satu baris affiliate_stats berkaitan dengan banyak affiliate_sales.
Sekarang, masukkan baris dalam affiliate_stats_sales untuk setiap affiliate_sale yang anda ingin tambahkan pada baris affiliate_stats.
Data jualan dan statistik berkaitan dengan menyertai jadual ini. Sebagai contoh, jika anda ingin melihat statistik untuk jualan 100 unit.
Agak sukar pada mulanya, tetapi sangat berkuasa. Inilah cara pangkalan data hubungan berfungsi.