- 5.1制約は何ですか
- 5.2、トランザクションの概念
- 5.3、ステップ情勢を使用
- 5.4、並行性の問題情勢
- 提供されたデータベースのトランザクション分離レベルの5.5、四種類
- 5.6、SAVEPOINTの使用
データ操作言語
-
DML(データ操作言語-データ操作言語)は、以下の条件下で行うことができる:
-テーブルにデータを挿入する
-の変更既存のデータは、
-削除、既存のデータを -
トランザクションはDML文の数の作業で完成され
INSERT INTO sales_reps(id, name, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM employees WHERE job_id LIKE '%REP%';
- 挿入した場合の再挿入、ID列は、開始ブレークポイントから、1の後に最初からID列を削除削除した場合、TRUNCATEを取り除いた後、
- TRUNCATEは、フィルタ条件を追加することはできません、フィルタ条件を追加することができます削除
- 高効率のtruncate
- 削除戻り値は、影響を受けた行数を返すことはできません切り捨てます
- TRUNCATEは、削除、ロールバックすることができないバックをロールすることができます
データ定義言語
- ライブラリーを作成します。
create database 【if not exists】 库名【 character set 字符集名】;
- ライブラリを変更
alter database 库名 character set 字符集名;
- ライブラリの削除
drop database 【if exists】 库名;
- テーブルを作成します。
create table 【if not exists】 表名(
字段名 字段类型 【约束】,
字段名 字段类型 【约束】,
。。。
字段名 字段类型 【约束】
)
- 変更テーブル
列の追加
alter table 表名 add column 列名 类型 【first|after 字段名】;
制約または列の種類を変更します
alter table 表名 modify column 列名 新类型 【新约束】;
列名を変更します。
alter table 表名 change column 旧列名 新列名 类型;
列を削除
alter table 表名 drop column 列名;
テーブル名を変更します。
alter table 表名 rename 【to】 新表名;
- 削除テーブル
drop table【if exists】 表名;
- テーブルをコピーします
レプリケート表
create table 表名 like 旧表;
- コピーテーブルのデータ構造+
create table 表名
select 查询列表 from 旧表【where 筛选】;
データの種類
整数型 | バイト |
---|---|
TINYINT | 1 |
SMALLINT | 2 |
MEDIUMINT | 3 |
int型/整数 | 4 |
BIGINT | 8 |
- 特長:
①、あなたは符号なしの設定と署名し、デフォルトで署名し、符号なしで無署名を設定することができます
②、範囲外の場合、例外が出又は範囲報告され、閾値インサート
③、長さが指定されない場合があり、デフォルトでは長さになります
その後、ゼロで埋め残っていない場合は、ディスプレイの最大幅の長さを表すが、ZEROFILLを一致させる必要性、およびデフォルトunsigned int型になり
-
セットポイント:DECIMAL(M、D)
-
フロート:
。フロート(M、D)4
。ダブル(M、D)8 -
特長:
①、Mは+の小数部分の数の整数部分、小数部分のDの代表を表します
②、範囲のうち、異常なメッセージOUTまたは範囲、および挿入閾値場合
③、M及びDを省略することができるが、固定小数点、デフォルトはM 10で、D 0はデフォルトであります
④、高精度な場合、優先度は固定小数点を使用するのが有利です
-
CHAR、VARCHAR、バイナリ(短いバイナリ)列挙型、varbinary型(短いバイナリ)、(列挙のために保存)、セット(セーブ・セット)、テキスト(長いテキスト)、BLOB(バイナリラージ)
-
文字:文字(M)として書かれた固定長の文字、Mは省略することができる最大長Mを超えないことができ、デフォルトは1であります
-
VARCHAR:VARCHAR(M)として書かれた可変長文字は、Mを省略することができない最大長Mを超えることはできません
- 年に(1バイト)
- 日付の日(4バイト)
- 時間タイム(3バイト)
- 日時日付+時間(8バイト)
- タイムスタンプ日付+時間(4バイト)容易、文法パターン、改良版によるタイムゾーンは、現在のタイムゾーンの実際の時間を反映
制約
- テーブルデータの制約された方法追加の制約の一貫性や整合性、SQLの仕様データを確認してください。
- 表レベルの制約は必須です
- 制約は、(CREATE TABLEステートメントを使用して)テーブルを作成するときに指定することができ、またはテーブルの後にも、(ALTER TABLE文を経由して)作成することができます
- 6つの制約を以下に示します。
①、NULL以外の空でない制約、フィールドの規定は、空にすることはできません
②、UNIQUEユニーク制約、フィールドの規定は、テーブル全体で一意です
主キー(そして唯一の非空)③、PRIMARY KEY
④、FOREIGN KEY外部キー
⑤、CHECK制約をチェック
⑥、DEFAULTデフォルト値
-
注:MySQLはチェック制約をサポートしていませんが、あなたはどんな影響を与えることなく、チェック制約を使用することができます
-
:制限制約データ列制約は、に分けることができ
、単一の制約:各制約のみ、その行制約
複数列の制約:制約は、データ列の複数のそれぞれを制約することができ -
制約の範囲、制約に分けることができる:
の定義の後、カラムレベルの制約は、カラムと、カラムに作用することができる
テーブル・レベルの制約が列と、複数の列に作用することができるではなく、別途定義
- 非ナル値制約が現在の列がNULLでないことを確認するために使用され、非空制約は、オブジェクトのみのリストに表示されます。
- タイプヌル特徴:
すべてのタイプの値が整数、浮動小数点データ・タイプを含む、NULLにすることができ
、「空の文字列」NULLに等しくない場合、0がヌルに等しくありません - NOT NULL制約を作成します。
CREATE TABLE emp(
id INT(10) NOT NULL,
NAME VARCHAR(20) NOT NULL DEFAULT 'abc',
sex CHAR NULL
);
- NOT NULL制約を増やします
ALTER TABLE emp MODIFY sex VARCHAR(30) NOT NULL;
- NOT NULL制約を取り消し、デフォルト値を増やします
ALTER TABLE emp MODIFY NAME VARCHAR(15) DEFAULT 'abc' NULL;
- ヌル値の複数の可能唯一の制約:NULL
- 同じテーブルには、複数の一意性制約、列の複数の組み合わせの制約を持つことができます。ユニーク制約、一意制約名を作成するとき、あなたはそれを同じカラム名およびデフォルトを与えていない場合
- MySQLはユニーク制約にデフォルトする一意のインデックスを作成します
CREATE TABLE USER(
id INT NOT NULL,
NAME VARCHAR(25),
PASSWORD VARCHAR(16),
#使用表级约束语法,表示用户名和密码组合不能重复
CONSTRAINT uk_name_pwd UNIQUE(NAME,PASSWORD)
);
- ユニーク制約を追加します
ALTER TABLE USER ADD UNIQUE(NAME,PASSWORD);
ALTER TABLE USER ADD CONSTRAINT uk_name_pwd UNIQUE(NAME,PASSWORD);
ALTER TABLE USER MODIFY NAME VARCHAR(20) UNIQUE;
- 制約を削除します
ALTER TABLE USER DROP INDEX uk_name_pwd;
- 一意の主キー制約制約constraint +列の空でない組み合わせは一意の主キー制約でなければならない、ヌル値が許可されていないに対応
- 列レベルのモード
CREATE TABLE emp(
id INT AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(20)
);
- 表レベルモード
CREATE TABLE emp(
id INT NOT NULL AUTO_INCREMENT,
NAME VARCHAR(20),
CONSTRAINT emp_id_pk PRIMARY KEY(id)
);
- 複合モード
CREATE TABLE emp(
id INT NOT NULL,
NAME VARCHAR(20),
pwd VARCHAR(15),
CONSTRAINT emp_pk PRIMARY KEY(NAME,pwd)
);
- 主キー制約を削除します。
ALTER TABLE emp DROP PRIMARY KEY;
- 主キー制約を追加します。
ALTER TABLE emp ADD PRIMARY KEY(NAME,pwd);
- 主キー制約を変更します。
ALTER TABLE emp MODIFY id INT PRIMARY KEY;
- 外部キー制約は、2つのテーブル間の参照整合性を確保することであるか、外部キー関係は、二つのテーブルまたは二つのフィールドのテーブルを構築するために2つの参照フィールドの間にあります。
- これは、テーブルの主テーブルまたはnull外部キーの値に記載されていなければなりません。マスター表からの録画には、テーブルを参照すると、メインテーブルのレコードを使用して、データを削除したい場合は、必要がテーブルからの依存データレコードを削除し、その後、メインテーブル内のデータを削除することができ、削除されません。
- もう一つは、カスケードは、子テーブルのデータを削除します。
注:プライマリ・テーブルで参照外部キー制約の参照列は、主キーまたは一意キー制約列であります - 同じテーブルには、複数の外部キー制約を持つことができます
- 外部キー制約を作成します。
メインテーブル:
CREATE TABLE dept(
dept_id INT AUTO_INCREMENT PRIMARY KEY,
dept_name VARCHAR(20)
);
テーブルから:
CREATE TABLE emp(
emp_id INT AUTO_INCREMENT PRIMARY KEY,
last_name VARCHAR(15),
dept_id INT,
CONSTRAINT emp_dept_id_fk FOREIGN KEY(dept_id) REFERENCES dept(dept_id)
);
- 外部キー制約を削除します。
ALTER TABLE emp DROP FOREIGN KEY emp_dept_id_fk;
- 増加した外部キー制約
alter table emp add constraint emp_dept_id_fk foreign key(dept_id) references dept(dept_id);
- FOREIGN KEY:表の列は、テーブルレベルで指定されています
- REFERENCES:親表の列に示されています
- DELETE CASCADE ON(カスケード削除):親テーブルの列を削除すると、削除された列に対応する子テーブルでもあります
- DELETE SETのNULL(ブランクカスケード)ON:サブテーブル対応する列ブ
CREATE TABLE student(
id INT AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(20),
classes_name VARCHAR(20),
classes_number INT,
/*表级别联合外键*/
FOREIGN KEY(classes_name, classes_number)
REFERENCES classes(NAME, number) ON DELETE CASCADE);
業務
- トランザクションは、単一のユニットまたは複数のSQL文で構成され、このユニットでは、各ステートメントは、MySQLの相互依存的です。以下のような全ユニットの単一の一体ユニットは、SQLステートメントであるか、失敗したときにエラーを実行した場合、全体、ユニット全体がロールバックされます。すべてのデータは、物事によって影響される以前の状態に戻り始め、正常に実行されているすべてのSQL文単位ならば、物事がスムーズに実行されます。
- ショーエンジンによって、MySQLのストレージエンジンのサポートを参照してください
①、アトミック(原子性):トランザクションがいずれかのトランザクションに作業操作の不可分単位で発生し又は発生しないことを不可分手段
②、一貫性(整合性):トランザクションデータベースは、別の状態のアクチュエータ1つの一貫した状態から変換されなければなりません。
③、分離(単離):トランザクション分離は、トランザクションの実行を指す内部トランザクションデータの他のトランザクションによって妨害することができない、すなわち、操作及び使用する他のトランザクションの同時実行には、同時実行の個々のトランザクションを単離します間には、互いに干渉することはできません
④、 (耐久改訂)永続:トランザクションがコミットされると、それはデータベース内のデータを変更することを永続手段は永続的で、その後、他の操作やデータベースの障害は、その上の任意の影響を与えるべきではありません
-- 开启事务
set autocommit = 0;
start transaction;
-- 编写一组事务的语句
update account set balance = 10000 where username = 'Tommey周';
update account set balance = 10000 where username = 'Tommey';
-- 结束事务
rollback;
-- commit;
- 汚れを読む:2つのトランザクションがT1、T2は、T1、T2が更新されたリードが、まだロールバックした後、フィールドを提出していないためT2は、T1は、コンテンツは一時的かつ無効で読み込む場合。
- 非反復リード2つのトランザクションT1、T2のため、T1は、フィールドを読み、次にフィールドT2を更新し、その後、T1は再び同じフィールドから読み出し、値が異なっています。
- ファントムを読み取る2つのトランザクションの後にT1、T2、T1は、テーブルのフィールドから読み出され、その後、テーブルT1は、再び同じ読めば、テーブルにT2新しい行を挿入するために、より多くなり数行。
データベーストランザクションの分離:データベース・システムは、彼らがお互いに影響を与えないように、個々のトランザクションを同時に実行単離する能力を持って同時実行の問題のすべての種類を避けなければなりません
分離レベル | 説明 | ダーティー読み取り | 非反復可能読み取り | マジック読書 |
---|---|---|---|---|
READ UNCOMMITTED(コミットされていないデータを読みます) | 総務は、他のトランザクションのコミットの変更を読み取ることが許可されていません | √ | √ | √ |
COMMITTED READ(提出されたデータを読みます) | これは、読み取りの変化へのトランザクションが他のトランザクションによって提出された許可を指し | × | √ | √ |
REPEATABLE READ(反復可能読み取り) | トランザクションは、フィールドから何度も同じ値、トランザクションの期間を読み取ることができていることを確認し、他のトランザクションが更新されるように、このフィールドに禁止しました | × | × | √ |
SERIALIZABLE(直列化) | トランザクションがテーブルから同じ行を読み取ることができていることを確認し、トランザクションの期間は、他のトランザクションは、すべての同時実行性の問題を回避することができるテーブルの挿入、更新、削除の操作を、禁止しますが、パフォーマンスは非常に低いです | × | × | × |
- READ COMMITED、SERIALIZABLE:Oracleは、トランザクション分離レベルの2種類をサポートしています。Oracleのデフォルトのトランザクション分離レベル:READ
COMMITED - MySQLは4つのMySQLのデフォルトのトランザクション分離レベルのトランザクション分離レベルをサポートしてい:. REPEATABLE READを
- 各プログラムを起動MYSQLは、各データベース接続用に別のデータベース接続は、グローバル変数@@ tx_isolationを持っている現在のトランザクション分離レベルを示し得るでしょう。
- 現在の分離レベルを表示します。@@ tx_isolationを選択します。
- 現在のMySQL接続の分離レベルを設定します:
set transaction isolation level read committed;
- グローバル分離レベルのデータベース・システムの設定:
set global transaction isolation level read committed;
set autocommit = 0;
start transaction;
delete from account where id = 1;
savepoint a;-- 设置保存点
delete from account where id = 2;
rollback to a;