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コンテンツは自動的にテーブルを折り返します。幅を設定すると、テキストが自動的に折り返されます。

推薦する

jQuery を使用して、iframe 下の無効なページ アンカー ポイントの問題を修正する

適用シナリオ: iframe ページにスクロール バーがなく、親ウィンドウにスクロール バーが表示さ...

Linux deb パッケージの解凍、変更、その他の操作方法のコード例

さまざまな理由により、debパッケージ内のさまざまなファイルの内容を直接変更する必要がある場合があり...

macOS での MySQL 8.0.17 のインストールと簡単な設定チュートリアル

私が書いた内容が理解できない場合は、インターネット上に理解できるチュートリアルがない可能性があります...

1つのSQL文でMySQLの重複排除が完了し、1つが保持されます。

数日前、ある要件に取り組んでいたとき、MySQL で重複レコードをクリーンアップする必要がありました...

Windows システムに VirtualBox と Ubuntu 16.04 をインストールするための詳細なチュートリアル

1. ソフトウェアの紹介バーチャルボックスVirtualBox は、無料のオープンソース仮想マシン ...

ウェブページ作成に役立つコード

<br />ホームページの右側にあるスクロールバーを削除するにはどうすればよいですか? ...

Jenkins初心者のためのDockerデプロイメントチュートリアルの詳細な説明

この記事では、docker 経由で Jenkins+Maven+SVN+Tomcat をデプロイし、...

Linux 最速のテキスト検索ツール ripgrep (grep の最良の代替)

序文テキスト検索ツールといえば、Linux で最も便利でよく使われるツールの 1 つである grep...

docker compose を使用して consul クラスタ環境を構築する例

領事の基本概念サーバーモードとクライアントモードサーバー モードとクライアント モードは、consu...

nginx ssl を設定して https アクセスを実装する手順 (初心者向け)

序文サーバーを展開した後、私は大きな喜びを感じながら自分の Web サイトにアクセスし、見たものすべ...

MYSQL から MARIADB へのプロジェクト移行に関するチュートリアル

データベース (MySQL) を準備します。すでに MySQL をお持ちの場合は、これを無視できます...

CSS の 6 つの重要なセレクター (3 秒で覚える)

出典: https://blog.csdn.net/qq_44761243/article/deta...

小さなプログラムが天井に張り付いてしまう問題を完璧に解決するためにposition:stickyを使用する方法

最近、あるプロジェクトのクライアントが、上部に 2 つのタブ メニューを配置することを要求しました。...

mysql8.0.14.zip のインストール中にデータ フォルダを自動的に作成できませんでした。サービスを開始できません。

今日システムを再インストールした後、コンピューターに mysql を再インストールし、ZIP ファイ...

MySQL のスローログ監視の誤報問題の分析と解決

以前は、さまざまな理由により、一部のアラームは真剣に受け止められませんでした。最近、休暇中に、すぐに...