mysql基本術語和操作

1.數據庫基本概念

事務:

將一組有序的增刪改操作,看作一個獨立執行的單元,這一組操作要麼都成功,只有有一組失敗這一組操作都失敗,數據庫執行事務回滾.
A要給B轉帳
A賬戶中的錢-500
B賬戶中的前+500
轉賬過程中倆個操作看成一個執行單元,只有有一個環節出錯轉賬就失敗,當倆個操作都成功轉賬操作纔會成功

原子性: 把事物看作成最小執行單元,不可分割,要麼都成功,要麼都失敗

一致性: 事物執行前和執行後的狀要保持一致

隔離性: 當用戶併發訪問數據庫時,數據庫會給每一個事物開啓一個線程一個線程開啓一個事務,事務和事務之間互不影響,相互隔離

持久性:一旦事務執行成功,會將已經操作的數據恢復到事務開始前的狀態

髒讀:一個事務操作了另一個沒有提交事務的數據;

不可重複讀:
事務A重複讀取一條數據,事物B修改了這一條數據,導致事務A倆次讀取的數據不一致

幻讀:
事務A讀取表一中的數據,並進行了操作統計,B事務修改了其中一條數據,導致A事務統計的結果不一樣 就像出現了幻覺

事務的四種隔離級別:
Read uncommi:讀爲提交 最低隔離級別:
Read commit: 讀以提交 可以避免髒讀
Repeatable read:可重複讀 可以避免髒讀和不可重複讀
Serializable:串行化 最高隔離級別 可以避免所有情況’
隔離級別越高數據庫的效率會越低

2.數據庫的基礎操作

數據庫的創建與刪除

mysql> CREATE DATABASE test;
mysql> DROP DATABASE test;

選擇要操作的數據庫

mysql> USE test;

創建表格

use test;
create table students
(   id INT not NULL AUTO_INCREMENT, -- 自動添加的主鍵
    name VARCHAR(40) NOT NULL,
    班級 VARCHAR(40) NOT NULL,
    成績 SMALLINT,
 primary key (id) -- 作爲主鍵
   );
-- id在插入時可以添加,自動添加
insert into students(name,班級,成績) values ('小華','一班','99');

插入數據
基本語句INSERT INTO <表名> (字段1, 字段2, …) VALUES (值1, 值2, …);

INSERT INTO students (class_id, name, gender, score) VALUES
  (1, '大寶', 'M', 87),
  (2, '二寶', 'M', 81);
SELECT * FROM students;

更新數據
基本語句UPDATE <表名> SET 字段1=值1, 字段2=值2, … WHERE …;

UPDATE students SET name='小牛', score=77 WHERE id>=5 AND id<=7;
UPDATE students SET score=score+10 WHERE score<80;

刪除數據
基本語句DELETE FROM <表名> WHERE …;

DELETE FROM students WHERE id>=5 AND id<=7;

條件查詢

SELECT * FROM students WHERE score >= 80;
SELECT * FROM students WHERE (score < 80 OR score > 90) AND gender = 'M';

投影查詢

SELECT id, score points, name FROM students WHERE gender = 'M';

排序

SELECT id, name, gender, score
FROM students
WHERE class_id = 1
ORDER BY score DESC;---由高到低 沒有的DESC由低到高

分頁

SELECT id, name, gender, score FROM students ORDER BY score ;

聚合查詢

SELECT COUNT(*) boys FROM students WHERE gender = 'M';--- 計算個數
SELECT AVG(score) average FROM students WHERE gender = 'M';--- 計算平均數

分組

SELECT class_id, COUNT(*) num FROM students GROUP BY class_id;
SELECT class_id, gender, COUNT(*) num FROM students GROUP BY class_id, gender;---多列分組

多表查詢

SELECT * FROM students, classes;同時從students表和classes表的“乘積”

SELECT
    s.id sid,
    s.name,
    s.gender,
    s.score,
    c.id cid,
    c.name cname
FROM students s, classes c
WHERE s.gender = 'M' AND c.id = 1;

兩表之間的連接
INNER JOIN是選出兩張表都存在的記錄

SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
FROM students s
INNER JOIN classes c
ON s.class_id = c.id;

LEFT OUTER JOIN是選出左表存在的記錄

SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
FROM students s
RIGHT OUTER JOIN classes c
ON s.class_id = c.id;

RIGHT OUTER JOIN是選出右表存在的記錄

SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
FROM students s
LEFT OUTER JOIN classes c
ON s.class_id = c.id;

FULL OUTER JOIN則是選出左右表都存在的記錄

SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
FROM students s
FULL OUTER JOIN classes c
ON s.class_id = c.id;

3.索引及其優缺點

索引是對數據庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問數據庫表中的特定信息。

數據庫索引好比是一本書前面的目錄,能加快數據庫的查詢速度。

索引分爲聚簇索引和非聚簇索引兩種,聚簇索引是按照數據存放的物理位置爲順序的,而非聚簇索引就不一樣了;聚簇索引能提高多行檢索的速度,而非聚簇索引對於單行的檢索很快

優缺點:

優點:

  • 在設計數據庫時,通過創建一個惟一的索引,能夠在索引和信息之間形成一對一的映射式的對應關係,增加數據的惟一性特點

  • 能提高數據的搜索及檢索速度,符合數據庫建立的初衷。

  • 能夠加快表與表之間的連接速度,這對於提高數據的參考完整性方面具有重要作用

  • 在信息檢索過程中,若使用分組及排序子句進行時,通過建立索引能有效的減少檢索過程中所需的分組及排序時間,提高檢索效率。

  • 建立索引之後,在信息查詢過程中可以使用優化隱藏器,這對於提高整個信息檢索系統的性能具有重要意義。

缺點

  • 在數據庫建立過程中,需花費較多的時間去建立並維護索引,特別是隨着數據總量的增加,所花費的時間將不斷遞增。
  • 在數據庫中創建的索引需要佔用一定的物理存儲空間,這其中就包括數據表所佔的數據空間以及所創建的每一個索引所佔用的物理空間,如果有必要建立起聚簇索引,所佔用的空間還將進一步的增加
  • 在對錶中的數據進行修改時,例如對其進行增加、刪除或者是修改操作時,索引還需要進行動態的維護,這給數據庫的維護速度帶來了一定的麻煩。

索引類型

根據數據庫的功能,可以在數據庫設計器中創建三種索引:唯一索引、主鍵索引和聚集索引

唯一索引:

唯一索引是不允許其中任何兩行具有相同索引值的索引。當現有數據中存在重複的鍵值時,大多數數據庫不允許將新創建的唯一索引與表一起保存。數據庫還可能防止添加將在表中創建重複鍵值的新數據。例如,如果在employee表中職員的姓(lname)上創建了唯一索引,則任何兩個員工都不能同姓

UNIQUE
create unique index 索引名 on 表名(表中的列[(length)])
alter table 表名 add UNIQUE 索引名 (表中的列[(length)])

主鍵索引:

數據庫表經常有一列或多列組合,其值唯一標識表中的每一行。該列稱爲表的主鍵。在數據庫關係圖中爲表定義主鍵將自動創建主鍵索引,主鍵索引是唯一索引的特定類型。該索引要求主鍵中的每個值都唯一。當在查詢中使用主鍵索引時,它還允許對數據的快速訪問。

PRIMARY KEY  -- 建表時自接指定
alert table 表名 add primary key (表中的列[(length)])

聚集索引:

在聚集索引中,表中行的物理順序與鍵值的邏輯(索引)順序相同。一個表只能包含一個聚集索引。如果某索引不是聚集索引,則表中行的物理順序與鍵值的邏輯順序不匹配。與非聚集索引相比,聚集索引通常提供更快的數據訪問速度。

聚集索引和非聚集索引的區別,如字典默認按字母順序排序(物理順序),讀者如知道某個字的讀音可根據字母順序快速定位(索引順序與物理順序相同)。因此聚集索引和表的內容是在一起的。如讀者需查詢某個生僻字,則需按字典前面的索引,舉例按偏旁進行定位,找到該字對應的頁數,再打開對應頁數找到該字。這種通過兩個地方而查詢到某個字的方式就如非聚集索引。

建立普通索引或組合索引

create index 索引名 on 表名(列名);
create index 索引名 on 表名(列名1,列名2..); -- 組合索引
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章