することで# ;データベースのレビューを作成する #チェック ショーのデータベースを、 ショーでは、データベースのレビューを作成する;#ビューは、データベースを作成するには、デフォルトの文字セットはlatin1エンコーディングされた #変更 #は何の具体的な変更操作ではありません、再構築を削除 するデータベースレビューの文字セットUTF8を変える;#データベース文字エンコーディングUTF8エンコード変更 #削除 ドロップデータベースのレビューを。
レビューを使用します。 #增(创建) テーブル試験(作成 の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デフォルト''; #增加新列 #查 ショーのテーブル。
#増加 INSERT INTOテスト(名)の値( 'wangyong')、( 'Liguo')、( 'jiyuzhiは'); #削除する 。ID = 3試験からの削除、 テストから削除し、削除#後、直接データIDを追加しました増加 切り捨てテストを、#を削除した後、データは、IDクリアされます追加 #変更 更新テスト・セット名=「タイトル」 #; すべてのタイトルにname属性の値 を更新テストセット名=「タイトル」のid = 2; ID番号を2Dタイトルに属性値の名前= #チェック テストからのSELECT *; テストから名前を選択します。
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.1 SQLインジェクション
理由:私は、すべてのデータは、ユーザーが入力したと信じています
ソリューション:
-
ユーザーの判断データによって手動で入力するために彼らの脱出
-
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を作成します。
テストからSELEXT *を説明します。 + ---- + ------------- + ------- + ------- + -------------- - + --------- + --------- + ------ + ------ + ------------- | ID | SELECT_TYPE | 表| タイプ| possible_keys | キー| key_lenに| REF | 行| エクストラ + ---- + ------------- + ------- + ------- + ------------- - + --------- + --------- + ------ + ------ + ------------- | 1 | SIMPLE | テスト| インデックス| NULL | ix_name | 98 | NULL | 1 | インデックスを使用して + ---- + ------------- + ------- + ------- + ------------ --- + --------- + --------- + ------ + ------ + ------------ -
-検索のようにお勧めしません 最も左のプレフィックス複合インデックス- インデックスがの組み合わせである場合:(名前、メールアドレス) -インデックス使用して名前やメール のインデックス使用して-名 インデックスを使用していない-メール
#ドロップ索引名称名の表の テストのドロップインデックスix_name_age。 MySQLの>テストSELECT * FROM説明。 + ---- + ------------- + ------- + ------ + --------------- + ------ + --------- + ------ + ------ + ------- + | ID | SELECT_TYPE | 表| タイプ| possible_keys | キー| key_lenに| REF | 行| エクストラ| + ---- + ------------- + ------- + ------ + --------------- + ------ + --------- + ------ + ------ + ------- + | 1 | SIMPLE | テスト| ALL | NULL | NULL | NULL | NULL | 1 | NULL | + ---- + ------------- + ------- + ------ + --------------- + ------ + --------- + ------ + ------ + ------- +
InnoDBの(高い同時をサポート) 1(デフォルトのバージョンは5.5を含みます) 2.サポートサービス 3.フルテキストインデックスをサポートしていません 4.インデックスとデータが同じファイルであるが、現実の.ibdテーブルの.frmファイルの構造 のMyISAM(サポート高い同時実行)が特に良好ではない 1(デフォルトのバージョン5.5または5.3以下) トランザクションをサポートしていません2. 3.サポートフルテキストインデックスの 4..frm:表構造 .MYD:テーブルデータ .MYI:テーブルインデックス フルテキストインデックス:(中国だけでなく) スフィンクス