データベースの続き


本文は基礎知識の学習過程の中のノートと総括で、後での温習と参考に供します
  • マルチテーブルクエリー:
    --  
    CREATE TABLE dept(
        id INT PRIMARY KEY AUTO_INCREMENT,
        NAME VARCHAR(20)
    );
    
    INSERT INTO dept (NAME) VALUES (' '),(' '),(' ');
    
    --  
    CREATE TABLE emp (
        id INT PRIMARY KEY AUTO_INCREMENT,
        NAME VARCHAR(10),
        gender CHAR(1), --  
        salary DOUBLE, --  
        join_date DATE, --  
        dept_id INT,
        FOREIGN KEY (dept_id) REFERENCES dept(id) --  , ( )
    );
    
    INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES(' ',' ',7200,'2015-02-24',1);
    INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES(' ',' ',3600,'2019-12-02',2);
    INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES(' ',' ',9000,'2008-08-08',2);
    INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES(' ',' ',5000,'2015-10-07',3);
    INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES(' ',' ',4500,'2018-03-14',1);
  • デカルト積:2つの集合A,Bがある.この2つの集合のすべての構成状況を取ります.
  • マルチテーブルクエリの分類:
  • 内の接続クエリー:
  • 暗黙的な内部接続:where条件を使用して不要なデータを除去
  • 従業員テーブルの名前、性別を照会します.部門表の名称
    SELECT 
        t1.name, --  
        t1.gender,--  
        t2.name --  
    FROM
        emp t1,
        dept t2
    WHERE 
        t1.`dept_id` = t2.`id`;
  • 明示的な内部接続:
  • 構文:selectフィールドリストfromテーブル名1[inner]joinテーブル名2 on条件
  • SELECT * FROM emp JOIN dept ON emp.`dept_id` = dept.`id`;


  • 外部接続クエリー:
  • 左外部接続:
  • 構文:selectフィールドリストfrom表1 left[outer]join表2 on条件;
  • は、左のテーブルのすべてのデータとその交差部分をクエリーします.
  • すべての従業員情報を照会し、従業員に部門がある場合は部門名を照会し、部門がない場合は部門名を表示しない
  • SELECT     t1.*,t2.`name` FROM emp t1 LEFT JOIN dept t2 ON t1.`dept_id` = t2.`id`;


  • 右外接続同理
  • サブクエリ:
  • コンセプト:ネストされたクエリをサブクエリと呼びます.
  • サブクエリの違い:
  • サブクエリの結果は、1行1列です.(クエリに使用可能な演算子)
  • 従業員の賃金が平均賃金より小さい人を調べる
  • SELECT * FROM emp WHERE emp.salary < (SELECT AVG(salary) FROM emp);


  • サブクエリの結果は、複数行の単一列:(演算子in)
  • 「財務部」と「市場部」のすべての従業員情報を照会
  • SELECT * FROM emp WHERE dept_id IN(SELECT id FROM dept WHERE NAME='財務部'OR NAME='市場部');


  • サブクエリの結果は複数行の複数列です.(サブクエリは仮想テーブルとしてクエリに参加できます)
  • 従業員の入社日が2016-11-11日以降の従業員情報と部門情報の照会
  • SELECT * FROM dept t1 ,(SELECT * FROM emp WHERE emp.`join_date` > '2016-11-11') t2  WHERE t1.id = t2.dept_id;





  • マルチテーブル・クエリー・ケース:
  • トランザクション
  • コンセプト:複数のステップを含むビジネス・オペレーションがトランザクションによって管理される場合、これらのオペレーションは同時に成功するか、同時に失敗するかのいずれかです.
  • 操作:
  • オープントランザクション:start transaction;
  • ロールバック:rollback;
  • 提出:commit;

  • トランザクションのコミットの2つの方法:
  • 自動コミット:
  • mysqlは自動提出の
  • です
  • DML(追加削除)文は、トランザクションを自動的にコミットします.

  • 手動コミット:
  • Oracleデータベースのデフォルトは、手動でトランザクションをコミットする
  • です.
  • トランザクションを開始してから
  • にコミットする必要があります.

  • トランザクションのデフォルトのコミット方法を変更します.
  • トランザクションのデフォルトコミットを表示する方法:SELECT@@autocommit;1は自動コミット0は手動コミット
  • を表します.
  • デフォルトコミット方式の変更:set@@autocommit=0;

  • トランザクションの4つの特徴:
  • 原子性:分割不可能な最小操作単位であり、同時に成功するか、同時に失敗するか.
  • 永続性:トランザクションがコミットまたはロールバックされると、データベースはデータを永続的に保存します.
  • 独立性:複数のトランザクション間.互いに独立する.
  • 一貫性:トランザクションの前後で、データの合計は
  • に変わりません.

  • DCL:ユーザー認可の管理
  • 管理ユーザ
  • ユーザーの追加:
  • 構文:CREATE USER'ユーザー名'@'ホスト名'IDENTIFIED BY'パスワード';

  • ユーザーの削除:
  • 構文:DROP USER'ユーザー名'@'ホスト名';

  • ユーザーパスワードの変更:
  • UPDATE USER SET PASWORD=PASWORD('新パスワード')WHERE USER='ユーザー名';
  • SET PASSWORD FOR'ユーザー名'@'ホスト名'=PASSWORD('新しいパスワード');

  • ユーザーの問い合わせ:
  • mysqlデータベースへの切り替え
  • USE myql;

  • クエリーuserテーブル
  • SELECT * FROM USER;

  • ワイルドカード:%は、任意のホストでユーザ登録データベース
  • を使用できることを示す.

  • 授権管理:
  • クエリー権限:、
  • SHOW GRANTS FOR'ユーザー名'@'ホスト名';
  • SHOW GRANTS FOR 'lisi'@'%';

  • 権限付与:
  • grant権限リストonデータベース名.表名to'ユーザー名'@'ホスト名';

  • 権限の取り消し:
  • revoke権限リストonデータベース名.表名from'ユーザー名'@'ホスト名';
  • REVOKE UPDATE ON db3.`account` FROM 'lisi'@'%';