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

推薦する

SQL ストアド プロシージャの取得、データ取得、プロセス分析

この記事は主に、SQL のストアド プロシージャから返されたデータを取得するプロセスの分析を紹介しま...

簡潔なReactコンポーネントを書くためのヒント

目次スプレッド演算子を使用してプロパティを渡すのは避けてください関数パラメータをオブジェクトにカプセ...

CentOS8でのnmcliの使い方の詳しい説明

RHEL8/CentOS8 に基づく一般的な nmcli コマンド # IP を表示する (ifco...

コンパイル/サーバーなしでブラウザにCommonJSモジュールを実装する

目次導入1. one-click.jsとは2. パッケージングツールはどのように機能しますか? 3....

スクリプトを使用して、ワンクリックでDockerイメージをパッケージ化してアップロードします。

著者は1年以上マイクロフロントエンドプロジェクトに取り組んできました。チームは10個のマイクロアプリ...

VueでTypeScriptを使用する方法

導入近年、TypeScript を求める声がますます高まり、TypeScript はフロントエンドに...

Git サーバーを使用してデバッグ ブランチを表示し、修正する方法を 1 日 1 分で学習します。

デバッグブランチプロジェクトの通常の開発中に、以前にリリースされたバージョンにバグがある場合がありま...

MySQL ログイン警告問題の解決策

1. はじめにMySQL にログインすると、次のような警告が表示されることがよくあります。警告: コ...

MySQLデータ遅延ジャンプの問題の解決策

今日は、データベース遅延ジャンプに関する別の典型的な問題を分析しました。このプロセスでは、参考のため...

opensslを使用して無料の証明書を生成する方法

1: openssl とは何ですか? その機能は何ですか?適用シナリオは何ですか? Baidu 百科...

bashコマンドの使い方の詳細な説明

Linux では、基本的に vi エディタのように「.sh」拡張子を持つテキストの処理と実行を記述す...

HTML要素にフォーカスを設定する方法

コードをコピーコードは次のとおりです。 <本文<フォームアクション="&quo...

HTML 左、中央、右の適応レイアウト (calc css 式を使用)

最新の HTML 標準には、レイアウトを計算するために使用できる calc CSS 式があります。し...

MySQL学習データベース操作DML初心者向け詳細解説

目次1. ステートメントを挿入する1.1 行を挿入する1.2 複数行を挿入する1.3 クエリステート...

vue3で注意すべき2つのポイントを詳しく解説:セットアップ

目次vue2の場合vue3ではセットアップに関する注意事項セットアップライフサイクルは、before...