Rumah > Soal Jawab > teks badan
P粉3216766402023-09-06 12:42:54
akan disenaraikan affiliate_sales
更改为 VARCHAR(100)
.
ALTER TABLE `affiliate_stats` MODIFY COLUMN affiliate_tales VARCHAR(100) NOT NULL, ADD CONSTRAINT `fk_affili_sales` FOREIGN KEY (affiliate_sales) REFERENCES transaction(`_id`);
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 antara affiliate_stats
和 transaction
. Anda memerlukan jadual ketiga untuk memodelkan perhubungan banyak-ke-banyak.
P粉1470452742023-09-06 00:41:33
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.
-- I'm assuming we've changed to bigint primary keys. create table affiliate_stats_sales ( affiliate_sales_id bigint not null, foreign key(affiliate_sales_id) references affiliate_sales(id), affiliate_stats_id bigint not null, foreign key(affiliate_stats_id) references affiliate_stats(id) );
Sekarang, masukkan baris dalam affiliate_stats_sales untuk setiap affiliate_sale yang anda ingin tambahkan pada baris affiliate_stats.
-- Relate affiliate_sale 100 to affiliate_stats 20 insert into affiliate_stats_sales(affiliate_sales_id, affiliate_stats_id) values (100, 20)
Data jualan dan statistik berkaitan dengan menyertai jadual ini. Sebagai contoh, jika anda ingin melihat statistik untuk jualan 100 unit.
select affiliate_stats.* from affiliate_stats join affiliate_stats_sales on affiliate_stats_sales.affiliate_stats_id = affiliate_stats.id where affiliate_sales.id = 100
Agak sukar pada mulanya, tetapi sangat berkuasa. Inilah cara pangkalan data hubungan berfungsi.