操作
插入數據 的語法 :INSERT INTO 表名稱 VALUES(值1,值2,......);
修改數據 的語法:UPDATE 表名稱 SET 字段名1 = 值1, 字段名2=值2,...... 【WHERE 條件】;
刪除數據 的語法:delete from 表名 【[where 條件】;
delete 表1,表2,....... from 表1,表2,...... 【where 條件】;
查詢數據 的語法:
SELECT 查詢列表
FROM 表名或視圖列表
【WHERE 條件表達式】
【GROUP BY 字段名 【HAVING 條件表達式】】
【ORDER BY 字段 【ASC|DESC】】
【LIMIT m,n】;
別名 的語法 : AS 別名;
去重 的語法 :distinct id
著重號 的語法 : 例如:select name from t_stu;
MySQL運算符:
算數運算符 : + - * / %
比較運算符 : = > >= < <= != <=>
邏輯運算符 :&&(and) ||(or) not xor
范圍: between....and...(》=...and表達式a<=....)
not between...and...(<...>
集合 :in not in
模糊查詢 : like not like %表示0-n個字符 _表示一個字符
位運算符: &(按位與) |(按位或)^(按位異或)~(按位取反)>>(右移)<
NULL值判斷: is NULL is not NULL
關聯查詢 聯合查詢
內連接 :inner join cross join
外連接 :左外連接(LEFT OUTER JOIN)、右外連接(RIGHT OUTER JOIN)、全外連接(FULL OUTER JOIN)
自聯結 :當table1和table2本質上是同一張表,只是用取別名的方式虛擬成兩張表以代表不同的意義
迪卡爾積:
定義:將兩(或多)個表的所有行進行組合,連接后的行數為兩(或多)個表的乘積數.
關聯條件:表連接的約束條件可以有三種方式:WHERE, ON, USING
WHERE:適用于所有關聯查詢
ON:只能和JOIN一起使用,只能寫關聯條件。雖然關聯條件可以并到WHERE中和其他條件一起寫,但分開寫可讀性更好。
USING:只能和JOIN一起使用,而且要求兩個關聯字段在關聯表中名稱一致,而且只能表示關聯字段值相等
select 的5個子句:
1 、 where 條件查詢;
2 、 group by 分組查詢;
3 、 聚合函數
avg()平均值;
countI() 返回非NULL值得數目;
min() 返回最小值;
max() 返回最大值;
sum()返回總和;
4 、 having 篩選;
5 、 order by 排序 默認升序 加 DESC 降序
6 、 limit m,n 分頁 #m表示從下標為m的記錄開始查詢,第一條記錄下標為0,n表示取出n條出來,如果從m開始不夠n條了,就有幾條取幾條。m=(page-1)*n
事務
GRANT:授予訪問權限
REVOKE:撤銷訪問權限
COMMIT:提交事務處理
ROLLBACK:事務處理回退
SAVEPOINT:設置保存點
LOCK:對數據庫的特定部分進行鎖定
特性:
原子性(Atomicity):原子意為最小的粒子,或者說不能再分的事物。數據庫事務的不可再分的原則即為原子性。 組成事務的所有SQL必須:要么全部執行,要么全部取消(就像上面的銀行例子)。
一致性(Consistency):指數據的規則,在事務前/后應保持一致
隔離性(Isolation):簡單點說,某個事務的操作對其他事務不可見的.
持久性(Durability):當事務提交完成后,其影響應該保留下來,不能撤消
用法:
開啟事務(start transaction)
執行sql操作(普通sql操作)
提交/回滾(commit/rollback)
數據庫得隔離:
Oracle 支持的 2 種事務隔離級別:READ COMMITED, SERIALIZABLE. Oracle 默認的事務隔離級別為: READ COMMITED
Mysql 支持 4 中事務隔離級別. Mysql 默認的事務隔離級別為: REPEATABLE-READ
每啟動一個 mysql 程序, 就會獲得一個單獨的數據庫連接. 每個數據庫連接都有一個變量 @@tx_isolation, 表示當前的事務隔離級別.
l 查看當前的隔離級別: SELECT @@tx_isolation;
l 查看全局的隔離級別:select @@global.tx_isolation;
l 設置當前 mySQL 連接的隔離級別: set tx_isolation ='repeatable-read';
設置數據庫系統的全局的隔離級別: set global tx_isolation ='read-committed';
權限系統的工作原理:
MySQL的權限系統通過下面兩個階段進行認證:
對連接到數據庫的用戶進行身份認證,以此來判斷此用戶是否屬于合法的用戶,合法的用戶通過認證,不合法的用戶拒絕連接
對通過認證的合法的用戶則賦予相應的權限,用戶可以在這些權限范圍內對數據庫做相應的操作
用戶表user
user表有39個字段。這些字段可以分為4類:
l 用戶列:host,user,password三個字段
l 安全列:ssl_type、ssl_cipher、x509_issuer、x509_subject
n ssl用于加密;x509標準可以用來標識用戶。普通的發行版都沒有加密功能。可以使用SHOW VARIABLES LIKE 'have_openssl'語句來查看是否具有ssl功能。如果取值為DISABLED,那么則沒有ssl加密功能。
l 資源控制列:max_questions(每小時可以允許執行多少次查詢)、max_updates(每小時可以允許執行多少次更新)、max_connections(每小時可以建立多少連接)、max_user_connections(單個用戶可以同時具有的連接數)
n 默認值為0,表示無限制。
示例:
例1:創建用戶admin,權限為可以在所有數據庫上執行所有權限,但只能從本地進行連接
GRANT ALL PRIVILEGES ON . TO admin@localhost;
可以發現除了Grant_priv權限外,所有權限在user表里面都是Y.
例2:在例1基礎上,增加對admin的grant權限
GRANT ALL PRIVILEGES ON . TO admin@localhost WITH GRANT OPTION;
例3:在例2基礎上,設置密碼為“123”
GRANT ALL PRIVILEGES ON . TO admin@localhost IDENTIFIED BY '123' WITH GRANT OPTION;
例4:創建新用戶chai,可以從任何IP進行連接,權限為對test數據庫的所有表進行SELECT、UPDATE、INSERT、DELETE操作,初始密碼為“123”
GRANT SELECT,INSERT,UPDATE,DELETE ON test.* TO 'chai'@'%' IDENTIFIED BY '123';
發現此例,user表中權限都是N,db表中增加的記錄權限則都是Y
注意:
mysql數據庫的user表中user的值為空,表示所有用戶都可以連接(此處不能用,表示用戶名為*的用戶了)
mysql數據庫的user表中host的值為*或空,表示所有外部IP都可以連接,但是不包括本地服務器localhost,因此如果要包括本地服務器,必須單獨為localhost賦予權限。如果host的值為%,表示所有IP,包括本地服務器localhost。