MySQL Conciseチュートリアル – Under

1 Star2 Stars3 Stars4 Stars5 Stars (まだ評価されていません)
Loading...

このチュートリアルは、pythonスクリプトを使用して定期的に更新される私のgithub nightttt7 / MySQLチュートリアルから来ています 。

このチュートリアルは、次の目的で使用されます。
1.はじめに
2.クイックお問い合わせ
– 最初のドラフトはnightttt7とlotus3333によって2018/3/13に完了しました

Todo

カーソルトリガ機能エンジンのデータベース設定とセキュリティパラダイムをより実用的に改善する

ディレクトリ

Todo
ディレクトリ
取引
サンプルコード

数値型
2.日付と時刻のタイプ
3.文字列タイプ
テキスト文書のインポートとエクスポート
バッチ処理
実際の戦闘1
初期化する
データプレビュー
トピック
参考回答

取引

TRANSACTION
バッチで実行する必要があるSQL文をすべて管理するか、失敗したトランザクションがすべてオンになっているかを管理する

START TRANSACTION;
# 或者
BEGIN;

トランザクションの提出

COMMIT;

トランザクションのロールバック

ROLLBACK;

セーブポイントを設定する

SAVEPOINT 保存点名称;

セーブポイントにロールバックする

ROLLBACK TO SAVEPOINT 保存点名称;

セーブポイントを削除する

RELEASE SAVEPOINT 保存点名称;

構造の作成/削除/変更などのステートメントはロールバックできず、トランザクションはネストできません

サンプルコード

mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test value('英文');
Query OK, 1 row affected (0.05 sec)
mysql>  insert into test value('挪威语');
Query OK, 1 row affected (0.01 sec)
mysql> commit;
Query OK, 0 rows affected (0.05 sec)
mysql> select * from test;
+-+
| name      |
+-+
| 中文      |
| 英文      |
| 挪威语    |
+-+
3 rows in set (0.00 sec)
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test value('法语');
Query OK, 1 row affected (0.05 sec)
mysql> rollback;
Query OK, 0 rows affected (0.07 sec)
mysql> select * from test;
+-+
| name      |
+-+
| 中文      |
| 英文      |
| 挪威语    |
+-+
3 rows in set (0.00 sec)
mysql> begin ;
Query OK, 0 rows affected (4.01 sec)
mysql> insert into test value('俄罗斯语');
Query OK, 1 row affected (0.01 sec)
mysql> savepoint yaou;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test value('西班牙语');
Query OK, 1 row affected (0.00 sec)
mysql> savepoint xiou;
Query OK, 0 rows affected (0.02 sec)
mysql>  insert into test value('阿拉伯语');
Query OK, 1 row affected (0.00 sec)
mysql> savepoint dongou;
Query OK, 0 rows affected (0.00 sec)
mysql> rollback to savepoint xiou;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from test;
+-+
| name         |
+-+
| 中文         |
| 英文         |
| 挪威语       |
| 法语         |
| 粤语         |
| 瑞典语       |
| 芬兰语       |
| 俄罗斯语     |
| 西班牙语     |
+-+
9 rows in set (0.00 sec)

詳細なドキュメントアドレス

数値型

タイプ サイズ 備考
BIT [(M)]
TINYINT [(M)] 1バイト (-128,127)
SMALLINT [(M)] 2バイト (-32 768,32 767)
MEDIUMINT [(M)] 3バイト (-8 388 608、8 388 607)
INTまたはINTEGER [(M)] 4バイト (-2 147 483 648,2 147 483 647)
BIGINT [(M)] 8バイト 最大整数値
DECIMAL [(M [、D])] Mは桁数の合計、Dは小数点以下の桁数
FLOAT [(M、D)] 4バイト 単精度浮動小数点値
ダブル[(M、D)] 8バイト 倍精度浮動小数点値
FLOAT [(p)] 0〜24単精度、25〜53倍精度

ブール値はtinyint(1)と等しくなります。 0はFalse、0以外はTrue、Falseは0、Trueは1です。
私の個人的な意見は、予期せぬ効果をもたらす可能性があるため、UNSIGNEDを使用しないようにすることです。INT型が格納できないデータの場合、INT UNSIGNEDは格納されない可能性があります。 BIGINT型ソース
[(M)]ビットはビット数、最大値は63、デフォルトは1です。 浮動小数点型および固定小数点型の場合、Mは格納可能な桁数の合計(精度)、文字列型の場合はMが最大長です。最大許容値Mの種類はデータ型に依存する。
[UNSIGNED]符号なし[ZEROFILL]自動ゼロ(自動符号なし)BITにはこれらの2つのオプションはありません

BIGINT FLOAT DOUBLE DECIMAL

タイプ サイズ スコープ(署名済み) 範囲(符号なし)
BIGINT 8バイト (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615)
フロート 4バイト (-3.402 823 466 E + 38、3.402 823 466 351 E + 38) (0、3.402 823 466 E + 38)
ダブル 8バイト (-1.797 693 134 862 315 7 E + 308,1.797 693 134 862 315 7 E + 308) (0,1.797 693 134 862 315 7 E + 308)

2.日付と時刻のタイプ

MySQLが表すのに合法でない値を指定する場合は、「ゼロ」の値を使用してください。 TIMESTAMPタイプには、独自の自動更新機能があります。

タイプ サイズ(バイト) 範囲 フォーマット 使用
DATE 3 1000-01-01 / 9999-12-31 YYYY-MM-DD 日付の値
TIME 3 '-838:59:59' / '838:59:59' HH:MM:SS 時間値または期間
1 1901/2155 YYYY 年の値
DATETIME 8 1000-01-01 00:00:00 / 9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 日付時刻の値
TIMESTAMP 4 1970年1月1日00:00:00/2037しばらく YYYYMMDD HHMMSS 日時値、自動更新タイムスタンプ

3.文字列タイプ

タイプ サイズ 使用 備考
CHAR 0〜255バイト 固定長の文字列
VARCHAR 0〜65535バイト 可変長文字列
バイナリ バイナリ
多変量 バイナリ
TINYBLOB 0〜255バイト 最大255文字のバイナリ文字列
BLOB 0-65 535バイト バイナリ形式の長いテキストデータ
MEDIUMBLOB 0〜16 777 215バイト バイナリ形式の中程度の長さのテキストデータ
LONGBLOB 0-4 294 967 295バイト バイナリ形式の偉大なテキストデータ
TINYTEXT 0〜255バイト 短いテキスト文字列
テキスト 0-65 535バイト 長いテキストデータ
MEDIUMTEXT 0〜16 777 215バイト 中程度の長さのテキストデータ
ロングテックス 0-4 294 967 295バイト 偉大なテキストデータ

CHARACTER SET属性は文字セットを指定し、COLLATE属性は文字セットの照合を指定します。CHARSETはCHARACTER SETの同義語です。
文字列データ型のCHARACTER SETバイナリ属性は、対応するバイナリ文字列データ型として列を作成します.CHARはBINARYになり、VARCHARはVARBINARYになり、TEXTはBLOBになります。
BINARYの違いは、非バイナリ文字列ではなくバイナリ文字列が含まれていることです。 つまり、文字列の代わりにバイト文字列が含まれています。 つまり、文字セットがなく、列値バイトに基づいて数値をソートして比較します。
CHAR [(M)] Mは文字列の長さを表し、Mの範囲は0〜255です.Mを省略すると、長さは1になります。
VARCHAR(M)Mは文字の最大列長を表し、Mの範囲は0〜65,535です。
ENUM(列挙型)とSETの2つの文字列形式もあります。

テキスト文書のインポートとエクスポート

My.iniファイル・セット・アクセス・パス

[mysqld]
secure-file-priv = C:\Users\Administrator\Desktop

TXTドキュメントとしてエクスポート

select * into outfile '文件路径' from 表名;
# windows下用\\
# linux下用/

TXTドキュメントをインポートする

load data local infile '文件路径' into table 表名;

デリミタは、デフォルトでタブと改行で区切られています

FIELDS TERMINATED BY '\t';
LINES TERMINATED BY '\n';

Windowsの下で

LINES TERMINATED BY '\r\n';

アンダーマック

LINES TERMINATED BY '\r';

バッチ処理

バッチシェルhttps://dev.mysql.com/doc/refman/5.7/en/batch-mode.html

shell> mysql -h host -u user -p < batch-file
Enter password: ********

スクリプトの続行を希望する場合は、ステートメントの一部にエラーが発生しても、-forceコマンドラインオプションを使用する必要があります。
対話形式の出力形式をバッチモードで取得する場合は、mysql -tを使用します。 実行された文の出力を出力するには、mysql -v
また、mysqlプロンプトからコマンドまたはコマンドを使用して、スクリプトを使用することもできます。source \\。

実際の戦闘1

元の住所: http : //blog.csdn.net/fuchunyuan0/article/details/51883889?locationNum=3&fps=1

初期化する

C:\Users\Administrator>mysql -uroot -pSqq123456!
mysql> create database if not exists customdb;
Query OK, 1 row affected (0.05 sec)
mysql> use customdb;
Database changed
mysql> create table if not exists customer(
->      c_id char(6) primary key,
->      name varchar(30)not null,
->      location varchar(30),
->      salary decimal(8,2)
-> );
Query OK, 0 rows affected (0.47 sec)
mysql> create table if not exists bank(
->     b_id char(5) primary key,
->     bank_name char(30) not null
-> );
Query OK, 0 rows affected (0.34 sec)
mysql> create table if not exists deposite(
->     d_id int(10) auto_increment primary key,
->     c_id char(6),
->     b_id char(5),
->     dep_date date,
->     amount decimal(8,2),
->     constraint FK_c_id foreign key(c_id) references customer(c_id)
-> );
Query OK, 0 rows affected (0.32 sec)
mysql> insert into customer
-> values('101001','孙杨','广州',1234),
-> ('101002','郭海','南京',3526),
-> ('101003','卢江','苏州',6892),
-> ('101004','郭惠','济南',3492);
Query OK, 4 rows affected (0.15 sec)
Records: 4  Duplicates: 0  Warnings: 0
mysql> insert into bank
-> values('B0001','工商银行'),
-> ('B0002','建设银行'),
-> ('B0003','中国银行');
Query OK, 3 rows affected (0.07 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> insert into bank
-> values('B0004','农业银行');
Query OK, 1 row affected (0.04 sec)
mysql> insert into deposite
-> values(1,'101001','B0001','2011-04-05',42526),
-> (2,'101002','B0003','2012-07-15',66500),
-> (3,'101003','B0002','2010-11-24',42366),
-> (4,'101004','B0004','2008-03-31',62362),
-> (5,'101001','B0003','2002-02-07',56346),
-> (6,'101002','B0001','2004-09-23',353626),
-> (7,'101003','B0004','2003-12-14',36236),
-> (8,'101004','B0002','2007-04-21',26267),
-> (9,'101001','B0002','2011-02-11',435456),
-> (10,'101002','B0004','2012-05-13',234626),
-> (11,'101003','B0003','2001-01-24',26243),
-> (12,'101004','B0001','2009-08-23',45671);
Query OK, 12 rows affected (0.09 sec)
Records: 12  Duplicates: 0  Warnings: 0

データプレビュー

数据预览

トピック

データシートのデポジットにSun Yangのすべてのデポジットに10,000を追加
データテーブルのデポジットの口座がICBCで、2011年4月5日+ 1000日に入金された者のデポジット額を加算する
データテーブルの郭海の銀行ロゴを建設銀行に変更して、Sun Yangの預金情報(顧客情報、顧客名、銀行名、預金金額など)を照会します。
入金日が2011-04-05であった顧客ID、顧客名、銀行名、預金額が確認されました。ICBC入金が10,000以上の顧客の名前(テーブルリンクとサブクエリを使用)
農業銀行預金の上位5つの顧客預金情報を確認します(表示情報:顧客名、銀行名、預金金額)
ストアドプロシージャupdate_salaryを作成し、得意先テーブルの給与属性を更新し、給与が5000未満の顧客の給与を倍増します。

参考回答

データシートのデポジットにSun Yangのすべてのデポジットに10,000を追加

mysql> update deposite set amount = amount + 10000
-> where c_id = (select c_id from customer where name = '孙杨');
Query OK, 3 rows affected (0.12 sec)
Rows matched: 3  Changed: 3  Warnings: 0

データテーブルのデポジットの口座がICBCで、2011年4月5日+ 1000日に入金された者のデポジット額を加算する

mysql> update deposite set amount = amount + 1000
-> where dep_date = '2011-04-05' and
-> b_id = ( select b_id from bank where bank_name = '工商银行');
Query OK, 1 row affected (0.11 sec)
Rows matched: 1  Changed: 1  Warnings: 0

データシートの郭海の銀行ロゴをCCBに変更する

mysql> update deposite set b_id =
-> (select b_id from bank where bank_name = '建设银行')
-> where c_id =
-> (select c_id from customer where name = '郭海')
-> ;
Query OK, 3 rows affected (0.06 sec)
Rows matched: 3  Changed: 3  Warnings: 0

サンヨンのデポジット情報(ディスプレイ情報:顧客ID、顧客名、銀行名、デポジット金額)を問い合わせる

mysql> select deposite.c_id,name,bank_name,amount from deposite,customer,bank
-> where name = '孙杨' and deposite.c_id=customer.c_id and bank.b_id=deposite.b_id;
+-+-+-+-+
| c_id   | name   | bank_name    | amount    |
+-+-+-+-+
| 101001 | 孙杨   | 工商银行     |  42526.00 |
| 101001 | 孙杨   | 建设银行     | 435456.00 |
| 101001 | 孙杨   | 中国银行     |  56346.00 |
+-+-+-+-+
3 rows in set (0.01 sec)

または

mysql> select customer.c_id,name,bank_name,amount from
-> deposite inner join customer inner join bank
-> on deposite.c_id = customer.c_id and deposite.b_id = bank.b_id
-> where name = '孙杨';
+-+-+-+-+
| c_id   | name   | bank_name    | amount    |
+-+-+-+-+
| 101001 | 孙杨   | 工商银行     |  42526.00 |
| 101001 | 孙杨   | 建设银行     | 435456.00 |
| 101001 | 孙杨   | 中国银行     |  56346.00 |
+-+-+-+-+
3 rows in set (0.00 sec)

顧客ID、顧客名、銀行名、入金金額は2011-04-05

mysql> select deposite.c_id,name,bank_name,amount from
-> deposite inner join customer inner join bank
-> on deposite.c_id = customer.c_id and deposite.b_id = bank.b_id
-> where dep_date = '2011-04-05';
+-+-+-+-+
| c_id   | name   | bank_name    | amount   |
+-+-+-+-+
| 101001 | 孙杨   | 工商银行     | 42526.00 |
+-+-+-+-+
1 row in set (0.00 sec)

100,000以上のICBC預金を持つ顧客の名前を確認します(各顧客は銀行ごとに1つのアカウントしか持っていません)

mysql> select name from
-> deposite inner join customer inner join bank
-> on deposite.c_id = customer.c_id and deposite.b_id = bank.b_id
-> where bank_name = '工商银行' and amount >= 10000;
+-+
| name   |
+-+
| 孙杨   |
| 郭惠   |
+-+

農業銀行預金の上位2つの顧客預金情報を確認します(表示情報:顧客名、銀行名、預金金額)

mysql> select name from
-> deposite inner join customer inner join bank
-> on deposite.c_id = customer.c_id and deposite.b_id = bank.b_id
-> where bank_name='农业银行'
-> order by amount limit 2
-> ;
+-+
| name   |
+-+
| 卢江   |
| 郭惠   |
+-+
2 rows in set (0.06 sec)

ストアドプロシージャupdate_salaryを作成し、得意先テーブルの給与属性を更新し、給与が5000未満の顧客の給与を倍増します。

mysql> CREATE PROCEDURE update_salary()
-> UPDATE customer set salary = salary * 2
-> WHERE salary < 5000;
Query OK, 0 rows affected (0.00 sec)
mysql> call update_salary();
Query OK, 3 rows affected (0.09 sec)
mysql> select * from customer;
+-+-+-+-+
| c_id   | name   | location | salary  |
+-+-+-+-+
| 101001 | 孙杨   | 广州     | 2468.00 |
| 101002 | 郭海   | 南京     | 7052.00 |
| 101003 | 卢江   | 苏州     | 6892.00 |
| 101004 | 郭惠   | 济南     | 6984.00 |
+-+-+-+-+
4 rows in set (0.00 sec)


1 Star2 Stars3 Stars4 Stars5 Stars (まだ評価されていません)
Loading...
      この投稿は審査処理中  | 元のサイトへ