Java基礎9

2020-08-09 10:11:04
  1. MYSQL3種註解
    *單行註解:-- 註解內容 或 # 註解內容(mysql特有)
    多行註解:/ 註解內容 */

  2. SQL分類
    *DDL(Data Definition Language)數據定義語言
    用來定義數據庫物件:數據庫,表,列等。關鍵字:create, drop,alter 等
    *DML(Data Manipulation Language)數據操作語言
    用來對數據庫中表的數據進行增刪改。關鍵字:insert, delete, update 等
    *DQL(Data Query Language)數據查詢語言
    用來查詢數據庫中表的記錄(數據)。關鍵字:select, where 等
    *DCL(Data Control Language)數據控制語言(瞭解)
    用來定義數據庫的存取許可權和安全級別,及建立使用者。關鍵字:GRANT, REVOKE 等

  3. DDL:操作數據庫
    *C(Create):建立
    * 建立數據庫:
    * create database 數據庫名稱;
    * 建立數據庫,判斷不存在,再建立:
    * create database if not exists 數據庫名稱;
    * 建立數據庫,並指定字元集
    * create database 數據庫名稱 character set 字元集名;

    • R(Retrieve):查詢
      * 查詢所有數據庫的名稱:
      * show databases;
      * 查詢某個數據庫的字元集:查詢某個數據庫的建立語句
      * show create database 數據庫名稱;
      *D(Delete):刪除
      * 刪除數據庫
      * drop database 數據庫名稱;
      * 判斷數據庫存在,存在再刪除
      * drop database if exists 數據庫名稱;
      *使用數據庫
      * 查詢當前正在使用的數據庫名稱
      * select database();
      * 使用數據庫
      * use 數據庫名稱;
  4. DDL:操作表
    *數據庫型別:
    1. int:整數型別
    * age int,
    2. double:小數型別
    * score double(5,2)
    3. date:日期,只包含年月日,yyyy-MM-dd
    4. datetime:日期,包含年月日時分秒 yyyy-MM-dd HH:mm:ss
    5. timestamp:時間戳型別 包含年月日時分秒 yyyy-MM-dd HH:mm:ss
    * 如果將來不給這個欄位賦值,或賦值爲null,則預設使用當前的系統時間,來自動賦值

    			6. varchar:字串
    
    • 複製表:
      * create table 表名 like 被複制的表名;
      *R(Retrieve):查詢
      * 查詢某個數據庫中所有的表名稱
      * show tables;
      * 查詢表結構
      * desc 表名;
      *U(Update):修改
      1. 修改表名
      alter table 表名 rename to 新的表名;
      2. 修改表的字元集
      alter table 表名 character set 字元集名稱;
      3. 新增一列
      alter table 表名 add 列名 數據型別;
      4. 修改列名稱 型別
      alter table 表名 change 列名 新列名 新數據型別;
      alter table 表名 modify 列名 新數據型別;
      5. 刪除列
      alter table 表名 drop 列名;
      *D(Delete):刪除
      * drop table 表名;
      * drop table if exists 表名 ;
  5. DML:增刪改表中數據
    *刪除數據:
    *如果要刪除所有記錄
    1. delete from 表名; – 不推薦使用。有多少條記錄就會執行多少次刪除操作
    2. TRUNCATE TABLE 表名; – 推薦使用,效率更高 先刪除表,然後再建立一張一樣的表。

  6. DQL:查詢表中的記錄
    *語法:
    select
    欄位列表
    from
    表名列表
    where
    條件列表
    group by
    分組欄位
    having
    分組之後的條件
    order by
    排序
    limit
    分頁限定

  7. 基礎查詢
    *去除重複:
    * distinct select distinct 列名 from 表名

    • ifnull(表達式1,表達式2):null參與的運算,計算結果都爲null
      * 表達式1:哪個欄位需要判斷是否爲null
      * 如果該欄位爲null後的替換值。
      *起別名:
      * as:as也可以省略
      *運算子<>跟!=一個意思都是不等於的意思
      *運算子 BETWEEN…AND 在。。到。。之間
      *IS NULL 爲空

    • LIKE:模糊查詢
      * 佔位符:
      * _:單個任意字元
      * %:多個任意字元
      *排序查詢

      • 語法:order by 子句

        • order by 排序欄位1 排序方式1 , 排序欄位2 排序方式2…
      • 排序方式:

        • ASC:升序,預設的。
        • DESC:降序。
      • 注意:

        • 如果有多個排序條件,則當前邊的條件值一樣時,纔會判斷第二條件。
          *聚合函數:將一列數據作爲一個整體,進行縱向的計算。
      1. count:計算個數
        1. 一般選擇非空的列:主鍵
        2. count(*)
      2. max:計算最大值
      3. min:計算最小值
      4. sum:計算和
      5. avg:計算平均值
      • 注意:聚合函數的計算,排除null值。
        解決方案:
        1. 選擇不包含非空的列進行計算
        2. IFNULL函數
        *分組查詢:
      1. 語法:group by 分組欄位;
      2. 注意:
        1. 分組之後查詢的欄位:分組欄位、聚合函數
        2. where 和 having 的區別?
          1. where 在分組之前進行限定,如果不滿足條件,則不參與分組。having在分組之後進行限定,如果不滿足結果,則不會被查詢出來
          2. where 後不可以跟聚合函數,having可以進行聚合函數的判斷。
            *分頁查詢
      3. 語法:limit 開始的索引,每頁查詢的條數;
      4. 公式:開始的索引 = (當前的頁碼 - 1) * 每頁顯示的條數
        *級聯操作
        1. 新增級聯操作
          語法:ALTER TABLE 表名 ADD CONSTRAINT 外來鍵名稱
          FOREIGN KEY (外來鍵欄位名稱) REFERENCES 主表名稱(主表列名稱) ON UPDATE CASCADE ON DELETE CASCADE ;
        2. 分類:
          1. 級聯更新:ON UPDATE CASCADE
          2. 級聯刪除:ON DELETE CASCADE
  8. 數據庫的備份和還原
    ** 語法:
    * 備份: mysqldump -u使用者名稱 -p密碼 數據庫名稱 > 儲存的路徑
    * 還原:
    1. 登錄數據庫
    2. 建立數據庫
    3. 使用數據庫
    4. 執行檔案。source 檔案路徑

  9. 內連線多表查詢
    *隱式內連線:使用where條件消除無用數據
    *. 顯式內連線:
    * 語法: select 欄位列表 from 表名1 [inner] join 表名2 on 條件

  10. 外連線多表查詢

* 左外連線:
			* 語法:select 欄位列表 from 表1 left [outer] join 表2 on 條件;
			* 查詢的是左表所有數據以及其交集部分。
*右外連線:
			* 語法:select 欄位列表 from 表1 right [outer] join 表2 on 條件;
			* 查詢的是右表所有數據以及其交集部分。
  1. 子查詢
    *子查詢的結果是單行單列的:
    * 子查詢可以作爲條件,使用運算子去判斷。 運算子: > >= < <= =
    *子查詢的結果是多行單列的:
    * 子查詢可以作爲條件,使用運算子in來判斷
    *子查詢的結果是多行多列的:
    * 子查詢可以作爲一張虛擬表參與查詢
    * 普通內連線

  2. 事務
    *概念:
    * 如果一個包含多個步驟的業務操作,被事務管理,那麼這些操作要麼同時成功,要麼同時失敗。
    *操作:
    1. 開啓事務: start transaction;
    2. 回滾:rollback;
    3. 提交:commit;
    *MySQL數據庫中事務預設自動提交
    * 事務提交的兩種方式:
    * 自動提交:
    * mysql就是自動提交的
    * 一條DML(增刪改)語句會自動提交一次事務。
    * 手動提交:
    * Oracle 數據庫預設是手動提交事務
    * 需要先開啓事務,再提交
    * 修改事務的預設提交方式:
    * 檢視事務的預設提交方式:SELECT @@autocommit; – 1 代表自動提交 0 代表手動提交
    * 修改預設提交方式: set @@autocommit = 0;
    *事務的四大特徵:

    1. 原子性:是不可分割的最小操作單位,要麼同時成功,要麼同時失敗。
    2. 永續性:當事務提交或回滾後,數據庫會持久化的儲存數據。
    3. 隔離性:多個事務之間。相互獨立。
    4. 一致性:事務操作前後,數據總量不變
  3. DCL:管理使用者,授權
    *管理使用者
    1. 新增使用者:
    * 語法:CREATE USER ‘使用者名稱’@‘主機名’ IDENTIFIED BY ‘密碼’;
    2. 刪除使用者:
    * 語法:DROP USER ‘使用者名稱’@‘主機名’;
    3. 修改使用者密碼:
    UPDATE USER SET PASSWORD = PASSWORD(‘新密碼’) WHERE USER = ‘使用者名稱’;
    SET PASSWORD FOR ‘使用者名稱’@‘主機名’ = PASSWORD(‘新密碼’);

       * mysql中忘記了root使用者的密碼?
       		1. cmd -- > net stop mysql 停止mysql服務
       			* 需要管理員執行該cmd
    
       		2. 使用無驗證方式啓動mysql服務: mysqld --skip-grant-tables
       		3. 開啓新的cmd視窗,直接輸入mysql命令,敲回車。就可以登錄成功
       		4. use mysql;
       		5. update user set password = password('你的新密碼') where user = 'root';
       		6. 關閉兩個視窗
       		7. 開啓工作管理員,手動結束mysqld.exe 的進程
       		8. 啓動mysql服務
       		9. 使用新密碼登錄。
       4. 查詢使用者:
       	-- 1. 切換到mysql數據庫
       	USE myql;
       	-- 2. 查詢user表
       	SELECT * FROM USER;
       	* 萬用字元: % 表示可以在任意主機使用使用者登錄數據庫 
    

    *許可權管理:
    1. 查詢許可權:
    – 查詢許可權
    SHOW GRANTS FOR ‘使用者名稱’@‘主機名’;

       2. 授予許可權:
       	-- 授予許可權
       	grant 許可權列表 on 數據庫名.表名 to '使用者名稱'@'主機名';
       	GRANT ALL ON *.* TO 'zhangsan'@'localhost';
       3. 復原許可權:
       	-- 復原許可權:
       	revoke 許可權列表 on 數據庫名.表名 from '使用者名稱'@'主機名';