トランザクションのトランザクション
トランザクションが実行するために実行するかのいずれかに対する操作の論理的なセットです。
トランザクションメソッド
- オープントランザクション:トランザクションを開始
- トランザクションをコミットします。コミット
- トランザクションをロールバック:ロールバックを
トランザクションの特徴:ACID
- アトミック(原子性):含まトランザクションでの操作のいずれかが正常に実行、またはすべて失敗します。
- 一貫性(整合性):一貫性のある状態から別の一貫した状態にデータベースの総数。(合計は常に同じまま)
- 分離(隔離):トランザクションの動作は、同時に、互いに独立して実行トランザクション、内部データおよび動作に影響を与える他のトランザクションを実行しません。
- 永続性(耐久性):トランザクションのコミット後に、データベース内のデータへの変更は永続的であり、システムクラッシュのために失われることはありません。
同時トランザクションの状態
- ダーティ読み取り:トランザクションがデータにアクセスしているとき、この同じデータが送信され、別のトランザクション修正は、トランザクションの前には、変更されたデータ、すなわち読み込む「ダーティデータを」。
コミットされていないトランザクションのスレッドで別の更新データの業務でスレッドを読んでください。
- 非反復可能読み取り:トランザクションがデータにアクセスしているとき、他のトランザクションの修正データ、トランザクションが変更前の異なるデータを持つデータを読み込む前に、提出しました。
提出されたトランザクションのスレッドで別のデータ更新の業務でスレッドを読んでください。
- (ファントムリード)を廃棄物:トランザクションは再び読む前にデータトランザクション時間に、他のデータをテーブルにアクセスしている場合は、以前よりも多くのデータを。
総務は、追加のデータ・トランザクション挿入スレッドを読んでスレッドが送信されました。
注意点:
MySQLのデフォルトの分離レベル:反復可能読み取り
ORACLEのデフォルトの分離レベル:読み取りコミット
トランザクション分離レベルの照会
mysql 5
select @@session.tx_isolation;//查询当前会话事务隔离级别
select @@global.tx_isolation;//查询全局会话事务隔离级别
mysql 8
select @@session.transaction_isolation;//查询当前会话事务隔离级别
select@@global.transaction_isolation;//查询全局会话事务隔离级别
select @@transaction_isolation;//查询事务隔离级别
トランザクション分離レベルを設定します。
set session transaction isolation level 隔离登记;
トランザクション分離レベル
- 非コミット読み取り(非コミット読み取り):最低の分離レベル、読み取りデータの変更が提出されていない可能、可能性があり汚れにつながる読み込み、非反復可能読み取り、ファントムリード。
- 読んで(コミット読み取り)コミット:リードデータの変更、コミットを許可抗ダーティリードをするだけでなく、反復不能読み取り、ファントム読み取りを発生する可能性があります
- 反復可能読み取り(反復度):しっかり自体が変更されない限り、同一のデータ読み出しの結果は、常に同じです。それ以外の場合は、トランザクションのフロントエンド、データが同じで、トランザクションの終了後に、データの読み出しが変化する、抗ダーティリード、反復不能読み取り、ファントム読み取りがまだ発生する可能性があります
- シリアライズ(シリアライズ):最高の分離レベル、すべてのトランザクションが順次一つずつ実行され、そのような取引の間に干渉を生成することは不可能である、低効率は、汚いは、非反復リードとファントムリードを読み取る防止することができます。
分離レベル | ダーティー読み取り | 非反復可能読み取り | ファントム読み取り |
---|---|---|---|
READ UNCOMMITTED- | √ | √ | √ |
READ-COMMITTED | × | √ | √ |
REPEATABLE-READ | × | × | √ |
SERIALIZABLE | × | × | × |
ビュービュー
create [algorithm = {undefined | merge | temptable}]
View 视图名
AS
select 查询语句
--删除视图
drop View 视图名;
algorithm
ビュー選択アルゴリズム。undefined
これは、自動選択アルゴリズムを意味し、merge
そのような置換された対応する文の一部の部分図その合成ビュー定義文を使用して示す図。temptable
それは、一時テーブルに結果を表示し、次に文を実行し、一時テーブルを使用すると述べましたwith check option
ビューを更新すると、ビューの範囲内の表現を確保します。
簡単に言えばそのように説明することができる:ビューを変更することによって作られ、ビューが変更結果を通して見なければなりません。
トリガトリガ
create trigger 触发器名
after/before insert/update/delete on 表名
for each row
begin
sql语句;
end;
sql语句操作;
-- 删除触发器
drop trigger 触发器名;
例:
create trigger tg4
after update on tbl_order
for each row
begin
update goods set num = num + old.much-new.much where id= old.gid/new.gid;
end;
-- 会发现商品1的数量又变为8了
update tbl_order set much = 4 where oid= 4;
- 新:範囲:挿入に使用することができ、更新トリガー
- 旧:範囲:削除、更新トリガーで使用することができます
索引索引
CREATE TABLE table_name [col_name data type]
[unique|fulltext] [index|key] [index_name](col_name[length])[asc|desc]
- ユニーク|全文はオプションで、一意のインデックスを表し、フルテキストインデックス作成
- インデックスとキーは同義であり、両方とも同じ効果を持って、指定したインデックスを作成するには
- INDEX_NAMEは、インデックスの名前を指定します。指定されていない場合、任意であり、インデックスCOL_NAMEのデフォルト値
- COL_NAMEは列インデックスが望まれているフィールドを作成し、列がテーブルに定義されたデータの複数列から選択されなければなりません
- インデックスの長さを指定するためのインデックスの長さを示すオプションの長さパラメータだけの文字列タイプフィールド
- インデックス値ストレージを昇順または降順ASCまたはDESCを指定
#查看:
show indexes from `表名`;
#或
show keys from `表名`;
#删除
alter table `表名` drop index 索引名;
###一般的な指標
(1)直接インデックスを作成
CREATE INDEX index_name ON table_name(col_name);
インデックス(2)テーブル構造を変更を加えること
ALTER TABLE table_name ADD INDEX index_name(col_name);
同時に索引を作成する場合(3)テーブルを作成します
CREATE TABLE `news` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` varchar(255) NOT NULL ,
`content` varchar(255) NULL ,
`time` varchar(20) NULL,
PRIMARY KEY (`id`),
INDEX index_name (title(255))
);
(4)インデックスを削除
DROP INDEX index_name ON table_name;
或者
alter table `表名` drop index 索引名;
###複合インデックス(組合せインデックス)
総合指数は:複合インデックスは、複数のフィールド上に作成したインデックスです。「最も左接頭辞」の原則を遵守する複合インデックス、クエリの最初のフィールドの複合インデックスの、すなわち使用は、インデックスが使用されます。そのため、インデックス・カラム内の複合索引の順序が不可欠です。
(1)複合インデックスを作成します
create index index_name on table_name(col_name1,col_name2,...);
インデックスのみ
一意のインデックス:一意のインデックスと通常指標と同様に、主な違いは、ある列の一意のインデックス制限値は一意であるが、NULL値(のみ許可ヌル値)を可能にしなければなりません。
(1)は、一意のインデックスを作成します
# 创建单个索引
CREATE UNIQUE INDEX index_name ON table_name(col_name);
# 创建多个索引
CREATE UNIQUE INDEX index_name on table_name(col_name,...);
(2)の場合、指定されたインデックスに直接テーブルを作成します
CREATE TABLE `news` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` varchar(255) NOT NULL ,
`content` varchar(255) NULL ,
`time` varchar(20) NULL DEFAULT NULL ,
PRIMARY KEY (`id`),
UNIQUE index_name_unique(title)
)
主キー索引
主キーのインデックスは特別な一意のインデックスである、テーブルは1つのプライマリキーを持つことができ、NULLを許可していません。通常、同時にテーブルの時に建設主キーのインデックスを作成します。
(1)主キーインデックス(テーブルの作成時に添加)
CREATE TABLE `news` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` varchar(255) NOT NULL ,
`content` varchar(255) NULL ,
`time` varchar(20) NULL DEFAULT NULL ,
PRIMARY KEY (`id`)
)
フルテキストインデックス
フルテキストインデックスを追加するためのテーブルを作成します。
CREATE TABLE `news` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` varchar(255) NOT NULL ,
`content` text NOT NULL ,
`time` varchar(20) NULL DEFAULT NULL ,
PRIMARY KEY (`id`),
FULLTEXT (content)
)
(2)直接インデックスを作成
CREATE FULLTEXT INDEX index_fulltext_content ON table_name(col_name)
ストアドプロシージャ
ストアドプロシージャは、SQL文の特定のセットを達成するために、ユーザは、パラメータを割り当てることができ、ストアドプロシージャの実行の名前で呼ばれるように、プログラム可能な関数の集合です。
ストアドプロシージャを作成します。
create procedure 过程名(in/out/inout 参数名 参数类型)
begin
sql语句 --> 一段业务逻辑
可用sql语法
end;
create procedure demo_inout_parameter(inout p_inout int)
begin
select p_inout;
set p_inout=2;
select p_inout;
end;
-- 调用存储过程
set @p_inout=1;
call demo_inout_parameter(@p_inout);
select @p_inout;
drop procedure 存储过程名
IN:パラメータ値が格納(中に変更することができるSET)、変数名、パラメータの値を選択します。パラメータの値を返すことができません。
OUT:パラメータ値が保存中に変更される可能性があり、かつリターン
INOUT:呼び出すときは、指定されており、変更と返されることがあります
機能
-- 如果有这个函数,就删除
drop function if exists 函数名;
-- 创建一个无参的函数
create function hello ()
-- 设置函数的返回类型
returns 参数类型,如:varchar (255)
begin-- 函数头
-- 中间的是函数体
return '一个简单的mysql函数'; -- 函数的返回值
end; -- 函数结尾
--调用函数
select hello(); -- select 函数名
ストアド・プロシージャおよび関数との間の差
-
基本的に違いはありません、唯一の機能は、return文によって、単一の値またはテーブルオブジェクトを返します。
ストアドプロシージャは、リターンを許可していないが、複数のパラメータ値を介して返すことができます
この関数は、コールを選択することができ、埋め込みSQLで使用することができます。ストアドプロシージャではありません
-
唯一の機能では、ストアドプロシージャのタイプイン/アウト/ INOUTタイプ
三つのフォームデータベース
-
最初のパラダイム:レッツRすべての属性は、より基本的なデータ単位で分解されていない、Rを満たすが、最初のパラダイムが1NFと略記されると述べました。
** **列を分割することはできません必要な属性は、もはや分解アトミックではありません。
-
第二のパラダイム:第1正規形リレーショナルスキーマR及びRは、すべての非プライマリ属性はR、Rの候補キーのそれぞれの特性に完全に依存しているがある場合、2NFと略記する、第二通常言います。つまり:データのみを保存することができ、テーブルは、同じデータベーステーブルに格納されたデータの多様性を置くことができません
コードに完全に依存して、非主要属性についての素敵なパラダイムは、部分的に依存して排除します。
-
第3のパターンは:レッツRがパラダイム満たされる最初の条件のリレーショナル・モデルである、R Xは、プロパティの任意のセットが一つの候補は、任意のRをキーワードXが非送信に依存している場合、であり、R満たすは、第三のパラダイムは3NFとして単に、前記しました。各列のデータを直接に直接関係しないが、主キーに関連するとされています。
例えば、各部門は、部門番号(DEPT_ID)、部門名、部門説明会及び他の情報を持っている部門情報テーブルがあります。そして、従業員情報テーブルの後に部門番号を一覧表示することができなくなり、スタッフ情報テーブルの追加について部署名、部署などに関する部門情報で。ありません
依存転送を排除し、2つのパラダイムを満たします