パイソン第四十六天データベースサマリ

1. SQL文

1.1データベース

コードをコピー
することで#
;データベースのレビューを作成する

#チェック
ショーのデータベースを、
ショーでは、データベースのレビューを作成する;#ビューは、データベースを作成するには、デフォルトの文字セットはlatin1エンコーディングされた

#変更
#は何の具体的な変更操作ではありません、再構築を削除
するデータベースレビューの文字セットUTF8を変える;#データベース文字エンコーディングUTF8エンコード変更

#削除
ドロップデータベースのレビューを。
コードをコピー

 

1.2データシート

コードをコピー
レビューを使用します。
#增(创建)
テーブル試験(作成
    のID INT AUTO_INCREMENT主キー、
    名前VARCHAR(32)NOT NULLデフォルト'' エンジン= INNODB文字セット= UTF8。

(表test_join作成し
    たID INT AUTO_INCREMENT主キー、
    コースVARCHAR(32)NOT NULLデフォルト'' 
    、name_joinのINT NOT NULLデフォルト0の
    制約は、外部キー(name_join)参照試験(ID)fk_name_id 
エンジン= INNODB文字セット= UTF8)を、

#は删
テーブル試験をドロップ。
テーブルのテストドロップ名を変更します。#删除列/字段名


#改
テーブルテストリネームnew_testを改変すること。#更改表名
名前タイトルVARCHAR(32)NOT NULLデフォルト''を修正/テーブルテストの変更を改変すること。#修改字段名 
追加テーブルテストを変更タイトルVARCHAR(32)NOT NULLデフォルト''; #增加新列


#查
ショーのテーブル。
コードをコピー

 

1.3データライン

コードをコピー
#増加
INSERT INTOテスト(名)の値( 'wangyong')、( 'Liguo')、( 'jiyuzhiは'); 

#削除する
。ID = 3試験からの削除、      
テストから削除し、削除#後、直接データIDを追加しました増加
切り捨てテストを、#を削除した後、データは、IDクリアされます追加

#変更
更新テスト・セット名=「タイトル」 #; すべてのタイトルにname属性の値
を更新テストセット名=「タイトル」のid = 2; ID番号を2Dタイトルに属性値の名前= 
#チェック
テストからのSELECT *; 
テストから名前を選択します。
コードをコピー

 

高度なクエリ1.4データライン

コードをコピー
WHERE#
SELECT * WHEREテスト> IDからID 1と<= 3; 
閉じた間隔の間は
SELECT * WHERE ID BETWEEN試験1および3から; 

#で/ていない
テスト(1,2,3-から* WHERE IDを選択); 

#ワイルドカードは、
SELECT * WHEREテスト名からのような「%%王」; 
テストからSELECT * WHERE名「%のwang_」など; 

#限界テーブル名SELECT *限界インデックスオフセットから、データ抽出の数;                     
SELECT *からID制限2,3試験;#2番から(数3)問い合わせ3起動

パケットによって#グループを
#選択年齢、集約関数(COUNT(NUM)/ SUM( NUM)/最大(NUM)/ 分(NUM)/平均(NUMから)) 列名によってテーブル群は、
名前によってテストグループから名前、COUNT(名前)を選択し; 
=「wangyong」名前HAVING名前でテストグループから名前、COUNT(名前)を選択します。 #二次スクリーニングの

発注により、#順
名前DESCによる試験順序から選択* ;#のDESC: 降順
を選択*名前のASCによる試験順序から ;#昇順: 昇順

#でも、テーブルを(右参加、参加を残し、インナー参加)
#すべての権利なし左ディスプレイに参加し、テーブルを残しました使用表示されていない
選択test.nameを、試験からtest_join.course参加左 test.id = test_join.name_joinにtest_join。
コードをコピー

 

2. pymysql操作

2.1 SQLインジェクション

理由:私は、すべてのデータは、ユーザーが入力したと信じています

ソリューション:

  1. ユーザーの判断データによって手動で入力するために彼らの脱出

  2. SQLインジェクションを防ぐ、executeメソッドPyMySQLを使用してSQL文をスプライスしないでください

コードをコピー
pymysqlインポート
性別= INPUT( '性別>>>:')
SNAME = INPUT( "SNAME >>>:") 
リンクサーバー
でCONN = pymysql.connect(ホスト= 'localhostの '、ユーザー= 'ルート'、パスワード= ' 'データベース=' practiceday43 '文字セット=' UTF8「)
カーソル= conn.cursor(カーソル= pymysql.cursors.DictCursor) 
書き込みSQL文、SQL文は、スプライシング行っていない
SQLが=「学生からどこ*選択性別=%sのSNAME =%のS及び「
#パス値は、SQLへの参照の形でタプルを通過
cursor.execute(SQLを、(性別は、SNAME))

RES = cursor.fetchone()
プリント(RES)
RES IF:
    印刷(「が得値成功)
他:
    印刷( 『の値を取得するために失敗』)                                                              
カーソル。近い() 
はconn.close()
コードをコピー

 

2.2トランザクション

4つの特性:

アトミック:一連の操作のいずれか、全てが成功するか、すべて失敗する一貫性を:操作の操作の前と後に、合計金額が一致している単離:他のもののための操作手順、トランザクションはの何も影響はありません持続性:我々はコミット/ロールバックするとき、衝撃が解決するために、トランザクションを補償、力になっています   

使用

オープン:開始トランザクションSQL文のセットの操作が完了するまでに(コミット/ロールバック)  

コードをコピー
表のユーザーを作成します(
ID int型AUTO_INCREMENT主キー、
名前VARCHAR(32)NOT NULLをデフォルト''、
お金がないヌルデフォルト千int型
エンジン= InnoDBの文字セットを)= UTF8; 

 INSERT INTOユーザ(名前、マネー)の値( 'wangyong'、1000年)、( 'Liguo'、1000); 

#通常動作
 開始トランザクション; 
;更新ユーザーSETマネー= 1100は、WHERE名= 'wangyong'です
お金は= 900名前= 'Liguo'アップデータユーザーSET; 
珍しい
 ROLLBACK; 
最終結果データが変更されていない
ユーザーからのMySQL> SELECT *を; 
+ ---- + ---------- + ------- + 
|上記ID |名前|マネー| 
+ ---- + + ------- + ---------- 
| 1 | wangyong | 1000年| 
| 2 | Liguo | 1000年| 
+ ---- + ---------- + ------- +
コードをコピー

 

3.インデックス

3.1役割:クエリをスピードアップ

3.2分類と創造:

主キーインデックス:主キー

コードをコピー
#第一种:
    テーブル試験(作成
        のID INT AUTO_INCREMENT主キー、
        名前VARCHAR(32)NOT NULLデフォルト'' エンジン= InnoDBの文字セット= UTF8と、

#第二种:
    表テスト(登録
        IDのINT NOT NULLデフォルト0、
        名前VARCHAR(32)NULLでないデフォルト'' エンジン= InnoDBの文字セット= UTF8と、
    
    テーブルのテスト変更IDのid INT AUTO_INCREMENT、主キーを変更します。
コードをコピー

 

インデックスのみ:ユニーク

コードをコピー
#まず、
    表のテストを作成します(
        ID int型主キーAUTO_INCREMENT、
        名前VARCHAR(32)NOT NULLデフォルト''を、
        UNIQUE ix_name(名前)
    )=のInnoDBエンジンのcharset = UTF-8; 

上の#一意のインデックスインデックス名を作成する第二のテーブル(名); 
    表のテストを作成します(
        ID int型AUTO_INCREMENT主キー、
        名前VARCHAR(32)NOT NULLデフォルト'' 
    )ENGINE = InnoDBの文字セット= UTF8は、
    
    テスト(名)に一意索引にix_nameを作成し、

作成します。#関節のユニークなインデックスが一意のインデックスを作成しますテーブル名(名前、年齢)上のインデックス名; 
    CREATE TABLEのテスト(
        ID int型主キーAUTO_INCREMENT、
        年齢はintないnullのデフォルト0、
        名前VARCHAR(32)NOT NULLデフォルト''
    )エンジン= InnoDBの文字セット= UTF8。
    
    テスト(年齢、名前)に一意のインデックスix_name_ageを作成します。
コードをコピー

 

通常のインデックス:インデックス

コードをコピー
#第一种
    テーブル試験(作成
        のID INT AUTO_INCREMENT主キー、
        名前VARCHAR(32)NOT NULLデフォルト''、
        インデックスix_name(名)
    )エンジン= InnoDBの文字セット= UTF8と、

#第二种
     テーブル試験(作成
        のID INT AUTO_INCREMENT主キー、
        名前VARCHAR(32)NOT NULLデフォルト'' 
    エンジン= InnoDBの文字セット= UTF8と、
    
    テスト(名前)のインデックスix_nameを作成します。
    
 #联合索引
    テーブル試験(作成
        のID INT AUTO_INCREMENT主キー、
        年齢INT NOT NULLデフォルト0、
        名前VARCHAR(32)NOT NULLデフォルト'' エンジン= InnoDBの文字セット= UTF8と、
    
    テスト(年齢、名前)にインデックスix_name_ageを作成します。
コードをコピー

 

3.3インデックスかどうかを確認します。説明

コードをコピー
テストからSELEXT *を説明します。

+ ---- + ------------- + ------- + ------- + -------------- - + --------- + --------- + ------ + ------ + ------------- 
| ID | SELECT_TYPE | 表| タイプ| possible_keys | キー| key_lenに| REF | 行| エクストラ        
+ ---- + ------------- + ------- + ------- + ------------- - + --------- + --------- + ------ + ------ + ------------- 
| 1 | SIMPLE | テスト| インデックス| NULL | ix_name | 98 | NULL | 1 | インデックスを使用して
+ ---- + ------------- + ------- + ------- + ------------ --- + --------- + --------- + ------ + ------ + ------------ -
コードをコピー

 

3.4使用するルール

コードをコピー
-検索のようにお勧めしません
最も左のプレフィックス複合インデックス- 
インデックスがの組み合わせである場合:(名前、メールアドレス)
    -インデックス使用して名前やメール
    のインデックス使用して-名
    インデックスを使用していない-メール
コードをコピー

 

3.5インデックスの削除

コードをコピー
#ドロップ索引名称名の表の
テストのドロップインデックスix_name_age。

MySQLの>テストSELECT * FROM説明。
+ ---- + ------------- + ------- + ------ + --------------- + ------ + --------- + ------ + ------ + ------- + 
| ID | SELECT_TYPE | 表| タイプ| possible_keys | キー| key_lenに| REF | 行| エクストラ| 
+ ---- + ------------- + ------- + ------ + --------------- + ------ + --------- + ------ + ------ + ------- + 
| 1 | SIMPLE | テスト| ALL | NULL | NULL | NULL | NULL | 1 | NULL | 
+ ---- + ------------- + ------- + ------ + --------------- + ------ + --------- + ------ + ------ + ------- +
コードをコピー

 

 

4ストレージの紹介

コードをコピー
InnoDBの(高い同時をサポート)
    1(デフォルトのバージョンは5.5を含みます)
    2.サポートサービス
    3.フルテキストインデックスをサポートしていません
    4.インデックスとデータが同じファイルであるが、現実の.ibdテーブルの.frmファイルの構造

のMyISAM(サポート高い同時実行)が特に良好ではない
    1(デフォルトのバージョン5.5または5.3以下)
    トランザクションをサポートしていません2. 
    3.サポートフルテキストインデックスの
    4..frm:表構造
      .MYD:テーブルデータ
      .MYI:テーブルインデックス
    
   
フルテキストインデックス:(中国だけでなく)
    スフィンクス

おすすめ

転載: www.cnblogs.com/liguodeboke/p/11129736.html