Rumah >pangkalan data >tutorial mysql >Adakah mysql mempunyai tatasusunan?
Tiada jenis tatasusunan dalam MySQL elemen Tatasusunan biasanya dibahagikan dengan aksara tertentu dan disimpan dalam bentuk rentetan. Sebab tiada tatasusunan dalam MYSQL adalah kerana kebanyakan orang tidak benar-benar memerlukannya. Dalam pangkalan data hubungan, biasanya menggunakan model hubungan, setiap unit maklumat sebaiknya diberikan kepada baris jadual yang berasingan. Sebagai contoh, seseorang mungkin berfikir "Saya mahu senarai perkara" dan sebaliknya mencipta jadual baharu yang mengaitkan baris daripada satu jadual ke baris daripada jadual lain, ini boleh mewakili perhubungan "M:N". Pangkalan data boleh mengindeks baris ini biasanya tidak diindeks.
Tiada jenis tatasusunan dalam MySQL biasanya dibahagikan kepada rentetan oleh a aksara tertentu. Storan dalam bentuk
1.1 Cari bilangan elemen dalam tatasusunan
kaedah: Pisahkan rentetan mengikut simbol yang ditentukan dan kembalikan nombor elemen selepas berpecah. Keputusan yang diperlukan boleh diperolehi dengan mengira bilangan pembatas dalam rentetan dan menambah 1. Kaedahnya sangat mudah.
<code>CREATE function Get_StrArrayLength <br/>( <br/>@str varchar(1024), --要分割的字符串 <br/>@split varchar(10) --分隔符号 <br/>) <br/>returns int <br/>as <br/>begin <br/>declare @location int <br/>declare @start int <br/>declare @length int <br/>set @str=ltrim(rtrim(@str)) <br/>set @location=charindex(@split,@str) <br/>set @length=1 <br/>while @location<>0 <br/>begin <br/>set @start=@location+1 <br/>set @location=charindex(@split,@str,@start) <br/>set @length=@length+1 <br/>end <br/>return @length <br/>end<br/></code>
Contoh panggilan:
select Get_StrArrayLength('78,1,2,3',',')
Nilai pulangan:
4
1.2 Dapatkan elemen pada kedudukan yang ditentukan dalam tatasusunan
kaedah: Pisahkan rentetan mengikut simbol yang ditentukan dan kembalikan elemen indeks yang ditentukan selepas pemisahan (perhatikan bahawa indeks bermula dari 1), semudah tatasusunan
<code>CREATE function Get_StrArrayStrOfIndex <br/>( <br/>@str varchar(1024), --要分割的字符串 <br/>@split varchar(10), --分隔符号 <br/>@index int --取第几个元素 <br/>) <br/>returns varchar(1024) <br/>as <br/>begin <br/>declare @location int <br/>declare @start int <br/>declare @next int <br/>declare @seed int <br/>set @str=ltrim(rtrim(@str)) <br/>set @start=1 <br/>set @next=1 <br/>set @seed=len(@split) <br/>set @location=charindex(@split,@str) <br/>while @location<>0 and @index>@next <br/>begin <br/>set @start=@location+@seed <br/>set @location=charindex(@split,@str,@start) <br/>set @next=@next+1 <br/>end <br/>if @location =0 select @location =len(@str)+1 <br/>--这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。 <br/>return substring(@str,@start,@location-@start) <br/>end<br/></code>
Contoh panggilan:
select Get_StrArrayStrOfIndex('8,9,4',',',2)
Nilai pulangan:
9
1.3. Gabungkan dua fungsi di atas untuk melintasi elemen dalam tatasusunan
Kaedah: Gabungkan dua fungsi di atas untuk melintasi elemen dalam rentetan seperti tatasusunan
<code>declare @str varchar(50) <br/>set @str='1,2,3,4,5' <br/>declare @next int <br/>set @next=1 <br/>while @next<=Get_StrArrayLength(@str,',') <br/>begin <br/>print Get_StrArrayStrOfIndex(@str,',',@next) <br/>set @next=@next+1 <br/>end<br/></code>
Hasil panggilan:
1 2 3 4 5
Saya mempunyai dua jadual. dalam MySQL. Orang jadual mempunyai lajur berikut:
id | name | fruits
Lajur buah boleh mengandungi kosong atau tatasusunan rentetan seperti ('epal', 'oren', 'pisang') atau ('strawberi') dsb. Jadual kedua ialah Table Fruit dan mempunyai tiga lajur berikut:
____________________________ fruit_name | color | price ____________________________ apple | red | 2 ____________________________ orange | orange | 3 ____________________________ ...,...
Jadi bagaimana saya harus mereka bentuk lajur buah dalam jadual pertama supaya ia boleh menampung mendapatkan nilai daripada lajur fruit_name dalam tatasusunan String jadual kedua ? Oleh kerana tiada jenis data tatasusunan dalam MySQL, apakah yang perlu saya lakukan?
Jawapan terbaik:
Cara yang betul ialah menggunakan berbilang jadual dan menyertainya dalam pertanyaan.
Contohnya:
CREATE TABLE person ( `id` INT NOT NULL PRIMARY KEY, `name` VARCHAR(50) ); CREATE TABLE fruits ( `fruit_name` VARCHAR(20) NOT NULL PRIMARY KEY, `color` VARCHAR(20), `price` INT ); CREATE TABLE person_fruit ( `person_id` INT NOT NULL, `fruit_name` VARCHAR(20) NOT NULL, PRIMARY KEY(`person_id`, `fruit_name`) );
orang_buah jadual mengandungi baris untuk setiap buah yang dikaitkan dengan seseorang, dan secara berkesan menghubungkan orang dan jadual buah-buahan bersama-sama.
1 | "banana" 1 | "apple" 1 | "orange" 2 | "straberry" 2 | "banana" 2 | "apple"
Apabila anda ingin mendapatkan semula seseorang dan buahnya, anda boleh melakukan sesuatu seperti ini:
SELECT p.*, f.* FROM person p INNER JOIN person_fruit pf ON p.id = pf.person_id INNER JOIN fruits f ON pf.fruit_name = f.fruit_name
Sebab tiada tatasusunan dalam SQL adalah kerana kebanyakan orang tidak benar-benar memerlukannya. Pangkalan data perhubungan (itulah SQL) berfungsi menggunakan perhubungan, dan pada kebanyakan masa adalah lebih baik untuk mempunyai satu baris jadual untuk setiap "bit maklumat". Sebagai contoh, anda mungkin fikir "Saya mahu senarai perkara ", sebaliknya buat Jadual baharu yang mengaitkan baris dalam satu jadual dengan baris dalam jadual lain . [1] Dengan cara ini, anda boleh mewakili perhubungan M:N. Kelebihan lain ialah pautan ini tidak mengacaukan baris yang mengandungi item yang dipautkan. Pangkalan data boleh mengindeks baris ini. Tatasusunan biasanya tidak diindeks.
Jika anda tidak memerlukan pangkalan data hubungan, anda boleh menggunakan mis.
” mesej. Ayat yang ditulis semula: Mengikut peraturan emas, setiap atribut bukan kunci mesti memberikan maklumat yang sepadan untuk kunci dan keseluruhan fakta utama. ” Tatasusunan melakukan terlalu banyak fakta, ia menyimpan susunan (tidak berkaitan dengan perhubungan itu sendiri) (lihat di atas). jadual yang membolehkan orang membuat panggilan telefon Sekarang anda boleh mempunyai senarai panggilan telefonnya kepada setiap orang tetapi setiap orang mempunyai banyak hubungan lain dengan banyak perkara lain Adakah ini bermakna jadual orang saya harus mengandungi setiap perkara yang disambungkan kepadanya Perkara? Tidak, ia bukan milik orang itu sendiri
[1]: Tidak kira jika jadual terpaut hanya mempunyai dua lajur (kunci utama setiap jadual)! dalam jadual ini.
Nota 2:Selain itu, stor data/simpan fail key:value seperti Cassandra, MongoDB, Redis, dsb. juga menyediakan penyelesaian yang baik. Perhatikan di mana data sebenarnya disimpan (jika pada cakera atau dalam ingatan). Tidak semua data perlu berada dalam pangkalan data yang sama. Sesetengah data tidak dipetakan dengan baik ke pangkalan data hubungan dan anda mungkin mempunyai sebab untuk menyimpannya di tempat lain, atau anda mungkin mahu menggunakan pangkalan data kunci: nilai dalam ingatan sebagai cache panas untuk data yang disimpan di suatu tempat pada cakera atau sebagai storan sementara Perkara seperti sesi.
Atas ialah kandungan terperinci Adakah mysql mempunyai tatasusunan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!