1.術語
數據庫:一些關聯表的集合;
表:數據的矩陣;
行:一組相關的數據;
列:一組相同類型的數據;
冗余:存儲兩倍數據(降低了性能,提高了數據安全性);
主鍵:唯一(一個數據表最多有一個主鍵,值具有唯一性);
外鍵:用于關聯兩個表;
復合鍵:復合鍵(組合鍵)將多個列作為一個索引鍵,一般用于復合索引;
索引:使用索引可快速訪問數據庫表中的特定信息。索引是對數據庫表中一列或多列的值進行排序的一種結構。類似于書籍的目錄;
參照完整性:
實體完整性:
MySQL數據庫:MySQL是一種關聯數據庫管理系統,關聯數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度并提高了靈活性。
2.語句
創建數據庫:CREATE DATABASE test0420
刪除數據庫:DROP DATABASE test0420
創建表:
CREATE TABLE w_tbl(
w_id INT NOT NULL AUTO_INCREMENT, //自增
w_title VARCHAR(100) NOT NULL,//非空
w_author VARCHAR(40) NOT NULL,
submission_date DATE,
PRIMARY KEY ( w_id ) //聲明主鍵
)ENGINE=InnoDB DEFAULT CHARSET=utf8; //設置引擎和編碼
刪除表:DROP TABLE w_tbl
插入:INSERT INTO z_tbl (z_id, z_name, z_desc) VALUES (1,'wxe','cute')
查詢:
SELECT * FROM table_name
[WHERE Clause] // 查詢條件 AND、OR、以及邏輯運算符等
[OFFSET M ] //開始查詢的數據偏移量,默認情況下偏移量為0
[LIMIT N] // 設定返回的記錄數
更新:UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
刪除:DELETE FROM table_name [WHERE Clause]
LIKE子句:%表示任意字符
UNION操作符:
SELECT f1, f2, ... fn FROM tables1 [WHERE conditions1]
UNION [ALL | DISTINCT] //默認是DISTINCT去重,ALL不去重
SELECT e1, e2, ... en FROM tables2 [WHERE conditions2];
ORDER BY排序: [ASC [DESC]] 默認是ASC升序,DESC為降序
GROUP BY分組:
1)語法:
SELECT column_name, function(column_name) //可以是COUNT, SUM, AVG等函數
FROM table_name
WHERE column_name operator value
GROUP BY column_name // 按照某一列進行分組
WITH ROLLUP; //在以該列分組上在進行統計(COUNT, SUM, AVG等操作)
2)示例:
按name分組,統計每個用戶的記錄數:
SELECT name,COUNT(*) as user_count FROM employee_tbl GROUP BY name;
按name分組,統計每個用戶的登錄數:
SELECT name,SUM(singin) as singin_count FROM employee_tbl GROUP BY name WITH ROLLUP;
其中記錄 NULL 表示所有人的登錄次數。
可以使用 coalesce 來設置一個可以取代 NUll 的名稱,coalesce 語法:
select coalesce(a,b,c);
參數說明:如果a==null,則選擇b;如果b==null,則選擇c;如果a!=null,則選擇a;如果a b c 都為null ,則返回為null(沒意義)。
SELECT COALESCE(name,'總數') as user_name,SUM(singin) as singin_count FROM employee_tbl GROUP BY name WITH ROLLUP;
Join連接
1)INNER JOIN ON(內連接,等值連接,默認的JOIN方式):獲取兩個表中字段匹配關系的記錄;
例:select a.id, a.name,b.describe from t_one a inner join t_two b on a.name = b.name;
等同于:select a.id, a.name,b.describe from t_one a, t_two b where a.name = b.name;
2)LEFT JOIN ON(左連接):獲取左表所有記錄,即使右表沒有對應匹配的記錄;
3)RIGHT JOIN ON(右連接):反之2);
MySQL事務
1)在 MySQL 中只有使用了 Innodb 數據庫引擎的數據庫或表才支持事務。
2)事務處理可以用來維護數據庫的完整性,保證成批的 SQL 語句要么全部執行,要么全部不執行。
3)事務用來管理 insert,update,delete 語句。
事務是必須滿足4個條件(ACID): Atomicity(原子性)、Consistency(穩定性)、Isolation(隔離性)、Durability(可靠性)
例子:
MYSQL 事務處理主要有兩種方法:
1、用 BEGIN, ROLLBACK, COMMIT來實現
BEGIN 開始一個事務
ROLLBACK 事務回滾
COMMIT 事務確認
2、直接用 SET 來改變 MySQL 的自動提交模式:
SET AUTOCOMMIT=0 禁止自動提交
SET AUTOCOMMIT=1 開啟自動提交
ALTER 修改數據庫表名或者字段
1)刪除表字段:alter table t_one drop title;
2)添加表字段:
alter table t_one add title varchar; 添加vcarchar類型的title字段到尾部
alter table t_one add title varchar first; 添加varchar類型的title字段到首位
alter table t_one add title varchar after name;添加varchar類型的title字段到name字段后邊;
3)修改字段類型或名稱:
alter table t_one modify name CHAR(10);修改那么字段的類型
4)修改表明:
ALTER TABLE t_one RENAME TO t_two;
INDEX索引
索引分為單列索引和組合索引;
索引其實已是一張表,里面包含了主鍵與索引字段,并指向實體表的記錄;
優缺點:
雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對表進行INSERT、UPDATE和DELETE。因為更新表時,MySQL不僅要保存數據,還要保存一下索引文件;
建立索引會占用磁盤空間的索引文件。