ホームページ >データベース >mysql チュートリアル >MySQLデータベースの基礎知識の備蓄(整理まとめ)
この記事では、mysql データベースに関する関連知識を提供します。主に、インデックス、構文順序、実行順序、ストアド プロシージャ、およびその他の関連問題など、データベースのいくつかの基本的な知識ポイントを整理します。助けなければなりません。
#推奨学習: 1. データベース)
トランザクション全体で必要な操作すべてのコミットが成功するか、すべて失敗してロールバックされます。 )
操作の前後でデータベース内のデータの一貫性を確保します。 (たとえば、ユーザーの複数のアカウント間で送金するが、ユーザーの合計金額は変更されません) )
分離では、トランザクションを実行するためのトランザクションが必要です。データベース内のデータ 変更は、コミットされるまで他のトランザクションには表示されません。 (つまり、トランザクションはシリアルに実行する必要があります) )
永続性とは、トランザクションが送信されると、データベース内のデータへの変更が永続的に維持されることを意味します。データベース システムに障害が発生した場合でも、トランザクションをコミットする操作は失われません。 標準では 4 種類の分離が定義されています: (以下の分離は低から高の順であり、同時実行性は高から低の順です)
はシリアル化できます。 分離レベル ダーティリード Non-repeatable Phantom read
Read uncommitted 可 可 可 Read Committed 不可 可 おそらく Repeatable read read) 不可 不可 可
Serializable 不可 不可不可能
##要約: コミットされていない読み取りによりダーティ リードが発生します—> コミットされた読み取りによりダーティ リードは解決されますが、反復不可能な読み取りが発生します -> 反復可能な読み取りにより、一貫性のない読み取り結果の問題は解決されますが、ファントム読み取りが発生します (そうではありません)以前はありましたが、現在は) -> シリアル化可能によりファントム読み取りは解決されますが、多くの範囲ロックが追加され、ロック タイムアウトが発生する可能性があります;
(1) 通常のインデックス(制限はありません。)
(2) 一意のインデックス (インデックス列の値は一意である必要がありますが、null 値も許可されます。)
(3) 主キー インデックス (特別な一意のインデックス) (null 値は許可されません) 。通常、主キー インデックスはテーブルの作成時に同時に作成されます。)
(4) 結合インデックス
(5) クラスター化インデックスは、次に従って B ツリーを構築します。各テーブルの主キー、およびリーフ ノードにはテーブル レコード データ全体が格納されるため、クラスター化インデックスのリーフ ノードはデータ ページになります。
(6) 非クラスター化インデックス (補助インデックス) (ページ ノードはレコードの行全体を保存しません)。
(1) 条件内に or がある場合、インデックス付きの条件があっても使用されません(使用またはできるだけ少なくしてください);
(2) like クエリは % で始まります。たとえば、SELECT * FROM mytable WHEREt Name like'�min';
(3) 列の型が文字列の場合は、次のようにする必要があります。条件内で引用符で囲む必要があります。そうでない場合、インデックスは使用されません。
MyISAM
,## をサポートします。 #InnoDB,
Memory 一般的に使用される 3 つの
MySQL エンジン タイプの比較:
3 myisam インデックス InnoDB インデックス Memory インデックス
B ツリー インデックスのサポート サポート
ハッシュインデックスはサポートなしではサポートされません
R-Tree Index サポートあり サポートされていない サポートされていない
全文インデックス サポートされていない まだサポートされていない サポートされていない
つまり、SQL は実行中に次の順序で実行されます:
from、on、join、where、group by、having、select、distinct、union、order by
group by and集計関数は一緒に使用されます。
select a.Customer,sum(a.OrderPrice) from orders a where a.Customer=’Bush’ or a.Customer = ‘Adams’ group by a.Customer;
複数テーブルのクエリ (内部結合) を実現
select u.uname,a.addr from lm_user u inner join lm_addr a on u.uid = a.uid;
## を使用しても同じことが実現できます。 #select from where
select u.uname,a.addr from lm_user u, lm_addr a where u.uid = a.uid;5. ストアド プロシージャ
delimiter $$ create procedure procedure_bill() comment '查询所有销售情况' begin select billid, tx_time, amt from lm_bill; end $$ delimiter ;
呼び出しストアド プロシージャ
call procedure_bill();
表示ストアド プロシージャ
show procedure status like 'procedure_bill';
6. 多くのストアド プロシージャを確立します。 -対多のデータ テーブルの関係
データベース内で、2 つのテーブル間の関係が「学生テーブルとコース スケジュール」などの多対多の関係である場合、学生は複数のコースを選択できます。 、およびコースは複数の学生によって選択することもできます。選択; データベースの設計原則に従って、3 番目の関連テーブルを形成する必要があります。
/**学生表*/ CREATE TABLE Student ( stu_id INT AUTO_INCREMENT, NAME VARCHAR(30), age INT , class VARCHAR(50), address VARCHAR(100), PRIMARY KEY(stu_id) ) /*学生课程表*/ CREATE TABLE Course( cour_id INT AUTO_INCREMENT, NAME VARCHAR(50), CODE VARCHAR(30), PRIMARY KEY(cour_id) ) /**学生课程关联表*/ CREATE TABLE Stu_Cour( sc_id INT AUTO_INCREMENT, stu_id INT , cour_id INT, PRIMARY KEY(sc_id) )
/*添加外键约束*/ ALTER TABLE Stu_Cour ADD CONSTRAINT stu_FK1 FOREIGN KEY(stu_id) REFERENCES Student(stu_id); ALTER TABLE Stu_Cour ADD CONSTRAINT cour_FK2 FOREIGN KEY(cour_id) REFERENCES Course(cour_id);作成を完了します。
alter table table name addconstraint FK_ID 外部キー (外部キー フィールド名) REFERENCES 外観 Table name (対応するテーブルの主キーフィールド名)
;
alter table tb_active addconstraint FK_ID 外部キー(user_id) REFERENCES tb_user(id);
データベースにアクセスするときは、手動アクセスでもプログラム アクセスでも、データベース ファイルを直接読み書きするのではなく、データベース エンジンのドキュメント。
7.1 MYISAM エンジンと InnoDB エンジンの違い
は非トランザクション的に安全です。また、
InnoDBロックの粒度はテーブル レベルのロックですが、
InnoDB#MYISAM
はフルテキスト インデックス作成をサポートしますが、InnoDB
はフルテキスト インデックス作成をサポートしません。MYISAM
は比較的単純です。 InnoDB
、小規模なアプリケーションでは、
MYISAM
の使用を検討できます。
(6) InnoDB
テーブルは MYISAM# よりも安全です## テーブル。データ損失が発生した場合に、非トランザクション テーブルをトランザクション テーブルに切り替えることができます。
<ul>
<li>
<code>MYISAM
は非トランザクション テーブルを管理し、高速なストレージと取得、および全文検索機能を提供します。 select クエリを使用する場合は、
MYISAM がより適切な選択です。
はトランザクション処理アプリケーションに使用され、
ACID トランザクション サポートなどの多数の機能を備えています。アプリケーションで多数の
insert または
update 操作を実行する必要がある場合は、マルチユーザー同時操作のパフォーマンスを向上させる
innodb を使用する必要があります。
パラダイム:
以上がMySQLデータベースの基礎知識の備蓄(整理まとめ)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。