MYSQL3種註解
*單行註解:-- 註解內容 或 # 註解內容(mysql特有)
多行註解:/ 註解內容 */
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 等
DDL:操作數據庫
*C(Create):建立
* 建立數據庫:
* create database 數據庫名稱;
* 建立數據庫,判斷不存在,再建立:
* create database if not exists 數據庫名稱;
* 建立數據庫,並指定字元集
* create database 數據庫名稱 character set 字元集名;
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:字串
DML:增刪改表中數據
*刪除數據:
*如果要刪除所有記錄
1. delete from 表名; – 不推薦使用。有多少條記錄就會執行多少次刪除操作
2. TRUNCATE TABLE 表名; – 推薦使用,效率更高 先刪除表,然後再建立一張一樣的表。
DQL:查詢表中的記錄
*語法:
select
欄位列表
from
表名列表
where
條件列表
group by
分組欄位
having
分組之後的條件
order by
排序
limit
分頁限定
基礎查詢
*去除重複:
* distinct select distinct 列名 from 表名
ifnull(表達式1,表達式2):null參與的運算,計算結果都爲null
* 表達式1:哪個欄位需要判斷是否爲null
* 如果該欄位爲null後的替換值。
*起別名:
* as:as也可以省略
*運算子<>跟!=一個意思都是不等於的意思
*運算子 BETWEEN…AND 在。。到。。之間
*IS NULL 爲空
LIKE:模糊查詢
* 佔位符:
* _:單個任意字元
* %:多個任意字元
*排序查詢
語法:order by 子句
排序方式:
注意:
數據庫的備份和還原
** 語法:
* 備份: mysqldump -u使用者名稱 -p密碼 數據庫名稱 > 儲存的路徑
* 還原:
1. 登錄數據庫
2. 建立數據庫
3. 使用數據庫
4. 執行檔案。source 檔案路徑
內連線多表查詢
*隱式內連線:使用where條件消除無用數據
*. 顯式內連線:
* 語法: select 欄位列表 from 表名1 [inner] join 表名2 on 條件
外連線多表查詢
* 左外連線:
* 語法:select 欄位列表 from 表1 left [outer] join 表2 on 條件;
* 查詢的是左表所有數據以及其交集部分。
*右外連線:
* 語法:select 欄位列表 from 表1 right [outer] join 表2 on 條件;
* 查詢的是右表所有數據以及其交集部分。
子查詢
*子查詢的結果是單行單列的:
* 子查詢可以作爲條件,使用運算子去判斷。 運算子: > >= < <= =
*子查詢的結果是多行單列的:
* 子查詢可以作爲條件,使用運算子in來判斷
*子查詢的結果是多行多列的:
* 子查詢可以作爲一張虛擬表參與查詢
* 普通內連線
事務
*概念:
* 如果一個包含多個步驟的業務操作,被事務管理,那麼這些操作要麼同時成功,要麼同時失敗。
*操作:
1. 開啓事務: start transaction;
2. 回滾:rollback;
3. 提交:commit;
*MySQL數據庫中事務預設自動提交
* 事務提交的兩種方式:
* 自動提交:
* mysql就是自動提交的
* 一條DML(增刪改)語句會自動提交一次事務。
* 手動提交:
* Oracle 數據庫預設是手動提交事務
* 需要先開啓事務,再提交
* 修改事務的預設提交方式:
* 檢視事務的預設提交方式:SELECT @@autocommit; – 1 代表自動提交 0 代表手動提交
* 修改預設提交方式: set @@autocommit = 0;
*事務的四大特徵:
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 '使用者名稱'@'主機名';