MySQL の主キーとトランザクションの詳細な説明

MySQL の主キーとトランザクションの詳細な説明

1. MySQLの主キーとテーブルフィールドに関するコメント

1. 主キーと自動増分

通常、各テーブルには、各データの一意性を示す主キーが 1 つだけあります。

特徴: 値は繰り返すことができず、nullにすることもできません

フォーマット: テーブルテストの作成 (ID int 主キー)

主キー+自動増分書き込み方式:

フォーマット: create table test (ID int primary key auto_increment)

注意: 自動インクリメントは主キーでのみ使用できます (別途定義した場合はエラーが報告されます)

2. テーブルフィールドに関するコメント

mysql> alter table test modify Name varchar(12) comment 'ユーザー名';

3. 複数テーブルクエリ

mysql> テーブル A を作成します (ID int 主キー auto_increment、Name varchar(12)、Department int)。
mysql> テーブル B を作成します (ID int 主キー auto_increment、Name varchar(12))。
mysql> B(Name) に値 ("Finance")、("Market") を挿入します。
mysql> insert into A(Name,Department) values("张三",1),("李四",2),("王五",2);
mysql> select B.Name 部门,A.Name from B,A where B.ID=2 and A.Department=2;

2. データベーストランザクションの概要

データベース: リレーショナル データベース (トランザクションをサポート)、非リレーショナル データベース (サポートなし)

  • トランザクションとは: トランザクションは、バッチ操作が完全に実行されるか、まったく実行されないかのいずれかになり、データの整合性が維持されます。簡単に言えば、成功か失敗かのどちらかです。

トランザクションには複数の SQL ステートメントが含まれており、これらの SQL ステートメント間には特定の関係があります。

  • トランザクションはN個のSQL文で構成できます(N >= 0)
  • すべてのデータベース ストレージ エンジンがトランザクションをサポートしているわけではありませんが、InnoDB ストレージ エンジンはトランザクション処理をサポートしています。

1. データベーストランザクション特性(ACID)

取引特性効果
アトミックトランザクションのすべての操作は完了するか、まったく完了しないかのいずれかであり、中間リンクで終了することはありません。
一貫性トランザクションの開始前およびトランザクションの終了後のデータベースの整合性制約は違反されません。
分離複数のトランザクションがデータベース内の同じデータに同時にアクセスする場合、相互関係が明らかになります。
耐久性トランザクションが完了した後も、行われた変更は保持され、失われることはありません。

2. トランザクション分離のないトランザクション同時実行

  • ダーティ リード: トランザクション A は、コミットされていないトランザクション B によって変更されたデータを読み取ります。トランザクション B が失敗してロールバックすると、トランザクション A はダーティ データを読み取ります。
  • 反復不可能な読み取り: 同じトランザクションで、同じデータを読み取った結果が不一致になります (データの場合)。
  • ファントム リード: 同じトランザクションで、同じクエリが異なる結果を複数回返します (テーブルの合計行数に対して)。

違い:

  • ダーティ リードと反復不可能なリード: ダーティ リードとは、トランザクションがまだコミットされていない更新されたデータを読み取ることです。反復不可能な読み取りとは、同じトランザクションで複数回読み取られるデータが異なることを意味します。
  • 非反復読み取りとファントム読み取り: どちらも同じトランザクション内にあります。前者は複数回読み取られるデータが異なることを意味し、後者は複数回読み取られるデータが完全に異なることを意味します。

分離レベル:

分離レベル効果
SERIALIZABLEダーティリード、非反復リード、ファントムリードを避ける
REPEATABLE-READダーティリードと非反復リードを避ける
READ-COMMITTEDコミットダーティリードを避ける
READ-UNCOMMITTED未コミット効果なし

MySQL は上記の 4 つの分離レベルをサポートしており、繰り返し読み取りがデフォルトです。分離レベルを変更する場合は、次のようにする必要があります: sed -i '/\[mysqld]/a transaction-isolation = SERIALIZABLE' /etc/my.cnf

mysql> '%tx_is%' のような変数を表示します。
mysql>終了
[root@MySQL ~]# sed -i '/\[mysqld]/a transaction-isolation = SERIALIZABLE' /etc/my.cnf
[root@MySQL ~]# systemctl mysqldを再起動します
[root@MySQL ~]# mysql -uroot -p123123 -e "'%tx_is%' のような変数を表示します。"

4.MySQLデータベース管理トランザクション

トランザクションを管理するための 3 つのコマンド:

  • BEGIN: トランザクションを開始し、その後に複数のデータベース操作ステートメントを実行して開始します。
  • COMMIT: 前の BEGIN 操作に対応してトランザクションのコミットを開始し、トランザクション処理の結果をデータ ファイルに保存します。
  • ROLLBACK: トランザクションのロールバックを開始します。BEGIN と COMMIT の間で、トランザクション内のすべてのステートメントが取り消され、データは BEGIN 前の状態に復元されます。
  • set autocommit = 0/1: MySQL 接続プログラムを終了するとき、または次の DML (データ操作言語) ステートメントを実行するときの自動コミットを無効または有効にします。
mysql> テーブル C(ID int) を作成します。
mysql> C 値(1),(2) に挿入します。
mysql> C から * を選択します。
mysql> 開始します;
mysql> C値に挿入(3);
mysql> コミット;
mysql> C から * を選択します。

mysql> show variables like 'autocommit'; #自動トランザクションコミットを有効にするかどうかを確認しますmysql> BEGIN;
mysql> C値に挿入(4)
mysql> C から * を選択します。
mysql>終了
[root@localhost ~]# mysql -uroot -p123123 -e "ID=4 の Coco.C から * を選択"

set autocommit=0 : データベースの変更を一時的に有効にします (永続的に変更したい場合は、 sed -i '/\[mysqld]/a autocommit=0' /etc/my.cnf変更する必要があります)

mysql> 自動コミットを 0 に設定します。
mysql> Coco.C から * を選択します。
mysql> Coco.C に値を挿入します(4);
mysql> ID=4 の Coco.C から * を選択します。
[root@localhost ~]# mysql -uroot -p123123 -e "ID=4 の Coco.C から * を選択"

知らせ:

  • BEGIN または START TRANSACTION を使用してトランザクションを開始した後、COMMIT または ROLLBACK を使用してトランザクションを終了するまで、自動コミットは無効のままになります。
  • その後、自動コミット モードは以前の状態に復元されます。つまり、BEGIN の前に autocommit = 1 の場合、このトランザクションの完了後も autocommit は 1 のままになります。
  • BEGIN の前に autocommit = 0 の場合、このトランザクションの完了後も autocommit は 0 のままになります。

1) 別名

mysql> ID=1 の場合、A から ID を "Number"、Name を "Name"、Department を "Department" として選択します。
mysql> ID = 1 の場合、A から ID "Number",Name "Name",Department "Department" を選択します。

2) 重複排除

mysql> A から別の部門を選択します。

3) AND演算子とOR演算子

AND: 論理 AND (すべての条件を満たす必要があります); OR: 論理 OR (条件の 1 つだけが満たされている必要があります)。

mysql> ID >= 3 かつ Department = 2 の場合、A から * を選択します。
mysql> ID >= 3 または Department = 2 の場合、A から * を選択します。

  • in: クエリする特定のフィールドに複数の値がある場合は、in キーワードを使用できます。
  • との間: と両側の数値を含む、2 つの値の間。
mysql> IDが(1,3,4)であるAから*を選択します。
mysql> IDが(1,3,4)に含まれないAから*を選択します。
mysql> ID が 1 から 3 の間の A から * を選択します。

4) SQL LIKE演算子

  • -_: 1 つの不明な文字を表します。
  • - %: 複数の不明な文字を表します。
  • たとえば、A% は A で始まり、% は BB で終わり、%C% は C を含み、_D% は 2 番目の文字が D であり、%E__ は最後から 3 番目の文字が E であり、%@163.com は 163 の電子メール アドレスです。
mysql> select * from A where Name like "%三%";
mysql> select * from A where Name like "%三%" or Name like "%四";

5) SQL ORDER BY句

  • asc: 昇順(デフォルトは昇順)
  • desc: 降順。
mysql> select * from A order by ID desc;
mysql> A から Department,ID desc で * を選択します。

6) 制限条項

mysql> C から * を選択します。
mysql> C 制限 2 から * を選択します。
mysql> C 制限 0,2 から * を選択します。

要約する

これで、MySQL の主キーとトランザクションに関するこの記事は終了です。MySQL の主キーとトランザクションに関するより詳しい情報については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL ストアド プロシージャの例 (トランザクション、出力パラメータ、ネストされた呼び出しを含む)
  • MySQLにおけるトランザクションとは何か、そしてそれをどのように使用するか
  • MySql トランザクションの使用法と例の詳細な説明
  • MySQLはトランザクションのコミットとロールバックの例を実装しています
  • MySQL のトランザクションに関する包括的な理解
  • MySQLのトランザクションメカニズムの簡単な紹介
  • Mysql ストアド プロシージャでトランザクション インスタンスを使用する
  • MySQL の 4 つのトランザクション分離レベルの詳細な説明と比較
  • MySQL ストアド プロシージャ トランザクション管理の簡単な分析

<<:  ドロップダウンメニューとスライドメニューのデザイン例

>>:  tdコンテンツは自動的にテーブルを折り返します。幅を設定すると、テキストが自動的に折り返されます。

推薦する

IDEA で Linux コマンドを使用する方法

Windows システムと比較して、Linux システムは多数の豊富なコマンドライン ツールを提供し...

Tomcat8はcronologを使用してCatalina.Outログを分割します

背景tomcat によって生成された catalina.out ログ ファイルが分割されていない場合...

Dockerイメージをプルしてバージョンを確認する方法

イメージのバージョンとタグを確認するには、docker hubで確認する必要があります。アドレスは次...

ElementuiはデータをxlsxとExcelテーブルにエクスポートします

最近、Vue プロジェクトについて知り、ElementUI でデータを xlsx および Excel...

Vueは動的に生成されたコンポーネントをドラッグアンドドロップする要件を実装します

目次製品要件アイデア問題ライブラリ選択をドラッグコンポーネントを生成する方法コンポーネントを生成する...

MySql の忘れたパスワードの変更方法はバージョン 5.7 以上に適しています

1. まずmysqld.exeプロセスを停止します2. cmd を開き、mysql の bin ディ...

Linux ソースコードからのソケット (TCP) クライアント側での接続の例の詳細な説明

序文著者は、アプリケーションからフレームワーク、オペレーティング システムに至るまで、あらゆるコード...

MySQLでANDとORを組み合わせる問題を解決する

以下のように表示されます。 SELECT prod_name,prod_price FROM pro...

Win10 での MySQL 8.0.20 のインストールと設定のチュートリアル

Win10 システムでの MySQL 8.0.20 のインストールと設定の超詳細なチュートリアルMy...

MySQL エラー: 接続数が多すぎる場合の解決策

MySQLデータベースの接続が多すぎますこのエラーは明らかに、mysql_connect の後に m...

Vueのドラッグスクリーンショット機能を実装する簡単な方法

マウスをドラッグしてページのスクリーンショットを撮ります(指定した領域にスクリーンショットをドラッグ...

Dockerはbusyboxを使用してベースイメージを作成します

Docker イメージの最初の行は FROM alpine などのイメージで始まりますが、最初のベー...

IE6/7 における a.getAttribute(href,2) 問題の分析と解決

簡単な説明<br />IE6および7では、一般的なaタグ(HTMLで記述され、DOM操作...

Centos7でのパーティションのフォーマットとマウントの実装

Linux では、ハードディスクの追加やパーティションの再マウントといった状況に頻繁に遭遇します。こ...