MySQL#
参考リンク:
データベース day1—— 初めてのデータベース - Eva_J - ブログ園 (cnblogs.com) バージョン:5.6.44
Django で MySQL データベースを使用する - 杨仕航のブログ (yshblog.com) バージョン:8.0.11
1 ダウンロードとインストール#
mysql は、mac、linux、windows などの各オペレーティングシステムにインストールできるオープンソースのインストーラを提供しています。
mysql のインストール、起動、基本設定 —— linux バージョン - Eva_J - ブログ園 (cnblogs.com)
mysql のインストール、起動、基本設定 —— mac バージョン - Eva_J - ブログ園 (cnblogs.com)
mysql のインストール、起動、基本設定 —— windows バージョン - Eva_J - ブログ園 (cnblogs.com)
windows ダウンロードチュートリアル#
第一歩:ウェブサイトを開く、https://www.mysql.com、downloads をクリックするとhttps://www.mysql.com/downloadにリダイレクトされます。
第二歩:ウェブサイトhttps://dev.mysql.com/downloads/にリダイレクトされ、Community オプションを選択します。
第三歩:MySQL Community Server をクリックしてhttps://dev.mysql.com/downloads/mysql/のページに入ります。その後、5.6 バージョンのデータベースをクリックします。
第四歩:windows オペレーティングシステムで 5.6 バージョンをクリックするとhttps://dev.mysql.com/downloads/mysql/5.6.html#downloadsのウェブサイトにリダイレクトされます。ページは以下の通りです。ダウンロードするバージョンとオペレーティングシステムを確認し、Download をクリックします。
第五歩:ログインまたは登録は不要で、直接 No thanks, just start my download をクリックすればダウンロードできます。
windows インストールチュートリアル#
解凍#
ダウンロードした zip ファイルを解凍し、解凍後のフォルダを任意のディレクトリに置きます。このディレクトリが mysql のインストールディレクトリになります。パスは全て英語でスペースを含まない必要があります。私はD:\software\MySql\mysql-5.6.44-winx64
にインストールしました。
設定#
ディレクトリを開くと my-default.ini 設定ファイルが見えます。この設定ファイルをコピーして my.ini または my.cnf に名前を変更します。
my.ini のファイルを pycharm にドラッグします。pycharm のエンコーディング形式は utf-8 です。
ファイルの内容を削除し、以下のコードを my.ini ファイルにコピー&ペーストします。
[mysql]
# mysqlクライアントのデフォルト文字セットを設定
default-character-set=utf8
[mysqld]
# 3306ポートを設定
port = 3306
# mysqlのインストールディレクトリを設定
basedir=C:\Program Files\mysql-5.6.39-winx64
# mysqlデータベースのデータの保存ディレクトリを設定
datadir=C:\Program Files\mysql-5.6.39-winx64\data
# 最大接続数を許可
max_connections=200
# サーバーで使用される文字セットはデフォルトで8ビットエンコーディングのlatin1文字セット
character-set-server=utf8
# 新しいテーブルを作成する際に使用されるデフォルトストレージエンジン
default-storage-engine=INNODB
これらの内容を変更します:
# mysqlのインストールディレクトリを設定
basedir=D:\software\MySql\mysql-5.6.44-winx64
# mysqlデータベースのデータの保存ディレクトリを設定
datadir=D:\software\MySql\mysql-5.6.44-winx64\data
my.ini の各行の末尾に余分な空白を削除します。
環境変数の設定#
システム環境変数 ->path に新しい変数を作成し、bin ディレクトリを新しい環境変数に追加しますD:\software\MySql\mysql-5.6.44-winx64\bin
、その後、確定して保存します。
MySQL サービスのインストール#
管理者として cmd ウィンドウを開いた後、ディレクトリを解凍したファイルの bin ディレクトリに切り替え、mysqld install と入力して Enter を押します。
MySQL サービスの起動#
管理者として cmd に入力します start mysql
C:\windows\system32>net start mysql
要求されたサービスはすでに起動しています。
NET HELPMSG 2182を入力して、さらにヘルプを取得してください。
サービスが正常に起動した後、ログインできます。mysql -uroot -p
(初回ログイン時はパスワードがなく、Enter を押すだけです)。
C:\windows\system32>mysql -uroot -p
パスワードを入力してください:
MySQLモニターへようこそ。コマンドは;または\gで終了します。
あなたのMySQL接続IDは9です。
サーバーバージョン: 8.0.23 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracleおよびその関連会社。
OracleはOracle Corporationおよびその関連会社の登録商標です。他の名前はそれぞれの所有者の商標である可能性があります。
'help;'または'\h'を入力してヘルプを取得します。'\c'を入力して現在の入力ステートメントをクリアします。
mysql>
MySQL サービスを停止するにはnet stop mysql
を実行します。
C:\windows\system32>net stop mysql
MySQLサービスを停止しています。
MySQLサービスは正常に停止しました。
MySQL サービスを再起動するには、windows ではまず stop してから start する必要があり、MySQL は自動起動プロジェクトであり、起動後に自動的に start します。
クライアントは python コードでもプログラムでもかまいません。mysql.exe はクライアントであり、mysql -u ユーザー名 -p パスワードで mysql にログインします。
2 MySQL のユーザーと権限#
データベースをインストールした後、最高権限のユーザー root があります。
MySQL サーバー側の ip ユーザー名 / パスワード
mysql -h 192.168.xx.xx -uroot -p パスワード
私たちの MySQL クライアントは、ローカルデータベースに接続するだけでなく、ネットワーク上の特定のデータベースのサーバーにも接続できます。
現在のユーザーを確認する#
MySQL 環境内でselect user();
を実行します。最後の英語のセミコロンに注意してください;
mysql> select user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.01 sec)
現在のユーザーにパスワードを追加する#
MySQL 環境内でset password = password('パスワード');
を実行します。最後の英語のセミコロンに注意してください;セミコロンを入力しないと、ずっと -> が表示され、終了できません。
新しいバージョンの mysql では、パスワードを変更するにはこのコマンドを使用する必要があります。alter user 'root'@'localhost' identified by '123';
私たちのバージョンでは、まだset password = password('パスワード');
を使用します。
ユーザーアカウントを作成する#
create user 'name'@'192.168.43.%' identified by 'パスワード';
C:\windows\system32>mysql -uroot -p
パスワードを入力してください:
MySQLモニターへようこそ。コマンドは;または\gで終了します。
あなたのMySQL接続IDは9です。
サーバーバージョン: 8.0.23 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracleおよびその関連会社。
OracleはOracle Corporationおよびその関連会社の登録商標です。他の名前はそれぞれの所有者の商標である可能性があります。
'help;'または'\h'を入力してヘルプを取得します。'\c'を入力して現在の入力ステートメントをクリアします。
mysql> create user 'name'@'192.168.31.%' identified by '123'
-> ;
クエリOK、0行に影響 (0.09 sec)
mysql> exit
さようなら
リモート接続#
mysql -uname -p123 -h192.168.31.144
mysql -uユーザー名 -pパスワード -hip -Pポート番号
mysql -uwanlx -pwanlx -h139.196.217.70 -P8098
C:\windows\system32>mysql -uname -p123 -h192.168.31.144
mysql: [警告] コマンドラインインターフェースでパスワードを使用することは安全ではない可能性があります。
MySQLモニターへようこそ。コマンドは;または\gで終了します。
あなたのMySQL接続IDは10です。
サーバーバージョン: 8.0.23 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracleおよびその関連会社。
OracleはOracle Corporationおよびその関連会社の登録商標です。他の名前はそれぞれの所有者の商標である可能性があります。
'help;'または'\h'を入力してヘルプを取得します。'\c'を入力して現在の入力ステートメントをクリアします。
mysql> select user();
+----------------------+
| user() |
+----------------------+
| name@LAPTOP-URS4B7MF |
+----------------------+
1 row in set (0.00 sec)
mysql>
フォルダを確認する#
show databases;
フォルダを作成する#
create database フォルダ名
show grant for 'ユーザー名'@'192.168.31.%'
ユーザー権限を昇格させる#
grant all on name.* to 'name'@'192.168.31.%';
flush privileges;
権限を付与してユーザーを作成する#
grant all on name.* to 'alex'@'%' identified by '123';
alex という名前のユーザーを作成し、パスワードは 123 で、同じネットワークセグメントにいる限り、name フォルダ内のすべての内容を制御できます。実際の使用でエラーが発生し、解決されていません。
mysql> grand all on name.* to 'alex'@'%';
ERROR 1064 (42000): SQL構文にエラーがあります。MySQLサーバーバージョンに対応するマニュアルを確認してください。'grand all on name.* to 'alex'@'%''の近くでエラーが発生しました。行1
私が使用したコマンド:
mysql -uroot -p
mysql -uname -p123 -h192.168.31.144
3 sql 文#
SQL : 構造化クエリ言語 (Structured Query Language) の略称 SQL (発音:/ˈes kjuː ˈel/ "S-Q-L") は、特定の目的のためのプログラミング言語であり、データベースのクエリとプログラム設計言語であり、データの取得、更新、管理を行うためのリレーショナルデータベースシステムです。
SQL 言語は主にデータの取得、クエリ、更新、リレーショナルデータベースシステムの管理に使用され、IBM によって開発されました。SQL 言語は 3 つのタイプに分かれます:
1、DDL 文 データベース定義言語:データベース、テーブル、ビュー、インデックス、ストアドプロシージャなど、例えば CREATE DROP ALTER
2、DML 文 データベース操作言語:データの挿入 INSERT、削除 DELETE、更新 UPDATE、クエリ SELECT
3、DCL 文 データベース制御言語:例えばユーザーのアクセス権限を制御する GRANT、REVOKE
データベース テーブル データ#
まずデータベースを作成し、その後テーブルを作成します。DDL データベース定義言語
データを保存、削除、変更、クエリする DML データ操作文
データベース操作#
create database データベース名;
現在のデータベースの数を確認する:show databases;
現在使用しているデータベースを確認する:select database();
このデータベース(フォルダ)に切り替える:use データベース名;
データベースの名前を削除する:drop database データベースの名前
逃げる!👀🤣🏃♂️
テーブル操作#
現在のフォルダにいくつのテーブルがあるか確認するshow tables;
mysql> show tables;
Empty set (0.06 sec)
mysql> show tables;
+----------------+
| Tables_in_demo |
+----------------+
| student |
+----------------+
1 row in set (0.00 sec)
テーブルを作成するcreate table テーブルの名前(フィールド名 データ型(長さ));
create table student(id int,name char(10));
テーブルを削除するdrop tables テーブル名;
#
テーブル構造を確認するdesc テーブル名
mysql> desc student;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | char(10) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.01 sec)
テーブル内のデータ操作#
データの追加insert into テーブル名 values (フィールド1,フィールド2);
#
mysql> insert into student values (2,'zhangsan');
クエリOK、1行に影響 (0.01 sec)
データの確認select * from テーブル名;
#
mysql> select * from student;
+------+----------+
| id | name |
+------+----------+
| 1 | alex |
| 2 | zhangsan |
+------+----------+
2 rows in set (0.01 sec)
データの変更update テーブル set フィールド名=値;
#
直接update student set name = 'yuan';
を実行すると、name のすべてのデータが yuan に変更されます。
mysql> update student set name = 'wusir' where id=2;
クエリOK、1行に影響 (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from student;
+------+-------+
| id | name |
+------+-------+
| 1 | alex |
| 2 | wusir |
+------+-------+
2 rows in set (0.00 sec)
データの削除delete from テーブル名;
#
上記を直接実行すると、テーブル全体が削除されます。
mysql> delete from student where id=1;
クエリOK、1行に影響 (0.01 sec)
mysql> select * from student;
+------+-------+
| id | name |
+------+-------+
| 2 | wusir |
+------+-------+
1 row in set (0.00 sec)
4 テーブル操作#
ストレージエンジン#
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MEMORY | YES | ハッシュベース、メモリ内に保存、一時テーブルに便利 | NO | NO | NO |
| MRG_MYISAM | YES | 同一のMyISAMテーブルのコレクション | NO | NO | NO |
| CSV | YES | CSVストレージエンジン | NO | NO | NO |
| FEDERATED | NO | フェデレーテッドMySQLストレージエンジン | NULL | NULL | NULL |
| PERFORMANCE_SCHEMA | YES | パフォーマンススキーマ | NO | NO | NO |
| MyISAM | YES | MyISAMストレージエンジン | NO | NO | NO |
| InnoDB | DEFAULT | トランザクション、行レベルロック、外部キーをサポート | YES | YES | YES |
| BLACKHOLE | YES | /dev/nullストレージエンジン(書き込むと消える) | NO | NO | NO |
| ARCHIVE | YES | アーカイブストレージエンジン | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)
テーブル構造とテーブルデータは別々に保存されます。
ストレージ方式1:MyISAM MySQL5.5以前のバージョンのデフォルトストレージ方式
テーブル構造、テーブルデータ、インデックス
テーブルレベルロックをサポート
トランザクションをサポートせず、行レベルロックをサポートせず、外部キーをサポートしない
ストレージ方式2:InnoDB MySQL5.6以降のデフォルトストレージ方式
`テーブル構造、テーブルデータ `
トランザクション、行レベルロック、外部キーをサポートし、テーブルレベルロックもサポート
行レベルロック:
ストレージ方式3:MEMORY メモリ
テーブル構造
利点:追加、削除、変更、クエリが非常に速い
欠点:再起動時にデータが消失、容量が限られている
関連設定を確認する#
mysql> show variables like '%engine%';
+-----------------------------------------+---------------+
| Variable_name | Value |
+-----------------------------------------+---------------+
| default_storage_engine | InnoDB |
| default_tmp_storage_engine | InnoDB |
| disabled_storage_engines | |
| internal_tmp_mem_storage_engine | TempTable |
| secondary_engine_cost_threshold | 100000.000000 |
| show_create_table_skip_secondary_engine | OFF |
| use_secondary_engine | ON |
+-----------------------------------------+---------------+
7 rows in set, 1 warning (0.00 sec)
テーブルを作成するcreate table t1 (id int,name char(10));
を;
を\G
に変更するとフォーマットが整理されます。
テーブル構造を確認するshow create table テーブル名;
を実行すると、このテーブルに関連するすべての情報が表示されます。
desc テーブル名;
describe テーブル名;
の 2 つの方法でテーブル構造を確認できますが、前者は省略形で、両方の方法でテーブルのフィールド基本情報のみを確認できます。
テーブルを作成する際にストレージエンジンを同時に指定するcreate table t2 (id int,name char(10)) engine=myisam;
mysql> create table t2 (id int,name char(10)) engine=myisam;
クエリOK、0行に影響 (0.01 sec)
mysql> show create table t2\G
*************************** 1. row ***************************
Table: t2
Create Table: CREATE TABLE `t2` (
`id` int DEFAULT NULL,
`name` char(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| demo |
| information_schema |
| mysql |
| name |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.02 sec)
mysql> create database demo_1;
クエリOK、1行に影響 (0.03 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| demo |
| demo_1 |
| information_schema |
| mysql |
| name |
| performance_schema |
| sys |
+--------------------+
7 rows in set (0.00 sec)
mysql> use demo_1
データベースが変更されました
mysql> select database();
+------------+
| database() |
+------------+
| demo_1 |
+------------+
1 row in set (0.00 sec)
mysql> create table t1 (id int,name char(10))
-> ;
クエリOK、0行に影響 (0.07 sec)
mysql> show create table t1;
+-------+------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------+
| t1 | CREATE TABLE `t1` (
`id` int DEFAULT NULL,
`name` char(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> desc t1;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | char(10) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.01 sec)
mysql> describe t1;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | char(10) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql>
インデックス - データベースディレクトリ#
テーブルを作成する#
create table テーブル名(フィールド1 タイプ);
MySQL 基本データ型#
数値型#
MySQL はすべての標準 SQL 数値データ型をサポートしています。
これらの型には厳密な数値データ型(INTEGER、SMALLINT、DECIMAL、NUMERIC)と近似数値データ型(FLOAT、REAL、DOUBLE PRECISION)が含まれます。
キーワード INT は INTEGER の同義語であり、キーワード DEC は DECIMAL の同義語です。
MySQL がサポートする整数型には TINYINT、MEDIUMINT、BIGINT があります。以下の表は、各整数型のストレージと範囲を示しています。
小数の表現について、MYSQL は浮動小数点数と固定小数点数の 2 つの方法に分かれています。浮動小数点数には float(単精度)と double(倍精度)が含まれ、固定小数点数は decimal のみで、mysql では文字列の形式で保存され、浮動小数点数よりも正確で、通貨などの高精度データを表現するのに適しています。
BIT データ型はビットフィールド値を保存し、MyISAM、MEMORY、InnoDB、BDB テーブルをサポートします。
型 | サイズ | 範囲(符号付き) | 範囲(符号なし)unsigned 制約 | 用途 |
---|---|---|---|---|
TINYINT | 1 バイト | (-128,127) | (0,255) | 小整数値 |
SMALLINT | 2 バイト | (-32 768,32 767) | (0,65 535) | 大整数値 |
MEDIUMINT | 3 バイト | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数値 |
INT または INTEGER | 4 バイト | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数値 |
BIGINT | 8 バイト | (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 極大整数値 |
FLOAT | 4 バイト float (255,30) | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 単精度 浮動小数点数値 |
DOUBLE | 8 バイト double (255,30) | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 倍精度 浮動小数点数値 |
DECIMAL | DECIMAL (M,D) の場合、M>D であれば M+2、そうでなければ D+2double (65,30) | M と D の値に依存 | M と D の値に依存 | 小数値 |
int はデフォルトで符号付きであり、表示できる範囲は幅によって制約されません。
decimal は非常に正確に保存され、指定しない場合はデフォルト(10,0)で、指定する場合は最大(25,30)で、合計 65 桁を保存し、そのうち小数点前に 25 桁、小数点後に最大 30 桁を保存します。
日付時間型#
時間値を表す日付と時間の型は DATETIME、DATE、TIMESTAMP、TIME、YEAR です。
各時間型には有効値範囲と「ゼロ」値があり、不正な MySQL が表現できない値を指定した場合は「ゼロ」値が使用されます。
TIMESTAMP 型には専用の自動更新機能があります。後で説明します。
型 | サイズ (バイト) | 範囲 | フォーマット | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 年月日 |
TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM | 時分秒 |
YEAR | 1 | 1901/2155 | YYYY | 年値 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM | 年月日時分秒 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2038 年の終了時間は第 2147483647 秒で、北京時間 2038-1-19 11:14:07、グリニッジ時間 2038 年 1 月 19 日 午前 03:14:07 | YYYYMMDD HHMMSS | 混合日付と時間値、タイムスタンプ |
mysql> create table t4 (d date,t time,dt datetime);
クエリOK、0行に影響 (0.02 sec)
mysql> desc t4;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| d | date | YES | | NULL | |
| t | time | YES | | NULL | |
| dt | datetime | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.01 sec)
mysql> insert into t4 values (now(),now(),now());
クエリOK、1行に影響、1警告 (0.01 sec)
mysql> select * from t4;
+------------+----------+---------------------+
| d | t | dt |
+------------+----------+---------------------+
| 2018-09-21 | 14:51:51 | 2018-09-21 14:51:51 |
+------------+----------+---------------------+
1 row in set (0.00 sec)
mysql> insert into t4 values (null,null,null);
クエリOK、1行に影響 (0.01 sec)
mysql> select * from t4;
+------------+----------+---------------------+
| d | t | dt |
+------------+----------+---------------------+
| 2018-09-21 | 14:51:51 | 2018-09-21 14:51:51 |
| NULL | NULL | NULL |
+------------+----------+---------------------+
2 rows in set (0.00 sec)
date/time/datetimeの例
mysql> create table t5 (id1 timestamp);
クエリOK、0行に影響 (0.02 sec)
mysql> desc t5;
+-------+-----------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------+------+-----+-------------------+-----------------------------+
| id1 | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------+-----------+------+-----+-------------------+-----------------------------+
1 row in set (0.00 sec)
# データをnullで挿入すると、現在の時間が自動的に挿入されます
mysql> insert into t5 values (null);
クエリOK、1行に影響 (0.00 sec)
mysql> select * from t5;
+---------------------+
| id1 |
+---------------------+
| 2018-09-21 14:56:50 |
+---------------------+
1 row in set (0.00 sec)
# 新しい列を追加し、デフォルト値は'0000-00-00 00:00:00'
mysql> alter table t5 add id2 timestamp;
クエリOK、0行に影響 (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show create table t5 \G;
*************************** 1. row ***************************
Table: t5
Create Table: CREATE TABLE `t5` (
`id1` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`id2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
ERROR:
クエリが指定されていません
# 新しい列のデフォルト値を現在の時間に手動で変更
mysql> alter table t5 modify id2 timestamp default current_timestamp;
クエリOK、0行に影響 (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show create table t5 \G;
*************************** 1. row ***************************
Table: t5
Create Table: CREATE TABLE `t5` (
`id1` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`id2` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
ERROR:
クエリが指定されていません
mysql> insert into t5 values (null,null);
クエリOK、1行に影響 (0.01 sec)
mysql> select * from t5;
+---------------------+---------------------+
| id1 | id2 |
+---------------------+---------------------+
| 2018-09-21 14:56:50 | 0000-00-00 00:00:00 |
| 2018-09-21 14:59:31 | 2018-09-21 14:59:31 |
+---------------------+---------------------+
2 rows in set (0.00 sec)
timestampの例
mysql> create table t6 (t1 timestamp);
クエリOK、0行に影響 (0.02 sec)
mysql> desc t6;
+-------+-----------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------+------+-----+-------------------+-----------------------------+
| t1 | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------+-----------+------+-----+-------------------+-----------------------------+
1 row in set (0.01 sec)
mysql> insert into t6 values (19700101080001);
クエリOK、1行に影響 (0.00 sec)
mysql> select * from t6;
+---------------------+
| t1 |
+---------------------+
| 1970-01-01 08:00:01 |
+---------------------+
1 row in set (0.00 sec)
# timestampの下限は19700101080001です
mysql> insert into t6 values (19700101080000);
ERROR 1292 (22007): 't1'列の不正な日付時間値: '19700101080000'が行1で発生しました。
mysql> insert into t6 values ('2038-01-19 11:14:07');
クエリOK、1行に影響 (0.00 sec)
# timestampの上限は2038-01-19 11:14:07です
mysql> insert into t6 values ('2038-01-19 11:14:08');
ERROR 1292 (22007): 't1'列の不正な日付時間値: '2038-01-19 11:14:08'が行1で発生しました。
mysql>
timestampの例2
mysql> create table t7 (y year);
クエリOK、0行に影響 (0.02 sec)
mysql> insert into t7 values (2018);
クエリOK、1行に影響 (0.00 sec)
mysql> select * from t7;
+------+
| y |
+------+
| 2018 |
+------+
1 row in set (0.00 sec)
yearの例
mysql> create table t8 (dt datetime);
クエリOK、0行に影響 (0.01 sec)
mysql> insert into t8 values ('2018-9-26 12:20:10');
クエリOK、1行に影響 (0.01 sec)
mysql> insert into t8 values ('2018/9/26 12+20+10');
クエリOK、1行に影響 (0.00 sec)
mysql> insert into t8 values ('20180926122010');
クエリOK、1行に影響 (0.00 sec)
mysql> insert into t8 values (20180926122010);
クエリOK、1行に影響 (0.00 sec)
mysql> select * from t8;
+---------------------+
| dt |
+---------------------+
| 2018-09-26 12:20:10 |
| 2018-09-26 12:20:10 |
| 2018-09-26 12:20:10 |
| 2018-09-26 12:20:10 |
+---------------------+
4 rows in set (0.00 sec)
datetimeの例
文字列型#
文字列型は CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SET を指します。このセクションでは、これらの型がどのように機能し、クエリでどのように使用されるかを説明します。
型 | サイズ | 用途 |
---|---|---|
CHAR | 0-255 バイト | 固定長文字列 |
VARCHAR | 0-65535 バイト | 可変長文字列 |
TINYBLOB | 0-255 バイト | 255 文字以下のバイナリ文字列 |
TINYTEXT | 0-255 バイト | 短いテキスト文字列 |
BLOB | 0-65 535 バイト | バイナリ形式の長いテキストデータ |
TEXT | 0-65 535 バイト | 長いテキストデータ |
MEDIUMBLOB | 0-16 777 215 バイト | バイナリ形式の中程度の長さのテキストデータ |
MEDIUMTEXT | 0-16 777 215 バイト | 中程度の長さのテキストデータ |
LONGBLOB | 0-4 294 967 295 バイト | バイナリ形式の極大テキストデータ |
LONGTEXT | 0-4 294 967 295 バイト | 極大テキストデータ |
CHAR と VARCHAR 型は似ていますが、保存と取得の方法が異なります。最大長と末尾の空白が保持されるかどうかなども異なります。保存または取得の過程で大文字小文字の変換は行われません。
CHAR 列の長さは、テーブル作成時に宣言された長さに固定され、範囲 (0-255) ですが、VARCHAR の値は可変長文字列で範囲 (0-65535) です。
mysql> create table t9 (v varchar(4),c char(4));
クエリOK、0行に影響 (0.01 sec)
mysql> insert into t9 values ('ab ','ab ');
クエリOK、1行に影響 (0.00 sec)
# 検索時にcharデータ型は空白を削除します
mysql> select * from t9;
+------+------+
| v | c |
+------+------+
| ab | ab |
+------+------+
1 row in set (0.00 sec)
# クエリ結果の計算された長さを確認します
mysql> select length(v),length(c) from t9;
+-----------+-----------+
| length(v) | length(c) |
+-----------+-----------+
| 4 | 2 |
+-----------+-----------+
1 row in set (0.00 sec)
# 結果にプラスを追加するとより明確になります
mysql> select concat(v,'+'),concat(c,'+') from t9;
+---------------+---------------+
| concat(v,'+') | concat(c,'+') |
+---------------+---------------+
| ab + | ab+ |
+---------------+---------------+
1 row in set (0.00 sec)
# 保存された長さが定義された長さを超えると、切り捨てられます
mysql> insert into t9 values ('abcd ','abcd ');
クエリOK、1行に影響、1警告 (0.01 sec)
mysql> select * from t9;
+------+------+
| v | c |
+------+------+
| ab | ab |
| abcd | abcd |
+------+------+
2 rows in set (0.00 sec)
char/varcharの例
BINARY と VARBINARY は CHAR と VARCHAR に似ていますが、バイナリ文字列を含み、非バイナリ文字列を含まないことが異なります。つまり、バイト文字列を含み、文字列を含まないことを意味します。これにより、文字セットがなく、ソートと比較は列値バイトの数値値に基づいて行われます。
BLOB はバイナリ大オブジェクトで、可変量のデータを保持できます。BLOB 型には 4 種類あります:TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB。これらは、保存できる範囲が異なります。
TEXT 型には 4 種類あります:TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT。対応する 4 種類の BLOB 型があり、最大保存長が異なりますので、実際の状況に応じて選択できます。
ENUM と SET 型#
ENUM の日本語名は列挙型であり、その値の範囲はテーブル作成時に列挙方式で明示的に指定する必要があります。ENUM は値の集合から単一の値を選択することのみを許可し、複数の値を同時に選択することはできません。
SET は ENUM と非常に似ており、文字列オブジェクトであり、0-64 のメンバーを含むことができます。メンバーの違いに応じて、ストレージも異なります。set 型は値の集合から任意の 1 つまたは複数の要素を組み合わせて選択することを許可します。範囲外の内容は挿入できず、重複する値は自動的に削除されます。
型 | サイズ | 用途 |
---|---|---|
ENUM | 1-255 メンバーの列挙には 1 バイトのストレージが必要;255-65535 メンバーには 2 バイトのストレージが必要;最大 65535 メンバーを許可します。 | 単選:性別の選択 |
SET | 1-8 メンバーの集合は 1 バイトを占め、9-16 メンバーの集合は 2 バイトを占め、17-24 メンバーの集合は 3 バイトを占め、25-32 メンバーの集合は 4 バイトを占め、33-64 メンバーの集合は 8 バイトを占めます。 | 複数選択:趣味 |
set/enum の例
mysql> create table t10 (name char(20),gender enum('female','male'));
クエリOK、0行に影響 (0.01 sec)
# enum('female','male')の中から1つを選択してgenderの値として使用できます。正常に挿入されます。
mysql> insert into t10 values ('nezha','male');
クエリOK、1行に影響 (0.00 sec)
# 'male,female'の2つの値を同時に挿入することはできず、'male,female'に含まれない値を挿入することもできません。
mysql> insert into t10 values ('nezha','male,female');
ERROR 1265 (01000): 'gender'列のデータが行1で切り捨てられました。
mysql> create table t11 (name char(20),hobby set('タバコ','酒','髪型','事故'));
クエリOK、0行に影響 (0.01 sec)
# set('タバコ','酒','髪型','事故')の中から任意の項目を選択でき、自動的に重複機能があります。
mysql> insert into t11 values ('yuan','髪型,酒,髪型');
クエリOK、1行に影響 (0.01 sec)
mysql> select * from t11;
+------+---------------+
| name | hobby |
+------+---------------+
| yuan | 酒,髪型 |
+------+---------------+
1 row in set (0.00 sec)
# set('タバコ','酒','髪型','事故')の中に含まれない項目を選択することはできません。
mysql> insert into t11 values ('alex','髪型,事故,女の子を見ている');
ERROR 1265 (01000): 'hobby'列のデータが行1で切り捨てられました。
テーブルの制約#
特定の数字を無符号に設定するunsigned
特定のフィールドが null でないことを制約するnot null
特定のフィールドにデフォルト値を設定するdefault
特定のフィールドが重複しないことを制約するunique
特定の int 型のフィールドを自動増加させるauto_increment
特定のフィールドを非 null かつ重複しないことを制約するprimary key
外部キーforeign key
結合ユニーク#
create table t4(
id int,
ip char(15),
server char(10),
port int,
unique(ip,port)
);
mysql> create table t4(
-> id int,
-> ip char(15),
-> server char(10),
-> port int,
-> unique(ip,port)
-> );
クエリOK、0行に影響 (0.12 sec)
mysql> desc t4;
+--------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| ip | char(15) | YES | MUL | NULL | |
| server | char(10) | YES | | NULL | |
| port | int | YES | | NULL | |
+--------+----------+------+-----+---------+-------+
4 rows in set (0.01 sec)
mysql> show create table t4;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t4 | CREATE TABLE `t4` (
`id` int DEFAULT NULL,
`ip` char(15) DEFAULT NULL,
`server` char(10) DEFAULT NULL,
`port` int DEFAULT NULL,
UNIQUE KEY `ip` (`ip`,`port`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
mysql> insert into t4 values(1,'192.168.12.87','mysql',3306);
クエリOK、1行に影響 (0.01 sec)
mysql> insert into t4 values(2,'192.168.12.87','kugou',8000);
クエリOK、1行に影響 (0.01 sec)
mysql> insert into t4 values(3,'192.168.12.36','mysql',3306);
クエリOK、1行に影響 (0.00 sec)
mysql> insert into t4 values(4,'192.168.12.36','mysql',3306);
ERROR 1062 (23000): '192.168.12.36-3306'の重複エントリが't4.ip'のキーに対して発生しました。
mysql>
自動増加auto_increment
#
自動増加フィールドは数値でなければならず、ユニークでなければならず、自動的に非 null の効果があります。
create table t5(
id int unique auto_increment,
username char(10),
password char(18)
);
mysql> create table t5(
-> id int unique auto_increment,
-> username char(10),
-> password char(18)
-> );
クエリOK、0行に影響 (0.07 sec)
mysql> desc t5;
+----------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| username | char(10) | YES | | NULL | |
| password | char(18) | YES | | NULL | |
+----------+----------+------+-----+---------+----------------+
3 rows in set (0.01 sec)
mysql> insert into t5(username,password) value('alex','alex3345');
クエリOK、1行に影響 (0.01 sec)
mysql> insert into t5(username,password) value('alex','alex3345');
クエリOK、1行に影響 (0.00 sec)
mysql> insert into t5(username,password) value('alex','alex3345');
クエリOK、1行に影響 (0.00 sec)
mysql> select * from t5;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
| 1 | alex | alex3345 |
| 2 | alex | alex3345 |
| 3 | alex | alex3345 |
+----+----------+----------+
3 rows in set (0.00 sec)
mysql>show create table t5;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t5 | CREATE TABLE `t5` (
`id` int NOT NULL AUTO_INCREMENT,
`username` char(10) DEFAULT NULL,
`password` char(18) DEFAULT NULL,
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql>
主キーprimary key
#
1 つのテーブルには 1 つの主キーしか存在できません。
1 つのテーブルには主キーがない場合もありますが、各テーブルには主キーを設定することをお勧めします。
このフィールドを非 null(not null)かつユニーク(unique)に制約します。
create table t6(
id int not null unique,
name char(12) not null unique
);
mysql> create table t6(
-> id int not null unique,
-> name char(12) not null unique
-> );
クエリOK、0行に影響 (0.03 sec)
mysql> desc t6;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | char(12) | NO | UNI | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
指定した最初の非 null かつユニークなフィールドは主キーとして定義されます。
create table t7(
id int primary key,
name char(12) not null unique
);
mysql> create table t7(
-> id int primary key,
-> name char(12) not null unique
-> );
クエリOK、0行に影響 (0.08 sec)
mysql> desc t7;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | char(12) | NO | UNI | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.02 sec)
直接 primary key を指定すると、デフォルトで非 null かつユニークになります。
結合主キー#
create table t8(
id int,
ip char(15),
server char(10),
port int,
primary key(ip,port)
);
外部キーforeign key
は 2 つのテーブルに関連します#
従業員テーブル
id age gender salary hire_date postid
部門テーブル
postname postid post_comment post_phone
mysql> create table post(
-> postid int primary key,
-> postname char(10) not null unique,
-> comment varchar(255),
-> phone_num char(11)
-> );
クエリOK、0行に影響 (0.03 sec)
mysql> create table staff(
-> id int primary key auto_increment,
-> age int,
-> gender enum('male','female'),
-> salary float(8,2),
-> hire_date date,
-> post_id int,
-> foreign key(post_id) references post(postid)
-> );
クエリOK、0行に影響、1警告 (0.04 sec)
mysql> desc staff;
+-----------+-----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-----------------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| age | int | YES | | NULL | |
| gender | enum('male','female') | YES | | NULL | |
| salary | float(8,2) | YES | | NULL | |
| hire_date | date | YES | | NULL | |
| post_id | int | YES | MUL | NULL | |
+-----------+-----------------------+------+-----+---------+----------------+
6 rows in set (0.01 sec)
mysql> desc post;
+-----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| postid | int | NO | PRI | NULL | |
| postname | char(10) | NO | UNI | NULL | |
| comment | varchar(255) | YES | | NULL | |
| phone_num | char(11) | YES | | NULL | |
+-----------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
mysql> show create table staff;
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| staff | CREATE TABLE `staff` (
`id` int NOT NULL AUTO_INCREMENT,
`age` int DEFAULT NULL,
`gender` enum('male','female') DEFAULT NULL,
`salary` float(8,2) DEFAULT NULL,
`hire_date` date DEFAULT NULL,
`post_id` int DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `post_id` (`post_id`),
CONSTRAINT `staff_ibfk_1` FOREIGN KEY (`post_id`) REFERENCES `post` (`postid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> insert into post values(1 ,'python部門','素晴らしいチーム','01066666666');
クエリOK、1行に影響 (0.01 sec)
mysql> insert into staff values(1 ,80,'male',100000,20101010101010,1);
クエリOK、1行に影響、1警告 (0.01 sec)
mysql>
外部キーは少なくとも 1 つの主キーに関連付けられ、注意が必要です。関連付けられたテーブルを先に作成し、その後外部キーを持つテーブルを作成します。例えば、上記のように部門テーブルを先に作成し、その後従業員テーブルを作成します。
カスケード削除とカスケード更新on update cascade on delete cascade
#
mysql> create table staff2(
-> id int primary key auto_increment,
-> age int,
-> gender enum('male','female'),
-> salary float(8,2),
-> hire_date date,
-> post_id int,
-> foreign key(post_id) references post(postid) on update cascade on delete cascade
-> );
on delete(理解)
. カスケード方式
親テーブルでupdate/deleteレコードを行うと、子テーブルの一致するレコードもupdate/deleteされます。
. nullに設定する方式
親テーブルでupdate/deleteレコードを行うと、子テーブルの一致するレコードの列がnullに設定されます。
子テーブルの外部キー列はnullであってはなりません。
. No action方式
子テーブルに一致するレコードがある場合、親テーブルの対応する候補キーに対してupdate/delete操作を許可しません。
. Restrict方式
no actionと同様で、外部キー制約を即座にチェックします。
. Set default方式
親テーブルに変更がある場合、子テーブルの外部キー列がデフォルト値に設定されますが、Innodbはこれを認識しません。
テーブルの変更#
構文:
-
テーブル名を変更する
ALTER TABLE テーブル名
RENAME 新テーブル名; -
フィールドを追加する
ALTER TABLE テーブル名
ADD フィールド名 データ型 [完全性制約条件…],
ADD フィールド名 データ型 [完全性制約条件…]; -
フィールドを削除する
ALTER TABLE テーブル名
DROP フィールド名; -
フィールドを変更する
ALTER TABLE テーブル名
MODIFY フィールド名 データ型 [完全性制約条件…];
ALTER TABLE テーブル名
CHANGE 旧フィールド名 新フィールド名 旧データ型 [完全性制約条件…];
ALTER TABLE テーブル名
CHANGE 旧フィールド名 新フィールド名 新データ型 [完全性制約条件…]; -
フィールドの並び順を変更する / 追加時にフィールド位置を指定する
ALTER TABLE テーブル名
ADD フィールド名 データ型 [完全性制約条件…] FIRST;
ALTER TABLE テーブル名
ADD フィールド名 データ型 [完全性制約条件…] AFTER フィールド名;
ALTER TABLE テーブル名
CHANGE フィールド名 旧フィールド名 新フィールド名 新データ型 [完全性制約条件…] FIRST;
ALTER TABLE テーブル名
MODIFY フィールド名 データ型 [完全性制約条件…] AFTER フィールド名;
テーブル関係#
2 つのテーブル間の関係
多対一
=====================多対一=====================
create table press(
id int primary key auto_increment,
name varchar(20)
);
create table book(
id int primary key auto_increment,
name varchar(20),
press_id int not null,
foreign key(press_id) references press(id)
on delete cascade
on update cascade
);
insert into press(name) values
('北京工業地雷出版社'),
('人民音楽が良くない出版社'),
('知的財産が役に立たない出版社')
;
insert into book(name,press_id) values
('九陽神功',1),
('九陰真経',2),
('九陰白骨爪',2),
('独孤九剣',3),
('降龍十巴掌',2),
('葵花宝典',3)
;
sqlの例
一対一
create table customer(
-> id int primary key auto_increment,
-> name varchar(20) not null,
-> qq varchar(10) not null,
-> phone char(16) not null
-> );
create table student(
-> id int primary key auto_increment,
-> class_name varchar(20) not null,
-> customer_id int unique, #このフィールドは必ずユニークである必要があります
-> foreign key(customer_id) references customer(id) #外部キーのフィールドは必ずユニークである必要があります
-> on delete cascade
-> );
#顧客を追加
mysql> insert into customer(name,qq,phone) values
-> ('韓蕾','31811231',13811341220),
-> ('楊澜','123123123',15213146809),
-> ('翁惠天','283818181',1867141331),
-> ('楊宗河','283818181',1851143312),
-> ('袁承明','888818181',1861243314),
-> ('袁清','112312312',18811431230)
mysql> #学生を追加
mysql> insert into student(class_name,customer_id) values
-> ('脱産1班',3),
-> ('週末1期',4),
-> ('週末1期',5)
-> ;
sqlの例
多対多
=====================多対多=====================
create table author(
id int primary key auto_increment,
name varchar(20)
);
#このテーブルは著者テーブルと書籍テーブルの関係を保存します。つまり、両者の関係を確認するにはこのテーブルを参照します。
create table author2book(
id int not null unique auto_increment,
author_id int not null,
book_id int not null,
constraint fk_author foreign key(author_id) references author(id)
on delete cascade
on update cascade,
constraint fk_book foreign key(book_id) references book(id)
on delete cascade
on update cascade,
primary key(author_id,book_id)
);
#4人の著者を挿入し、idを順に並べます。
insert into author(name) values('egon'),('alex'),('yuanhao'),('wpq');
#各著者の代表作は以下の通りです。
egon:
九陽神功
九陰真経
九陰白骨爪
独孤九剣
降龍十巴掌
葵花宝典
alex:
九陽神功
葵花宝典
yuanhao:
独孤九剣
降龍十巴掌
葵花宝典
wpq:
九陽神功
insert into author2book(author_id,book_id) values
(1,1),
(1,2),
(1,3),
(1,4),
(1,5),
(1,6),
(2,1),
(2,6),
(3,4),
(3,5),
(3,6),
(4,1)
;
sqlの例
データ操作#
追加insert
#
insert into テーブル名 values (値...);
このテーブル内のすべてのフィールドは順番にここに記入する必要があります。
insert into テーブル名 (フィールド名,フィールド名...) values (値...);
すべてのフィールド位置に名前を記入したフィールドは、後の値と 1 対 1 で対応しなければなりません。
insert into テーブル名 value (値...);
一度に 1 行のデータしか書き込めず、values は一度に複数行書き込むことができます。
削除delete
#
delete from テーブル where 条件;
変更update
#
update テーブル set フィールド=新しい値 where 条件;
クエリselect
#
select * from テーブル名;
select フィールド from テーブル名;
重複項目を除去するselect distinct フィールド from テーブル名;
四則演算select フィールド*10 from テーブル名;
同時に四則演算後の名前を変更することもできますselect フィールド*10 as 新しい名前 from テーブル名;
または as を省略して空白を保持します。
where 文#
比較演算#
>
<
=
>=
<=
!=
<> (不等号も表します)
範囲演算#
多選一 in
select * from テーブル名 where フィールド名 in (値1,値2,値3);
数値範囲内で
数値区間 [a,b] between
select * from テーブル名 where フィールド名 between a and b;
文字列の曖昧なクエリlike
ワイルドカード %
は任意の長さの任意の内容に一致します。
select * from テーブル名 where フィールド名 like '曖昧な文字%';
ワイルドカード _
は 1 文字の長さの任意の内容に一致し、必要な桁数だけ_
を追加する必要があります。
select * from テーブル名 where フィールド名 like '曖昧な文字__';
正規表現regexp
select * from テーブル名 where フィールド名 regexp '正規表現';
論理演算 - 条件の結合#
および and
または or
非 not
グループ化 group by
#
select * from テーブル名 group by フィールド;
group by の後にこのフィールドの中の各異なる項目が保持され、すべての値が 1 つのグループにまとめられます。
集約#
count(フィールド)
このフィールドにいくつの項目があるかをカウントしますselect count(*) from テーブル名;
sum(フィールド)
このフィールドに対応する数値の合計をカウントします。
avg(フィールド)
このフィールドに対応する数値の平均値をカウントします。
min(フィールド)
このフィールドに対応する数値の最小値をカウントします。
max(フィールド)
このフィールドに対応する数値の最大値をカウントします。
グループ化集約#
select count(*) from テーブル名 group by フィールド;
select sum(フィールド) from テーブル名 group by フィールド;
フィルタリングhaving
#
having は常に group by と一緒に使用されます。
select フィールド from テーブル名 group by フィールド名 having 条件;
select post from employee group by post having count(*) > 3;
クエリの並べ替えorder by
#
select * from テーブル名 order by フィールド名;
デフォルトは小から大に並べ替えられ、デフォルトは asc で省略可能です。
select * from テーブル名 order by フィールド名 desc;
大から小に並べ替えます。
複数列の並べ替え:select * from テーブル名 order by フィールド名1 asc,フィールド名2 desc;
最初のフィールドを昇順に並べ替え、最