mysql詳細学習(二)
54693 ワード
7.索引
インデックス(index)によるグループ化により、データの構造を効率的に取得
:文の主幹を抽出し、インデックスの本質を得ることができる:インデックスはデータ構造である
7.1インデックスの分類
1つのテーブルのプライマリ・キー・インデックスは1つのみで、一意のインデックスは1つだけではありません.プライマリ・キー・インデックス 一意の識別子で、重複することはできません.1つの列だけがプライマリ・キー です.
ユニークインデックス 重複する列の出現を回避し、重複することができ、複数の列は一意のインデックス を識別することができる.
通常インデックス(key/index) デフォルトindex,keyキーワード を設定
全文インデックス:(fulltext) は特定のデータベースエンジンにのみ存在し、 快速位置決めデータ
基礎文法
7.2インデックスのテスト
7.3インデックスの原則インデックスは多ければ多いほど良いわけではありません 小さなデータはインデックス を必要としません.インデックスは、クエリのフィールドに一般的に追加される プロセスが変動するフィールドにインデックスを付けない インデックスのデータ構造:
INNodb:Btree
8.権限管理とバックアップ
8.1ユーザー管理
SQLyog可視化ユーザ管理
SQLコマンド:
ユーザーテーブル:mysql.user
本質:ユーザーテーブルの削除と変更
8.2データベースバックアップ重要なデータが失われないことを保証する データ転送 バックアップ方法:直接コピー物理ファイル(data) sqlyogビジュアル化ツールで を手動でエクスポートコマンドラインエクスポート:mysqldump
9規範データベース設計
データベースが複雑な場合は、設計が必要です.
悪いデータベース設計:データ冗長、スペースを浪費するデータ挿入と削除が面倒、異常マルチプログラム性能差 優れたデータベース:メモリ節約 データベースの整合性を保証する 便利開発 設計:分析需要:業務と処理のデータベースを分析する需要 概要設計:設計関係図,e_r図
手順(ブログサイト):情報収集、需要分析 ユーザテーブル(ユーザ登録、個人情報、ブログ作成、分類作成) 分類表(文章分類) コメント表 記事表(記事の情報) 友鎖表(友鎖情報) カスタムテーブル IDエンティティ(需要をフィールドにドロップ) エンティティ間の関係を識別します: ブログを書く:user->blog 分類の作成:user->category 注:user->user 友鎖:links コメントテーブルuser->user-blog
データベースの3つのパターン
第1パターン(1 NF):原子性、各列は分けられない
第2のパターン:前提:第1のパターンを満たし、各テーブルには1つのことしか記述されていません.
第3のパターン:第2のパターンが前提です.各プロパティがプライマリ・キーに直接関連していることを確認します.
10 JDBC
アプリケーション–JDBC----データベースドライバ--データベース
開発者にとってjdbcは勉強しなければならないという.
java.sql
javax.sql JDBCをインストールjarパッケージ をインポート
[外部チェーン画像の転送に失敗しました.ソース局に盗難防止チェーン機構がある可能性があります.画像を保存して直接アップロードすることをお勧めします(img-WJPeAcER-15292309360936593999)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-2020061620415244.png)]は、まず自分が作成したlibフォルダにコピーし、ADD as library にコピーする.テストコード: statementオブジェクト
jdbc中:statementオブジェクトはデータベースにSQL文を送信するために使用され、データベースの削除変更を完了するには、このオブジェクトがデータベースにクエリー文を送信するだけでよい.
一般的な書き方:
Java上のsrcファイルディレクトリの下にpropertiesプロファイルを作成する
SQL注入の問題
sqlに脆弱性があり、データの漏洩を招く:SQL文がつなぎ合わされるor、
PreparedStatement:SQL注入を防止し、効率が高い
Statementのサブクラスです
prepareStatement注入防止の本質:伝達されたパラメータを文字とする
エスケープ文字が直接無視されます
データベース接続プール
≪データベース|Database|ldap≫:≪接続|Connection|ldap≫:≪リソースの解放|Release Resources|ldap≫:リソースの浪費
プール化テクノロジー:
事前のリソースを用意して、来たら接続して準備します.
最小接続数
最大接続数
待ち時間
接続プールを作成し、インタフェースDataSourceを実現
オープンソースデータソース実装 DBcp C3p0 Druid:アリ これらのデータベース接続プールを使用すると、プロジェクト開発でデータベースに接続するコードを記述しないでください.
DBCP
まず対応jarパッケージをインポートし、対応する方法でドライバをロードし、
インデックス(index)によるグループ化により、データの構造を効率的に取得
:文の主幹を抽出し、インデックスの本質を得ることができる:インデックスはデータ構造である
7.1インデックスの分類
1つのテーブルのプライマリ・キー・インデックスは1つのみで、一意のインデックスは1つだけではありません.
基礎文法
-- :
--
-- ,
--
show index from table1
-- ( )
1. alert .table add fulltext index ( )
2. create index on table ( )
explain sql
explain select * from table1; ---
explain select * from table1 where match ( ) against (' ')
7.2インデックスのテスト
delilmiter $$ -- ,
create function mock_data()
return int
begin
end
, ,
7.3インデックスの原則
INNodb:Btree
8.権限管理とバックアップ
8.1ユーザー管理
SQLyog可視化ユーザ管理
SQLコマンド:
ユーザーテーブル:mysql.user
本質:ユーザーテーブルの削除と変更
--
create user identitfied by
--
--1.
set password = password('mima')
--2.
set password for = password('mima')
--
rename user to
--
--all privileges: , ;
--*.*: , ,
grant all privileges on *.* to
--
show grants for
--
show grants for root@localhost
--
revoke all privileges on *.* from
8.2データベースバックアップ
mysqldump -h -u -p > --
mysqldump -h -u -p 1, 2, 3 > --
mysqldump -h -u -p > --
--
-- ,
--source
source
9規範データベース設計
データベースが複雑な場合は、設計が必要です.
悪いデータベース設計:
手順(ブログサイト):
データベースの3つのパターン
第1パターン(1 NF):原子性、各列は分けられない
第2のパターン:前提:第1のパターンを満たし、各テーブルには1つのことしか記述されていません.
第3のパターン:第2のパターンが前提です.各プロパティがプライマリ・キーに直接関連していることを確認します.
10 JDBC
アプリケーション–JDBC----データベースドライバ--データベース
開発者にとってjdbcは勉強しなければならないという.
java.sql
javax.sql
[外部チェーン画像の転送に失敗しました.ソース局に盗難防止チェーン機構がある可能性があります.画像を保存して直接アップロードすることをお勧めします(img-WJPeAcER-15292309360936593999)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-2020061620415244.png)]
//1 .
Class.forName("com.mysql.jdbc.Driver")
//2. URL
jdbc:mysql:// :3306/ ? 1& 2& 3.
String url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&charaterEncoding"
String username = "root";
String password = "123";
//3 ,connection:
//connection , , ,,,,
Connection connection = DriverManager.getConnection(url,username,password);
//4. sql ,statement : sql
Statement statement = connection.createStatement();
//5. SQL
String sql = "select * from users"
//6 sql statement , ,
ResultSet resultset = statement.executeQuery(sql);//
// 7
result.closes();
statement.close();
connection.close();
//connection , , ,,,,
//statement:sQL
statement.executeQuery()// ,
statement.execute();//
statement.executeUpdate();// , , ,
// resultset
resultset.getObject();// , 。
resultset.getString();
resultset.getInt();
...
// resultset
: resultset.next():
resultset.previous():
resultset.absolute(row):
jdbc中:statementオブジェクトはデータベースにSQL文を送信するために使用され、データベースの削除変更を完了するには、このオブジェクトがデータベースにクエリー文を送信するだけでよい.
// ------executeUpdate
//executeUpdate
Statement st = connection.createStatement();
String sql = "insert into user(...)values(....)";
int num = st,executeUpdate(sql);
if (num>0){
system.out.ptint(" ")
}
————————————————————————————————————————————
//executeUpdate
Statement st = connection.createStatement();
String sql = "delete from user where id = 1";
int num = st,executeUpdate(sql);
if (num>0){
system.out.ptint(" ")
}
______________________________________________
//executeUpdate
Statement st = connection.createStatement();
String sql = "update user set name = "hhh" where name = "dd";
int num = st,executeUpdate(sql);
if (num>0){
system.out.ptint(" ")
}
// executeQuery,
Statement st = connection.createStatement();
String sql = "select * from users"
ResultSet resultset = st.executeQuery(sql);//
一般的な書き方:
Java上のsrcファイルディレクトリの下にpropertiesプロファイルを作成する
// db.propeties
driver = com.mysql.jdbc.Driver
url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&charaterEncoding"
username = "root";
password = "123";
// , ,
public class jdbcUtils{
private static String driver = null; // , static,
private static String url = null;
private static String usename = null;
private static String password = null;
static{
try{
IntpuStream in = jdbcUtils.class.getClassLoader().getResourceAsStream("db.propeties");
// jdbcUtils
Properties properties = new Properties();//
properties.load(in);//
driver = properties.getProperty("driver");
url = properties.getProperty("driver");
usename = properties.getProperty("driver");
password = properties.getProperty("driver");
class.forName("driver");//
}catch(Exception e){
e.printStackTrace ();
}
}
//
public static Connection getConnection() throws SQLException{
return DriverManager.getConnection(url,username,password);
}
//
public void static release(Connection conne,Statement st,ResultSet rs ){
if(rs!=null){
rs.close();
} if(st!=null){
st.close();
}
}if(conn!=null)
{
conn.close();
}
}
// ,java
SQL注入の問題
sqlに脆弱性があり、データの漏洩を招く:SQL文がつなぎ合わされるor、
PreparedStatement:SQL注入を防止し、効率が高い
Statementのサブクラスです
// db.propeties
driver = com.mysql.jdbc.Driver
url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&charaterEncoding"
username = "root";
password = "123";
// , ,
public class jdbcUtils{
private static String driver = null; // , static,
private static String url = null;
private static String usename = null;
private static String password = null;
static{
try{
IntpuStream in = jdbcUtils.class.getClassLoader().getResourceAsStream("db.propeties");
// jdbcUtils
Properties properties = new Properties();//
properties.load(in);//
driver = properties.getProperty("driver");
url = properties.getProperty("driver");
usename = properties.getProperty("driver");
password = properties.getProperty("driver");
class.forName("driver");//
}catch(Exception e){
e.printStackTrace ();
}
}
//
public static Connection getConnection() throws SQLException{
return DriverManager.getConnection(url,username,password);
}
//
public void static release(Connection conne,Statement st,ResultSet rs ){
if(rs!=null){
rs.close();
} if(st!=null){
st.close();
}
}if(conn!=null)
{
conn.close();
}
}
// ,java
public class testInsert{
public static void main(string [] args){
Connection conn = null;//
PrepareStatement st = null;// PrepareStatement
try{
conn = jdbcUtils.getConnection();
//
// ?
String sql = "insert into user (id,name,password,birthday) values (?,?,?,?)"
st = conn.prepareStatement(sql);// SQL, ,
//
st.setInt(1,4);
st.setString(2," ");
st.setString(3,"123");
// : date, java
// new Date().getTime() 。
st.setDate(4,new java.sql.Date(new Date().getTime()));
//
int i = st.executeUpdate();
if (i>0){
System.out.print(" ")
}
}catch(Excetipn e){
e.printStackTrae();
}finally{
jdbcUtils.release(conn,st.rs);
}
}
}
// java
public class testInsert{
public static void main(string [] args){
Connection conn = null;//
PrepareStatement st = null;// PrepareStatement
try{
conn = jdbcUtils.getConnection();
//
// ?
String sql = "delete from user where id =?"
st = conn.prepareStatement(sql);// SQL, ,
//
st.setInt(1,4);
int i = st.executeUpdate();
if (i>0){
System.out.print(" ")
}
}catch(Excetipn e){
e.printStackTrae();
}finally{
jdbcUtils.release(conn,st.rs);
}
}
}
// ⑤ java
public class testInsert{
public static void main(string [] args){
Connection conn = null;//
PrepareStatement st = null;// PrepareStatement
try{
conn = jdbcUtils.getConnection();
//
// ?
String sql = "update user set name = ? where id = ?"
st = conn.prepareStatement(sql);// SQL, ,
//
st.setString(2," ");
st.setString(3,"123");
//
int i = st.executeUpdate();
if (i>0){
System.out.print(" ")
}
}catch(Excetipn e){
e.printStackTrae();
}finally{
jdbcUtils.release(conn,st.rs);
}
}
}
//java
public class testInsert{
public static void main(string [] args){
Connection conn = null;//
PrepareStatement st = null;// PrepareStatement
ResultSet rs = null;
try{
conn = jdbcUtils.getConnection();
//
// ?
String sql = "select * from user where id = ?"
st = conn.prepareStatement(sql);// SQL, ,
//
st.setInt(1,4);
rs = st.executeQuery();
while (rs.next()){
System.out.print(rs.getString("name"));
}
}catch(Excetipn e){
e.printStackTrae();
}finally{
jdbcUtils.release(conn,st.rs);
}
}
}
prepareStatement注入防止の本質:伝達されたパラメータを文字とする
エスケープ文字が直接無視されます
データベース接続プール
≪データベース|Database|ldap≫:≪接続|Connection|ldap≫:≪リソースの解放|Release Resources|ldap≫:リソースの浪費
プール化テクノロジー:
事前のリソースを用意して、来たら接続して準備します.
最小接続数
最大接続数
待ち時間
接続プールを作成し、インタフェースDataSourceを実現
オープンソースデータソース実装
DBCP
まず対応jarパッケージをインポートし、対応する方法でドライバをロードし、