MySQL には配列型はなく、通常、配列要素は特定の文字で分割され、文字列形式で格納されます。 MYSQL に配列がないのは、ほとんどの人が実際には配列を必要としないためです。リレーショナル データベースでは、通常はリレーショナル モデルを使用し、情報の各単位を別のテーブル行に割り当てるのが最適です。たとえば、「もののリストが欲しい」と考え、代わりに、あるテーブルの行を別のテーブルの行に関連付ける新しいテーブルを作成する場合があります。これは、「M:N」関係を表すことができます。データベースはこれらの行にインデックスを付けることができますが、通常、配列にはインデックスが付けられません。
1. MySQL は配列を文字列の形式で保存します
MySQL には配列型はありません。通常、配列要素は特定の文字によって文字列に分割されます。 . ストレージのフォーマット
1.1. 配列の要素数を求める
メソッド: 指定された記号に従って文字列を分割し、分割後の要素数を返します。文字列内の区切り文字の数を数えて 1 を加算すると、必要な結果が得られます。方法は非常に簡単です。
<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>
呼び出し例:
select Get_StrArrayLength('78,1,2,3',',')
戻り値:
4
1.2. 配列内の指定位置の要素を取得
メソッド: 指定されたシンボルに従って文字列を分割し、分割後に指定されたインデックスの要素を返します (インデックスは 1 から始まることに注意してください)。配列のように便利です。
<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>
呼び出し例:
select Get_StrArrayStrOfIndex('8,9,4',',',2)
戻り値:
9
1.3. 上記 2 つの関数を組み合わせて配列内の要素を走査します
メソッド: 上記 2 つの関数を組み合わせて要素を走査します配列のような文字列
<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>
呼び出し結果:
1 2 3 4 5
2. MySQLに配列(リスト)を格納する例
テーブルが2つありますMySQLで。テーブル Person には次の列があります。
id | name | fruits
フルーツ列には、空の文字列または ('apple'、'orange'、'banana') や ('strawberry') などの文字列の配列を含めることができます。 2 番目のテーブルは Table Fruit で、次の 3 つの列があります:
____________________________ fruit_name | color | price ____________________________ apple | red | 2 ____________________________ orange | orange | 3 ____________________________ ...,...
それでは、2 番目のテーブルの Fruit_name 列から値を取得できるようにするには、最初のテーブルの Fruit 列をどのように設計すればよいでしょうか String 配列? MySQL には配列データ型がないのですが、どうすればよいでしょうか?
ベストアンサー:
正しい方法は、複数のテーブルを使用し、それらをクエリ内で結合することです。
例:
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`) );
person_fruitテーブルには、人物に関連付けられている果物ごとに行が含まれており、人物テーブルと果物テーブルを効果的にリンクします。
1 | "banana" 1 | "apple" 1 | "orange" 2 | "straberry" 2 | "banana" 2 | "apple"
人物とそのフルーツを取得したい場合は、次のようなことができます:
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
命令 1:
SQL に配列がない理由は、ほとんどの人が実際には配列を必要としないためです。リレーショナル データベース (SQL がそれです) はリレーションシップを使用して機能します。ほとんどの場合、「情報のビット」ごとにテーブルの 1 行を用意するのが最適です。たとえば、「 物事のリスト が欲しい」と考えるかもしれませんが、代わりに を作成します。あるテーブルの行を別のテーブルの 行に関連付ける新しいテーブル 。 [1] このようにして、M:N の関係を表すことができます。もう 1 つの利点は、これらのリンクによって、リンクされた項目を含む行が乱雑にならないことです。データベースはこれらの行にインデックスを付けることができます。通常、配列にはインデックスが付けられません。 リレーショナル データベースが必要ない場合は、キー/値ストアなどを使用できます。 ######"情報。 書き直された文: 黄金律に従って、各非キー属性は、キーとキー ファクト全体に対応する情報を提供する必要があります。 「配列はやりすぎです。配列には複数のファクトがあり、順序 (リレーションシップ自体とは関係ありません) が保存されます。パフォーマンスは悪いです (上記を参照)。 人々のテーブルがあると想像してください。人々が電話をかけることができるテーブルです。これで、各人に自分の電話リストを持たせることができます。しかし、各人は他の多くのものと他の多くの関係を持っています。これは、私の人物テーブルには、その人が接続しているすべてのものを含める必要があるという意味ですか? ものの配列? いいえ、それはその人自体のプロパティではありません。
[1]: リンクされたテーブルに 2 つの列 (各テーブルの主キー) しかない場合は、問題ありません! リレーションシップ自体に他のプロパティがある場合は、注 2:
MySQL 5.7 では、JSON データ型が提供されるようになりました。この新しいデータ型は、ストレージを提供します。複雑なデータのメソッド: リスト、辞書など。オブジェクト リレーショナル マッピングは、Rray をデータベースに効率的にマッピングできないため、非常に複雑になる可能性があります。MySQL では、歴史的に、人々は通常、リストまたは配列を保存するテーブルを作成し、各値はレコードとして扱われます。テーブルには 2 つまたは 3 つの列しかない場合もあれば、それ以上の列が含まれる場合もあります。このタイプのデータをどのように保存するかは、実際にはデータの特性によって異なります。たとえば、リストは次のようになります。エントリの数は静的か動的か? リストは小さいままでしょうか、それとも数百万レコードに増加すると予想されますか? このテーブルで大量の読み取りが行われますか? 大量の書き込みが行われますか? 大量の更新が行われますか? これらは重要な考慮事項です。データ コレクションの保存方法を決定するときは、これらすべての要素を考慮する必要があります。
さらに、Cassandra、MongoDB、Redis などのキー:バリュー データ ストア/ファイル ストアも優れたソリューションを提供します。データが実際に保存される場所 (ディスク上またはメモリ上の場合) に注意してください。すべてのデータが同じデータベースにある必要はありません。一部のデータはリレーショナル データベースに適切にマップされず、それを別の場所に保存する理由がある場合や、ディスク上のどこかに保存されたデータのホット キャッシュまたは一時ストレージとしてメモリ内の key:value データベースを使用したい場合があります。セッションのような。
以上がmysqlには配列がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

MySQLは、初心者がデータベーススキルを学ぶのに適しています。 1.MySQLサーバーとクライアントツールをインストールします。 2。selectなどの基本的なSQLクエリを理解します。 3。マスターデータ操作:テーブルを作成し、データを挿入、更新、削除します。 4.高度なスキルを学ぶ:サブクエリとウィンドウの関数。 5。デバッグと最適化:構文を確認し、インデックスを使用し、選択*を避け、制限を使用します。

MySQLは、テーブル構造とSQLクエリを介して構造化されたデータを効率的に管理し、外部キーを介してテーブル間関係を実装します。 1.テーブルを作成するときにデータ形式と入力を定義します。 2。外部キーを使用して、テーブル間の関係を確立します。 3。インデックス作成とクエリの最適化により、パフォーマンスを改善します。 4.データベースを定期的にバックアップおよび監視して、データのセキュリティとパフォーマンスの最適化を確保します。

MySQLは、Web開発で広く使用されているオープンソースリレーショナルデータベース管理システムです。その重要な機能には、次のものが含まれます。1。さまざまなシナリオに適したInnodbやMyisamなどの複数のストレージエンジンをサポートします。 2。ロードバランスとデータバックアップを容易にするために、マスタースレーブレプリケーション機能を提供します。 3.クエリの最適化とインデックスの使用により、クエリ効率を改善します。

SQLは、MySQLデータベースと対話して、データの追加、削除、変更、検査、データベース設計を実現するために使用されます。 1)SQLは、ステートメントの選択、挿入、更新、削除を介してデータ操作を実行します。 2)データベースの設計と管理に作成、変更、ドロップステートメントを使用します。 3)複雑なクエリとデータ分析は、ビジネス上の意思決定効率を改善するためにSQLを通じて実装されます。

MySQLの基本操作には、データベース、テーブルの作成、およびSQLを使用してデータのCRUD操作を実行することが含まれます。 1.データベースの作成:createdatabasemy_first_db; 2。テーブルの作成:createTableBooks(idintauto_incrementprimarykey、titlevarchary(100)notnull、authorvarchar(100)notnull、published_yearint); 3.データの挿入:InsertIntoBooks(タイトル、著者、公開_year)VA

WebアプリケーションにおけるMySQLの主な役割は、データを保存および管理することです。 1.MYSQLは、ユーザー情報、製品カタログ、トランザクションレコード、その他のデータを効率的に処理します。 2。SQLクエリを介して、開発者はデータベースから情報を抽出して動的なコンテンツを生成できます。 3.MYSQLは、クライアントサーバーモデルに基づいて機能し、許容可能なクエリ速度を確保します。

MySQLデータベースを構築する手順には次のものがあります。1。データベースとテーブルの作成、2。データの挿入、および3。クエリを実行します。まず、createdAtabaseおよびcreateTableステートメントを使用してデータベースとテーブルを作成し、InsertINTOステートメントを使用してデータを挿入し、最後にSelectステートメントを使用してデータを照会します。

MySQLは、使いやすく強力であるため、初心者に適しています。 1.MYSQLはリレーショナルデータベースであり、CRUD操作にSQLを使用します。 2。インストールは簡単で、ルートユーザーのパスワードを構成する必要があります。 3.挿入、更新、削除、および選択してデータ操作を実行します。 4. Orderby、Where and Joinは複雑なクエリに使用できます。 5.デバッグでは、構文をチェックし、説明を使用してクエリを分析する必要があります。 6.最適化の提案には、インデックスの使用、適切なデータ型の選択、優れたプログラミング習慣が含まれます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。
