ここでは、MySQL に関するいくつかの一般的な問題を解決する方法を学ぶためのいくつかの例を示します。
いくつかの例では、データベース テーブル「shop」は、特定の販売者 (ディーラー) の各商品 (商品番号) の価格を保存するために使用されます。各販売者が各品目に固定価格を持っていると仮定すると、(品目、販売者) がレコードの主キーになります。
コマンドラインツールmysqlを起動し、データベース
shell> mysql your-database-name
を選択します(ほとんどのMySQLでは、テストデータベースを使用できます)。
次のステートメントを使用してサンプル テーブルを作成できます:
mysql> CREATE TABLE shop ( -> article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL, -> dealer CHAR(20) DEFAULT '' NOT NULL, -> price DOUBLE(16,2) DEFAULT '0.00' NOT NULL, -> PRIMARY KEY(article, dealer)); mysql> INSERT INTO shop VALUES -> (1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45), -> (3,'C',1.69),(3,'D',1.25),(4,'D',19.95);
ステートメントを実行すると、テーブルには次の内容が含まれます:
mysql> SELECT * FROM shop; +---------+--------+-------+ | article | dealer | price | +---------+--------+-------+ | 0001 | A | 3.45 | | 0001 | B | 3.99 | | 0002 | A | 10.99 | | 0003 | B | 1.45 | | 0003 | C | 1.69 | | 0003 | D | 1.25 | | 0004 | D | 19.95 | +---------+--------+-------+
1. 列の最大値
"最大の項目番号は何ですか?"
2. 所有済み 特定の列の最大値を持つ行タスク: 最も高価なアイテムの番号、販売者、および価格を見つけます。 これはサブクエリを使用すると簡単に実行できます:
SELECT MAX(article) AS article FROM shop; +---------+ | article | +---------+ | 4 | +---------+別の解決策は、すべての行を価格で降順に並べ替え、
MySQL固有の LIMIT 句を使用して最初の行のみを取得することです:
SELECT article, dealer, price FROM shop WHERE price=(SELECT MAX(price) FROM shop);
注: 複数の行がある場合items 最も高価なアイテム (例: それぞれの価格 19.95)、LIMIT ソリューションではそのうちの 1 つだけが表示されます。 3. 列の最大値: グループ別
タスク: 各アイテムの最大価格はいくらですか?SELECT article, dealer, price
FROM shop
ORDER BY price DESC
LIMIT 1;
4. グループ間の特定のフィールドの最大値を持つ行
この問題は、次のようなサブクエリで解決できます:
SELECT article, MAX(price) AS price FROM shop GROUP BY article +---------+-------+ | article | price | +---------+-------+ | 0001 | 3.99 | | 0002 | 10.99 | | 0003 | 1.69 | | 0004 | 19.95 | +---------+-------+
5. ユーザー変数の使用
MySQL ユーザー変数をクリアして、クライアント側の一時変数に保存せずに結果を記録できます。
たとえば、最高価格または最低価格のアイテムを見つける方法は次のとおりです:
SELECT article, dealer, price FROM shop s1 WHERE price=(SELECT MAX(s2.price) FROM shop s2 WHERE s1.article = s2.article);
6. 外部キーの使用
MySQL では、InnoDB テーブルは外部キーワード制約のチェックをサポートしています。
2 つのテーブルを結合する場合のみ、外部キーワードは必要ありません。 InnoDB タイプ以外のテーブルの場合、REFERENCES
tbl_name(col_name) 句を使用して列を定義するときに外部キーワードを使用できます。この句は、そのことを思い出させるためのメモまたはコメントとしてのみ使用されます。現在定義中 この列は別のテーブルの列を指しています。 このステートメントを実行するときは、次のことを実装することが重要です: · MySQL は、定義しているテーブル内の行に対するアクションに応じて行を削除するなど、テーブル tbl_name
内のアクションを実行しません。この構文は ON DELETE または ON UPDATE 動作を引き起こしません (REFERENCES 句に ON DELETE 句または ON UPDATE 句を書いた場合、それは無視されます)。· この構文は column
を作成しますが、インデックスやキーワードは作成されません。· この構文を使用して InnoDB テーブルを定義すると、エラーが発生します。
次のように結合列として作成された列を使用できます:mysql> SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop; mysql> SELECT * FROM shop WHERE price=@min_price OR price=@max_price; +---------+--------+-------+ | article | dealer | price | +---------+--------+-------+ | 0003 | D | 1.25 | | 0004 | D | 19.95 | +---------+--------+-------+
CREATE TABLE person ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, name CHAR(60) NOT NULL, PRIMARY KEY (id) ); CREATE TABLE shirt ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, style ENUM('t-shirt', 'polo', 'dress') NOT NULL, color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL, owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id), PRIMARY KEY (id) ); INSERT INTO person VALUES (NULL, 'Antonio Paz'); SELECT @last := LAST_INSERT_ID(); INSERT INTO shirt VALUES (NULL, 'polo', 'blue', @last), (NULL, 'dress', 'white', @last), (NULL, 't-shirt', 'blue', @last); INSERT INTO person VALUES (NULL, 'Lilliana Angelovska'); SELECT @last := LAST_INSERT_ID(); INSERT INTO shirt VALUES (NULL, 'dress', 'orange', @last), (NULL, 'polo', 'red', @last), (NULL, 'dress', 'blue', @last), (NULL, 't-shirt', 'white', @last); SELECT * FROM person; +----+---------------------+ | id | name | +----+---------------------+ | 1 | Antonio Paz | | 2 | Lilliana Angelovska | +----+---------------------+ SELECT * FROM shirt;この方法で使用すると、REFERENCES 句は SHOW CREATE TABLE または DESCRIBE の出力に表示されません:
+----+---------+--------+-------+| id | style | color | owner |+----+---------+--------+-------+| 1 | polo | blue | 1 || 2 | dress | white | 1 || 3 | t-shirt | blue | 1 || 4 | dress | orange | 2 || 5 | polo | red | 2 || 6 | dress | blue | 2 || 7 | t-shirt | white | 2 |+----+---------+--------+-------+ SELECT s.* FROM person p, shirt sWHERE p.name LIKE 'Lilliana%'AND s.owner = p.idAND s.color <> 'white'; +----+-------+--------+-------+| id | style | color | owner |+----+-------+--------+-------+| 4 | dress | orange | 2 || 5 | polo | red | 2 || 6 | dress | blue | 2 |+----+-------+--------+-------+列の定義で、この使用方法を押します。コメントまたは「ヒント」としての REFERENCES は、テーブル MyISAM および BerkeleyDB に対して機能します。 7. 2 つのキーに基づく検索 では、AND と同様に、単一のキーワードを使用して OR 句を最大限に活用できます。 より柔軟な例は、OR で結合された 2 つのキーワードを見つけることです:
SHOW CREATE TABLE shirt\G *************************** 1. row *************************** Table: shirt Create Table: CREATE TABLE `shirt` ( `id` smallint(5) unsigned NOT NULL auto_increment, `style` enum('t-shirt','polo','dress') NOT NULL, `color` enum('red','blue','orange','white','black') NOT NULL, `owner` smallint(5) unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1この状況は最適化されています。 この問題をより効果的に解決するために、UNION を使用して 2 つの別々の SELECT ステートメントの出力を結合することもできます。 各 SELECT は 1 つのキーワードのみを検索し、最適化できます:
SELECT field1_index, field2_index FROM test_table WHERE field1_index = '1' OR field2_index = '1'8. 日数に基づいて訪問数を計算する 次の例は、ビット配列関数を使用して、ユーザーが各月に訪問した日数を計算する方法を示しています。ウェブページ。
SELECT field1_index, field2_index
FROM test_table WHERE field1_index = '1'
UNION
SELECT field1_index, field2_index
FROM test_table WHERE field2_index = '1';
このテーブルの例には、ユーザーの Web ページへの訪問を表す年、月、日の値が含まれています。次のクエリを使用して、1 か月あたりの訪問日数を決定できます: CREATE TABLE t1 (year YEAR(4), month INT(2) UNSIGNED ZEROFILL, day INT(2) UNSIGNED ZEROFILL); INSERT INTO t1 VALUES(2000,1,1),(2000,1,20),(2000,1,30),(2000,2,2), (2000,2,23),(2000,2,23);は次の結果を返します:
SELECT year,month,BIT_COUNT(BIT_OR(1<<day)) AS days FROM t1 GROUP BY year,month;このクエリは、テーブル内の年/月ごとに結合された個別の日数をカウントし、重複したクエリを自動的に削除できます。 9. AUTO_INCREMENT を使用すると、AUTO_INCREMENT 属性を通じて新しい行の一意の識別子を生成できます:
+------+-------+------+
| year | month | days |
+------+-------+------+
| 2000 | 01 | 3 |
| 2000 | 02 | 2 |
+------+-------+------+
は以下を返します: CREATE TABLE animals ( id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id) ); INSERT INTO animals (name) VALUES ('dog'),('cat'),('penguin'), ('lax'),('whale'),('ostrich'); SELECT * FROM animals;LAST_INSERT_ID() SQL 関数または mysql_insert_id() C API 関数を使用してクエリを実行できます。最新の AUTO_INCREMENT 値。これらの関数は接続固有であるため、その戻り値は挿入関数を実行する他の接続の影響を受けません。
注:
複数行の挿入の場合、LAST_INSERT_ID() と mysql_insert_id() は実際には、挿入された最初の行から AUTO_INCREMENT キーワードを返します。レプリケーション設定では、この機能を使用すると、複数行の挿入を他のサーバーに正しくレプリケートできます。MyISAM テーブルと BDB テーブルの場合、2 番目の列に AUTO_INCREMENT と複数列インデックスを指定できます。このとき、AUTO_INCREMENTカラムで生成される値の計算方法は、MAX(auto_increment_column
) + 1 WHERE prefix=given-prefixとなります。データを並べ替えたグループに入れる場合は、この方法を使用します。
+----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | lax | | 5 | whale | | 6 | ostrich | +----+---------+が返されます:
+--------+----+---------+ | grp | id | name | +--------+----+---------+ | fish | 1 | lax | | mammal | 1 | dog | | mammal | 2 | cat | | mammal | 3 | whale | | bird | 1 | penguin | | bird | 2 | ostrich | +--------+----+---------+
请注意在这种情况下(AUTO_INCREMENT列是多列索引的一部分),如果你在任何组中删除有最大AUTO_INCREMENT值的行,将会重新用到AUTO_INCREMENT值。对于MyISAM表也如此,对于该表一般不重复使用AUTO_INCREMENT值。
如果AUTO_INCREMENT列是多索引的一部分,MySQL将使用该索引生成以AUTO_INCREMENT列开始的序列值。。例如,如果animals表含有索引PRIMARY KEY (grp, id)和INDEX(id),MySQL生成序列值时将忽略PRIMARY KEY。结果是,该表包含一个单个的序列,而不是符合grp值的序列。
要想以AUTO_INCREMENT值开始而不是1,你可以通过CREATE TABLE或ALTER TABLE来设置该值,如下所示:
mysql> ALTER TABLE tbl AUTO_INCREMENT = 100;
以上就是MySQL入门教程7 —— 常用数据库查询的示例的内容,更多相关内容请关注PHP中文网(www.php.cn)!

MySQLユーザーを追加する方法を習得することは、データベース管理者と開発者にとって重要です。これは、データベースのセキュリティとアクセス制御を保証するためです。 1)CreateUserコマンドを使用して新しいユーザーを作成し、2)付与コマンドを介してアクセス許可を割り当て、3)FlushPrivilegesを使用してアクセス許可を有効にすることを確認します。

choosecharforfixed-lengthdata、varcharforvariable-lengthdata、andtextforlargetextfields.1)chariseffienceforconsistent-lengthdatalikecodes.2)varcharsuitsvariaible-lengthdatalikenames、balancingflexibilityandperformance.3)Textisidealforforforforforforforforforforforidex

MySQLの文字列データ型とインデックスを処理するためのベストプラクティスには、次のものが含まれます。1)固定長のchar、可変長さのvarchar、大規模なテキストのテキストなどの適切な文字列タイプを選択します。 2)インデックス作成に慎重になり、インデックスを避け、一般的なクエリのインデックスを作成します。 3)プレフィックスインデックスとフルテキストインデックスを使用して、長い文字列検索を最適化します。 4)インデックスを定期的に監視および最適化して、インデックスを小さく効率的に保つ。これらの方法により、読み取りと書き込みのパフォーマンスをバランスさせ、データベースの効率を改善できます。

toaddauserremotelytomysql、フォローステープ:1)connecttomysqlasroot、2)createanewuserwithremoteaccess、3)grantniverayprivileges、and4)flushprivileges.

tostorestringseffiedlyinmysql、choosetherightdatatypebasedonyourneadss:1)usecharforfixed-lengthstringslikecountrycodes.2)usevarforvariable-lengthstringslikenames.3)usetextfor forlong-formtextcontent.4)useblobforborikedalikeimages

MySQLのBLOBおよびテキストデータ型を選択する場合、BLOBはバイナリデータの保存に適しており、テキストはテキストデータの保存に適しています。 1)BLOBは、写真やオーディオなどのバイナリデータに適しています。2)テキストは、記事やコメントなどのテキストデータに適しています。選択するときは、データプロパティとパフォーマンスの最適化を考慮する必要があります。

いいえ、Youは、usotherootuserinmysqlforyourproduct.instead、createpificusers withlimitedprivilegestoenhancesecurityandperformance:1)createanewuserwithastrongpassword、2)grantonlynlyneversearpermissionStothisuser、3)正規環境筋肉筋周辺の環境

mysqlstringdatatypesshouldbechosenbadedatacharacteristicsandusecases:1)usecharforfixed-lengthstringslikecountrycodes.2)usevarforvariable-lengthstringslikenames.3)usebinaryorvarniaryforbinarydatalikecryptograpograpogrationckeys.4)使用


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

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

WebStorm Mac版
便利なJavaScript開発ツール

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

ドリームウィーバー CS6
ビジュアル Web 開発ツール
