- トランザクション
1)mysqlの作業単位は、1つ以上のsqlステートメントで構成されています。「成功しなかった場合、あなたは慈悲深くなります。」すべてが正常に実行されるか、すべてがデータの一貫性を確保できません。
2)トランザクションのロールバック:トランザクションでSQLの実行が失敗した場合、ROLLBACKはトランザクションをロールバックし、トランザクションが実行される前の状態にデータを復元し、データの整合性を確保できます。
3)前提:mysqlストレージエンジンInnoDB
4)トランザクション特性:ACID
アトミックATOMICITY
トランザクションSQLステートメントは分割できず、すべて成功するか、すべて失敗します。
一貫性の一貫性
トランザクションが成功したか失敗したかに関係なく、データは常に一貫性があります。
分離ISOLATION
トランザクションとトランザクションは互いに分離されており、互いに影響を及ぼしません。
永続的なDURABLITY
トランザクションが正常に送信されると、データへの変更は永続的であり、トランザクションをロールバックすることはできません。
5)
トランザクションのコミットCOMMITによって表示されるコミットトランザクション。
トランザクションDDL、DCLなどの暗黙的なコミットにより、トランザクションの暗黙的なコミットが発生する可能性があります。
6)トランザクションの操作
BEGIN
COMMIT
ROLLBACK
SAVEPOINT
7)トランザクションの自動コミットモード
mysqlのトランザクションは自動的にコミットされます。つまり、COMMITステートメントはデフォルトで各SQLステートメントの後に追加されます。
mysqlの自動トランザクションコミットモードを表示します。
SHOW VARIABLES LIKE 'autocommit'
mysqlの自動送信モードを変更します
SET AUTOCOMMIT=1 表示开启
SET AUTOCOMMIT=0 表示关闭
テーブル内のレコードをクエリするためのDQLSELECTステートメント
1)単純なクエリ
SELECT 字段1,字段2,....,字段n FROM 表名 WHERE子句
それらの中で:
テーブル内のすべてのフィールドにクエリを実行する場合は、ワイルドカード*を使用して示すことができます。
フィールドの後にエイリアスを追加できます。フィールドASエイリアス、ASは省略でき、通常は省略できます。
テーブル名は、ASを使用してエイリアスを指定することもできます。
2)演算子を使用してクエリフィールドを処理します(テーブルの元のデータには影響しません)
+ - * /
SELECT ename, sal+2000 'salary',hiredate FROM emp 查询的工资每人增加2000元
3)NULL値
nullは、0の値でも、最大値でも、最小値でもありません。不確定な値です。
nullが算術演算に参加した結果はまだnullです。
nullを計算に参加させたい場合は、nullのデフォルト値を指定し、輸送に参加して、COALESCEを使用できます。
SELECT ename, COALESCE(sal,0)+2000 'salary',hiredate FROM emp
4)重複レコードを削除するDISTINCT
SELECT DISTINCT 字段名 FROM 表 WHERE子句
- ファジークエリ
1)文字列フィールドのファジークエリにLIKEが使用されます
2)このシンボルが表示される位置は任意の数の文字に置き換えることができます
WHERE ename LIKE '王%' 查询姓王的员工
3)シンボルが表示される位置は、1文字のみである必要があります。
WHERE ename LIKE '王_' 比如查询全名为两个字的王姓员工(比如“王菲”)
- 並べ替えORDERBY
1)並べ替えとは、特定のルール(昇順または降順)に従ってクエリ結果セットを並べ替えることを指します
。2)ASC昇順(デフォルト)DESC降順
3)構文:
ELECT子句 ORDER BY 字段 ASC/DESC
それらの中で:
ORDER BYの句は、where句の後に配置する必要があります。
ソートされたフィールドにnull値がある場合、昇順でソートされている場合、null値のレコードが一番上にあり、降順でnullが最後にあります。
日付の並べ替えでは、前の日付は小さな値と見なされ、後の日付は大きな値と見なされます。
文字列はA〜Zに従ってソートされ、ソートされます。
中国語の文字は辞書の順序に従ってソートされます。gbkエンコーディングでない場合は、変換関数を使用して変換する必要があります。
SELECT * FROM emp ORDER BY CONVERT(ename USING gbk) DESC
複数のフィールドで並べ替えることもできます
SELECT子句 ORDER BY 字段1 ASC/DESC, 字段2 ASC/DESC
- クエリによって返される結果セットの数を制限します
1)アプリケーションシナリオ:ページングクエリ
2)構文:
SELECT子句 LIMIT n n表示获取结果集的前n条记录
SELECT子句 LIMIT index, length 表示从结果集的第index处开始,取length条记录。index为0表示从第一条记录。
-
関数
mysqlで提供される強力で使いやすい関数は、データ管理における開発者のクエリと操作を改善します。構文:関数名(パラメーターリスト)
一般的に使用される関数の分類
1)数学関数
ABS(x)はxの絶対値を返します
SQRT(x)平方根
PI()Pi
MOD(x、y)xの残りをyで割った値を求めます
MOD(4.5,3) 结果是1.5
CEIL(x)は、x以上の最小の整数を返します
CEIL(3) 返回3
CEIL(3.3) 返回4
アプリケーションシナリオ:1未満が1で計算されるシナリオ
FLOOR(x)は、x以下の最大の整数を返します
FLOOR(3) 3
FLOOR(3.4) 3
FLOOR(-3.4) -4
アプリケーションシナリオ:1つ未満の破棄されたシナリオ
ROUND(x、y)は、yの小数点以下の桁数を予約し、切り上げます。
ROUND(23.55,1) 23.6
ROUND(23.55,-1) 20 -1表示保留到十位数
TRUNCATE(x、y)は小数点以下の桁数yを保持し、次の切り捨ては破棄され、丸めは行われません
RAND()はランダムな数値を生成します
アプリケーションシナリオ:
ランダムソート:たとえば、100個のテスト質問が質問バンクテーブルからランダムに選択されます
SELECT * FROM 题库表 ORDER BY RAND() LIMIT 100
POW(x、y)xのy乗
三角関数
2)文字列関数
CONCAT(str1、str2、…)文字列スプライシング
LOWER(str)/ LCASE(str)すべて小文字に変換
UPPER(str)/ UCASE(str)すべて大文字に変換
LEFT(str、n) / RIGHT(str、n)左側/右側に長さnのサブストリングを返し
ますTRIM(str)ストリングの最初と最後のスペースを削除します
SUBSTRING(str、index、length)
REVERSE(str)
3)日付と時刻
CURDATE()/ CURRENT_DATE()現在の日付
NOW()現在の年、月、日、時、分、秒
CURRENT_TIMESTAMP()現在のタイムスタンプ
DATE_ADD(hiredate、interval 10 DAY)入力日と10日
DATE_SUB
DATE_FORMAT(date、fmt)
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s') FROM DUAL
4)プロセス関数
CASECASE
値WHEN式THEN結果
ELSE結果
END
CASE WHEN sal>=3000 THEN '高收入'
ELSE '低收入'
END 'level'
IF
IF(式1、式2、式3)
式1の値がtrueの場合、式2の値を返し、それ以外の場合は式3の値を返します。
IFNULL
IFNULL(式1、式2)
式1がnullでない場合、式1の値を返し、そうでなければ式2の値を返す
NULLIF
NULLIF(式1、式2)
式1 =式場合式2は、nullを返します。それ以外の場合は、式1の値を返します。
5)その他の関数
VERSION()
USER()
DATABASE()
-
3つのパラダイム
1)最初のパラダイム
表のフィールドはアトミックになるように設計されており、分割することはできません。(特定のシナリオに応じて)
2)2番目の通常の
形式では、テーブルには一意の識別子としてプライマリキーがあり、他のフィールドはプライマリキーに依存します。
(2番目の通常の形式はテーブルを分割することです)
3)3番目の通常の形式は
一時的な依存関係を禁止しますA-> B-> C -
マルチテーブルジョイントチェック
1)マルチテーブルジョイントチェックの根本原因:
データベースの設計は3つのパラダイムに従い、関連データは複数のテーブルに保存されます。
2)カルテシアン製品
2つのテーブルのカルテシアン製品。例として従業員テーブルと部門テーブルを取り上げます。
SELECT * FROM 表1, 表2
カルテシアン製品の意味:新入社員と新入社員部門のすべての可能な組み合わせ。
テーブル共同調査の過程で設定された中間結果。
3)同等のクエリ
SELECT表1.フィールド1、表1.フィールド2、表2.フィールド1、表2.フィールド2 FROM表1、表2WHERE結合条件
SELECT e.empno, e.ename,d.dname,d.loc FROM emp e,dept d WHERE e.deptno=d.deptno
nテーブルの接続条件n-1
4)非等価接続等価接続
の条件として照会される複数のテーブル間に共通のフィールドはありません。
従業員の名前、給与、および給与等級を照会します。(従業員情報テーブルと給与等級テーブルの間に同じフィールドはありませんが、従業員の給与を使用して、給与等級テーブルの等級を満たす間隔を判断できます)
5)自己結合クエリ自己
との自己結合クエリ(クエリのために2つの同一のテーブルを結合します)
従業員とその上司の名前をクエリします
SELECT e1.ename '员工名',e2.ename '主管名' FROM emp e1,emp e2 WHERE e1.mgr=e2.empno
- SQL 99
1)カルテシアン製品CROSS JOIN
SELECT * FROM 表1 CROSS JOIN 表2
2)自然接続NATURAL JOIN
前提:2つのテーブルは接続条件と同じフィールドを持っています
SELECTフィールドFROMテーブル1 NATURALJOINテーブル2
SELECT e.ename,d.dname FROM emp e NATURAL JOIN dept d
USINGを使用して接続条件のフィールドを指定できますが、NATURALを削除します
SELECT e.ename,d.dname FROM emp e JOIN dept d USING(deptno)
3)ON句
JOINキーワードを使用する場合、ON句を使用して接続条件を指定できます。
4)左結合LEFT JOIN
は、結合の左側のテーブルをメインテーブル、右側のテーブルをスレーブテーブルとします。マスターテーブルのレコードがスレーブテーブル内で一致するレコードを見つけることができるかどうかに関係なく、マスターテーブル内のすべてのレコードが表示され、一致するものはありません。フィールドにnullが表示されます。
5)右結合クエリ右結合は
左結合クエリと同じで、右側のテーブルがマスターテーブル、左側のテーブルがスレーブテーブルです。
- グループ化関数
MAX()/ MIN()は最大値と最小値を
返しますSUM()は合計を返します
AVG()は平均値を返します
COUNT()はレコード数を返します
SELECT COUNT(*) FROM emp 查询员工的总数
注:グループ化関数はNULL値を除外します
- DISTINCTは、クエリ結果の重複レコードを削除します
SELECT DISTINCT deptno FROM emp 从员工信息表中查询部门编号
SELECT COUNT(DISTINCT deptno) FROM emp 查询员工表中有员工的部门的个数
- グループ化クエリ
1)構文
SELECT句GROUP BYフィールド1、フィールドn
ここで、
selectに続くフィールドは、group byのグループ化フィールドに含まれている必要があります。含まれていない場合、意味がありません。
選択後にグループ関数を使用する場合、グループ関数のパラメーターのフィールドは、groupbyの後のフィールドではない可能性があります。
SELECT deptno,AVG(sal) FROM emp GROUP BY deptno 求员工表中的各部门的平均工资
SELECT deptno,job,AVG(sal) FROM emp GROUP BY deptno,job 求每个部门每个岗位的员工的平均工资
2)グループ化後に結果をフィルタリングするHAVING句
SELECT子句 FROM 表 GROUP BY 字段 HAVING子句
HAVING句は、グループに分割された結果をフィルタリングするためのものです。
一般に、グループ化関数は、フィルタリングと条件付き判断のためのhaving句で使用されます。
グループ化後のデータは、どこでフィルタリングすることはできません。(WHEREはGROUP BYの前に表示されます)
3)GROUP BYは、
クエリのグループ化でwhereとhaveの違いを使用します。グループ化クエリのselectステートメントには、where句とhave句の両方を含めることができます。
ここで、はグループ化の前であり、持つことはグループ化の後であります。
グループ化する前にデータを制限し、グループ化後にデータを制限する場所。
- サブクエリ
1)
クエリデータは、別のクエリの結果を使用する必要がある、サブクエリが必要です。
サブクエリはselectステートメントを参照し、埋め込まれたselectステートメントはサブクエリまたは内部クエリと呼ばれます。
括弧は通常、サブクエリステートメントを囲むために使用されます。
(ヒント:通常、最初にブラケットを定数として扱い、フレームを作成してから、ブラケットを追加できます。)
サブクエリは、where句で、fromの後、および後に使用できます。
SELECT ename,sal FROM emp WHERE sal=(SELECT MIN(sal) FROM emp) 查询最低工资的员工姓名和工资
2)単一行サブクエリ
戻り結果は、1行1列(つまり、値)
=!=> <> = <=
3)複数行の
サブクエリサブクエリの結果が
INの複数の行を返す場合、戻り値の1つと一致するだけで十分です。
ANYは、サブクエリの結果の1つに一致します。
> ANYは結果の最小値より大きいことを意味します
<ANYは結果の最大値より小さいことを意味します
= ANYはINALLと同等
であり、サブクエリによって返される結果のいずれか
> ALLは返された結果の最大値より大きいことを意味します
<ALL結果の最小値未満
= ALLはすべての値に等しく、意味がありません。
注:サブクエリの結果にnull値がある場合、NOTINは使用されません
4)サブクエリはFROMの後に使用され
、サブクエリの結果は一時テーブルとして扱われます
出典:Neusoft Java Training