MySQL の一般的なコマンド:
データベースを表示 ;#データベースリストを表示
+ データベース名を使用してデータベースを開きます
show tables from + データベース名 (データベース テーブルを表示)
各文に忘れずに追加してください。
select database() はデータベースの名前を取得します
クレートテーブル + テーブル名(): 作成
desc+table name は、フィールド タイプを含むテーブルの構造を表示します。
select version(); データベースのバージョンを表示します (ログイン後)
mysql --version データベースのバージョンを表示する
DQL言語学習
データ クエリ言語 データ クエリ言語
DML言語:データ操作言語(追加、削除、変更)
DDL: データ定義言語
TCL: トランザクション制御言語
トランザクション制御言語
select 100: 定数値の問い合わせ
「ジョン」を選択します。
100*98 を選択します。
クエリ関数
選択 + 関数()
別名:分かりやすいように
クエリ対象のフィールドの名前が重複している場合は、エイリアスを作成することで重複を避けることができます。
select name 'name',age (エイリアス、スペースを使用することもできます)
重複排除: テーブル名から DISTINACT 部門 ID を選択します
+ 記号の役割: 文字列の連結に似ています
select '123' + 90 は、123 を数値型に変換しようとします。変換が成功すると、加算演算が実行されます。
以下の状況が発生した場合、変換は失敗し、文字列型は 0 に変換され、その後 +
「ジョブ」+ 10 を選択してください
null + 何かを選択します。いずれか 1 つが null である限り、結果は null でなければなりません
CONCAT('a','b','c') は、abc を接続して abc になります
select IFNULL(,) はフィールドが空かどうかを決定します。最初のパラメータはフィールド名で、2 番目のパラメータは空の場合に設定されるデフォルト値です。
条件演算子: <、>、!=、<>、>=、<=
論理演算子: and、Java の && と同じ、|| (Java) および or (MySQL)、! ではありません (MySQL)
% には、プレースホルダーと同様に、任意の数の文字、_任意の 1 文字が含まれます
クエリの 2 番目の文字が _ の場合、__% を渡すと確実に機能しません。_ _% などのエスケープ文字を使用する必要があります。2 つの _ の間にエスケープ文字があります。
KaTeX 解析エラー: 位置 1 の '_' の後にグループが必要です: _̲% エスケープ ' ' を使用してエスケープすることもできます。これは \ と同じ効果があります。
ネットスタートmysql
ネットストップmysql
Is NULL は NULL 値の決定に使用されます。= と <> は NULL 値の決定に使用できません。IS NOT NULL
<=>: 安全イコール、null値と通常値の両方を判定でき、可読性は低い。
select *
from user
where
-- `name` like '%%'
create_time like '%%' OR create_time Is NUll
#在条件查询时,会自动过滤掉所查询字段为null的数据,但是要记住,空字符串不会被过滤,只有字段显示为null的才会被过滤。
までに注文する
order by 特定のフィールドに従って並べ替えます desc は降順、デフォルトは昇順、asc
その後に 1 つのフィールド、複数のフィールド、式、関数、エイリアスを続けることができます。
select id,name,age as number,email,create_time,update_time
from user
where
deleted =0
ORDER BY
number DESC,
id DESC
# 先根据age的别名number进行降序排序,然后在age相同时,再根据id降序排序
ORDER BY
number DESC,
LENGTH(email) DESC
#后根据email邮件的长度进行降序排序)
length はフィールドに基づく関数 length(Email) です。
よく使われる機能
upper/ lower: 文字列を大文字/小文字に変更します。
substr/substring: インターセプト文字列
instr ('str1', 'str2') 最初の文字列はこの文字列内で検索する必要があるもので、2 番目の文字列はこの文字列が最初の文字列に含まれているかどうかを確認するものです。
Trim(str) は文字列の前後のスペースを削除します
DATE_FORMAT 関数: 日付形式を文字列に変換します。
SELECT
DATE_FORMAT(NOW(), '%y年%m月%d日') AS output ;
SELECT
name, age,
CASE
WHEN age > 80
THEN '老不死'
WHEN age > 18
THEN '成年人了,可以坐牢了'
WHEN age > 0
THEN '出生了'
ELSE 'D'
END AS 年龄级别
FROM
user ;
以上がケースの使い方です
カウント関数の紹介
効率
- MYISAM ストレージ エンジンでは、count(*) は非常に効率的です。
- INNODB ストレージ エンジンでは、count(*) と count(1) の効率はほぼ同じですが、count(field) よりもわずかに高くなります。
- count(*) と count(1) で得られる結果は、count (field) と同様に同じですが、ストレージ エンジンが異なると効率が異なることが異なります。
count(*) を使用して、合計行数をカウントします。
SELECT COUNT(salary) FROM employees;#只有字段不为0才可以进行计数,
SELECT COUNT(*) FROM employees;
SELECT COUNT(1) FROM employees;
グループ化関数 (集計関数、統計関数、グループ関数とも呼ばれます)
sum と avg は通常、数値データを処理するために使用されます。
max、min、count はあらゆる種類のデータを処理できます
条件付きクエリを実行する場合、like%% が空のデータを含むデータを自動的にフィルターするのと同様に、クエリされた条件はこの条件内の空のフィールドを含むデータを自動的にフィルターします。
注意: count関数の戻り値の型はlongです。
古典的な SQL ステートメント
SELECT
COUNT(*) AS 员工个数,
department_id
FROM
employees
GROUP BY department_id
HAVING 员工个数 > 2 ;
mysqlの実行順序
1、from
2、join
3、on
4、where
5、group by
6、avg、sum…
7、having
8、select
9、distinct
10、order by
11、limit
結合クエリ
クロス結合、内部結合、外部結合
レコード数 = 最初のテーブルのレコード数 * 2 番目のテーブルのレコード数、フィールド数 = 最初のテーブルのフィールド数 + 2 番目のテーブルのフィールド数 (デカルト積)
クロス結合によって生成される結果はデカルト積であり、実際の用途はありません。テーブル 1 テーブル 2 のクロス結合。
内部結合は内部結合を使用します
外部結合は on を使用して左結合と右結合に分けられます。左結合と右結合の違いは、一方は左側のテーブルをメイン テーブルとして使用し、もう一方は右側のテーブルをメイン テーブルとして使用することです。一致するフィールドも、選択したメイン テーブルに基づきます。
2 つのテーブルのフィールド名が一致している場合は、have を使用することもできます。同様に、一致していない場合は、次を使用する必要があります。having (field, field)
SQL 構文
クエリリストを選択
表1より別名[接続タイプ]
結合テーブル 2 エイリアス
接続条件により
[フィルタ条件の場合]
【グループごと】
【フィルタ条件あり】
【ソートリストで並べる】
Has は group by の結果に対してのみ操作できます。having は単独で使用できず、group by と組み合わせて使用する必要があります。
ユニオンクエリ
UNION キーワードを使用する
実際には、1 つの SQL ステートメントが 2 回書かれ、その後、 or の使用と同様に、2 つのステートメントが結合されます。
複数のクエリ ステートメント内のクエリ列の数は一貫している必要があります。つまり、フィールドが一貫している必要があります。、必要な順序は一貫している必要があります。
データベース操作言語 DML
挿入、更新、削除を含む
ステートメントの追加
要件: 列の数と値の数は一貫している必要があります。たとえば、
INSERT INTO beauty(NAME, sex, id, phone) -- 这种不支持多条数据的插入
VALUES('蒋欣', '女', 16, '110');
2: 列名を省略し、デフォルトですべての列を挿入できます (これは複数のデータの挿入をサポートします)
ステートメントを変更する
単一のテーブルを変更する
update 表名
set 列=新值,列=新值…
where 筛选条件;
複数のテーブルを変更することもできます
ステートメントの削除
単一テーブルの削除: フィルタ条件が適用されたテーブル名から削除
テーブルのテーブル名を切り詰めます。テーブルを直接削除する場合は、where 条件を追加できません。
DDL データベース定義言語
データベースの作成: 作成
データベースの変更: 変更
削除:ドロップする
作成する
作成する
データベース [存在しない場合] 库名
[文字セット 文字セット名];
改訂
データベースの文字セットを変更します。 ALTER DATABASE book CHARACTER SET gbk;
消去
書籍が存在する場合はデータベースを削除; データベースを削除
テーブル管理
テーブルの変更
添加列:alter table 表名 add column 列名 类型 ;
修改列的类型或约束:alter table 表名 modify column 列名 新类型 ;
修改列名:alter table 表名 change column 旧列名 新列名 类型;
删除列:alter table 表名 drop column 列名;
修改表名:alter table 表名 rename to 新表名;
テーブルコピー
-- 仅仅复制表的结构
CREATE TABLE copy LIKE book_author ;
-- 复制表的结构和数据
CREATE TABLE 表名
SELECT
*
FROM
`user`
-- 只复制部分数据
CREATE TABLE copy3
SELECT
id,
au_name
FROM
book_author
WHERE nation = '中国' ;
TCLトランザクション制御言語
トランザクションは明示的トランザクションと暗黙的トランザクションに分けられます
暗黙的なトランザクション: 挿入、更新、削除ステートメントなど、明らかな開始マークと終了マークのないトランザクション
明示的なトランザクション: トランザクションには明確な開始マーカーと終了マーカーがあります。明示的なトランザクションの前提条件は、自動送信を無効にする必要があることです。
1: オープントランザクション
2: トランザクション内で SQL 文を記述する場合、DDL データベース定義言語を除く、追加、削除、変更、およびクエリ、つまりデータベースクエリ言語とデータベース操作言語のみが可能です。
3: トランザクション終了 commit: トランザクションを送信
ロールバック: トランザクションのロールバック
トランザクション使用時の削除と切り捨ての違い
トランザクション操作が失敗すると、削除はロールバックされます。
Truncate は、トランザクション操作が失敗してもロールバックしません。
もう 1 つの違いは、削除操作を実行するときに、delete は条件付き削除を実行できるのに対し、turncate はテーブル データ全体を削除することしかできないことです。
データベース分離レベル
データベースの分離レベルを学ぶ前に、ダーティ リード、ファントム リード、反復不可能な読み取りなど、データベース トランザクション操作で発生する可能性のあるいくつかのデータの問題について学ぶ必要があります。
ダーティ リード: トランザクションは、他のトランザクションによってまだ送信されていないデータを読み取ります。主に更新操作で発生します。
ファントム読み取り: トランザクションはレコード範囲を 2 回読み取りますが、得られる結果は異なります。ファントム読み取りの焦点は追加と削除です。
反復不可能な読み取り: 同じ条件で読み取ったデータは異なります。
分離レベル:
コミット読み取り: トランザクションが他のトランザクションによって送信されたデータを読み取ることができるため、ダーティ リードを回避できますが、反復不可能な読み取りやファントム読み取りの問題も回避できます。
コミットされていない読み取り: トランザクションが他のトランザクションのコミットされていないデータを読み取ることを許可すると、ダーティ リード、ファントム リード、および反復不可能な読み取りが発生します。
反復読み取り: トランザクションがフィールドから同じ値を複数回読み取ることができるようにします。このトランザクションの継続中、他のトランザクションがこのフィールドを更新することは禁止されます。これにより、ダーティ読み取りと非反復読み取りを回避できますが、ファントムの問題が発生します。読み取りはまだ解決できません。避けてください。
シリアル化: このトランザクションがテーブルから同じ行を読み取ることができることを確認しますが、このトランザクションの継続中は、他のトランザクションによる操作の挿入、削除、および更新が禁止されます。すべての同時実行の問題は回避できますが、効率は非常に低くなります。
mysql と oracle のトランザクション分離レベルのサポートの比較
Oracle は、(読み取りコミット) READ COMMITED、(シリアル化) SERIALIZABLE の 2 つのトランザクション分離レベルをサポートします。
Oracle のデフォルトのトランザクション分離レベルは READ COMMITED です。
Mysql は 4 つのトランザクション分離レベルをサポートしています。Mysql のデフォルトのトランザクション分離レベルは REPEATABLE READ (反復読み取り) です。
ビュー
構文: ビュー ビュー名をクエリ ステートメントとして作成します。
ビューの利点:
- SQL ステートメントを再利用する
- クエリの詳細を知らなくても複雑な SQL 操作を簡素化する
- データを保護し、セキュリティを向上させる
ビューの変更
1: クエリ ステートメントとしてビューのビュー名を作成または置換します
ビュービュー名をクエリステートメントとして変更します
ビューの削除
ドロップを使用する
ビュービュー
show create ビュー ビュー名
説明ビュー名