索引(Index)是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)??梢缘玫剿饕谋举|(zhì):索引是數(shù)據(jù)結(jié)構(gòu)。
創(chuàng)新互聯(lián)建站制作網(wǎng)站網(wǎng)頁找三站合一網(wǎng)站制作公司,專注于網(wǎng)頁設(shè)計(jì),網(wǎng)站制作、網(wǎng)站建設(shè),網(wǎng)站設(shè)計(jì),企業(yè)網(wǎng)站搭建,網(wǎng)站開發(fā),建網(wǎng)站業(yè)務(wù),680元做網(wǎng)站,已為上千服務(wù),創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)將一如既往的為我們的客戶提供最優(yōu)質(zhì)的網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷推廣服務(wù)!
可以理解為“排好序的快速查找數(shù)據(jù)結(jié)構(gòu)”
在數(shù)據(jù)之外,數(shù)據(jù)庫系統(tǒng)還維護(hù)著滿足特定查找算法的數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)以某種方式引用(指向)數(shù)據(jù),
這樣就可以在這些數(shù)據(jù)結(jié)構(gòu)上實(shí)現(xiàn)高級(jí)查找算法,這種數(shù)據(jù)結(jié)構(gòu)就是索引。
高級(jí)操作
1.Mysql 主從同步配置
2.Mysql 雙master 配置
3.Mysql 雙master+叢庫+keepalived 配置高可用數(shù)據(jù)庫
客戶端
作為DBA,一定不要用各種GUI工具,mysql自帶命令行client才是你的最佳武器
可選項(xiàng)
1.mysql 分區(qū)配置,因?yàn)橄拗铺?,?shí)際中分表都是程序做
2.高性能 mysql
a).drizzle
b).MariaDB
c).handlersocket
基本知識(shí)
1.mysql的編譯安裝
2.mysql 第3方存儲(chǔ)引擎安裝配置方法
3.mysql 主流存儲(chǔ)引擎(MyISAM/innodb/MEMORY)的特點(diǎn)
4.字符串編碼知識(shí)
5.MySQL用戶賬戶管理
6.數(shù)據(jù)備份/數(shù)據(jù)入導(dǎo)出
7.mysql 支持的基本數(shù)據(jù)類型
8.庫/表/字段/索引 的創(chuàng)建/修改/刪除
9.基本sql 語法:select/insert/update/delete,掌握最基本的語法即可,什么inner join,left join的了解就行 mysql的應(yīng)用場景大多都是高并發(fā)訪問/業(yè)務(wù)邏輯簡單,join/子查詢/視圖/觸發(fā)器 基本上不用
10.sql 聚集查詢:group by/having
11.如何用explain 分析優(yōu)化查詢
12.常見 sql 優(yōu)化技巧
a).select xx from yyy limited ...,
b).order by random
c).select count(*) from
13.各種show xxx 指令,大概有20種,每個(gè)都嘗試用一次
14.show VARIABLES; 大概有240項(xiàng),逐條看懂,可以打印出來貼墻上
你可以看看這本書《mysql數(shù)據(jù)庫應(yīng)用從入門到精通》,這本書共分為3篇。其中第一篇為MySQL數(shù)據(jù)庫基礎(chǔ)篇,內(nèi)容包括數(shù)據(jù)庫涉及到的基本概念、MySQL數(shù)據(jù)庫的安裝與配置。第二篇為標(biāo)準(zhǔn)SQL語句編程和應(yīng)用篇,內(nèi)容包括操作數(shù)據(jù)庫對(duì)象、操作表對(duì)象、操作索引對(duì)象、操作視圖對(duì)象、操作觸發(fā)器對(duì)象和操作數(shù)據(jù)。第三篇為MySQL數(shù)據(jù)庫管理篇,內(nèi)容包括MySQL數(shù)據(jù)庫的用戶管理和權(quán)限管理、MySQL數(shù)據(jù)庫的日志管理、MySQL數(shù)據(jù)庫的性能優(yōu)化和PowerDesigner數(shù)據(jù)庫設(shè)計(jì)軟件。
UPDATE worker_view4 SET name='hi';
ERROR............The target table worker_view4 of the UPDATE is not updatable.
(4)視圖中的SELECT中包含子查詢。
CREATE VIEW worker_view5(name)
AS SELECT (SELECT name FROM worker);
UPDATE worker_view5 SET name = '劉佳';
該視圖中包含了子查詢,因此也是不能更新的。
(5)由不可更新的視圖導(dǎo)出的視圖。
CREATE VIEW worker_view6
AS SELECT * FROM worker_view5;
UPDATE worker_view6 SET name = '王仔';
因?yàn)閣orker_view6是不可更新的視圖,所以worker_view6也不可以更新的視圖。使用UPDATE語句更新時(shí),會(huì)出現(xiàn)系統(tǒng)報(bào)錯(cuò)。
(6)創(chuàng)建視圖時(shí),ALGORITHM為TEMPTABLE類型。
CREATE ALGORITHM=TEMPTABLE
VIEW worker_view7
AS SELECT * FROM worker;
UPDATE worker_view7 SET name = '王仔';
因?yàn)樵撘晥DALGORITHM為TEMPTABLE類型,所以worker_view7不可以更新的視圖。TEMPTABLE類型就是臨時(shí)表類型。系統(tǒng)默認(rèn)臨時(shí)表是不能更新的。
(7)視圖對(duì)應(yīng)的表上存在沒有默認(rèn)值的列,而且該列沒有包含在視圖里。例如,表中包含的name字段沒有默認(rèn)值,但是視圖中不包含該字段。那么這個(gè)視圖是不能更新的。因?yàn)?,在更新視圖時(shí),這個(gè)沒有默認(rèn)值的記錄將沒有值插入,也沒有NULL值插入。數(shù)據(jù)庫系統(tǒng)是不會(huì)允許這樣的情況出現(xiàn)的,數(shù)據(jù)庫系統(tǒng)將會(huì)阻止這個(gè)視圖更新。
注意:視圖中雖然可以更新數(shù)據(jù),但是有很多的限制。一般情況下,最好將視圖作為查詢數(shù)據(jù)的虛擬表,而不要通過視圖來更新數(shù)據(jù)。因?yàn)?,使用視圖更新數(shù)據(jù)時(shí),如果沒有全面考慮在視圖中更新數(shù)據(jù)的限制,可能會(huì)造成數(shù)據(jù)更新失敗。
除了上述條件不能更新視圖以外,WITH[CASCADED|LOCAL]CHECK OPTION也將決定視圖能否更新。"LOCAL"參數(shù)表示更新視圖時(shí)要滿足該視圖本身的定義的條件即可;
8.6 刪除視圖
刪除視圖是指刪除數(shù)據(jù)庫中已經(jīng)存在的視圖。刪除視圖時(shí),只能刪除視圖的定義,不會(huì)刪除數(shù)據(jù)。MYSQL中,使用DROP VIEW語句來刪除視圖,不會(huì)刪除數(shù)據(jù)。MySQL中,使用DROP VIEW語句來刪除視圖。但是,用戶必須擁有DROP權(quán)限。
DROP VIEW[IF EXISTS] 視圖名列表 [RESTRICT|CASCADE]
實(shí)例一:
SELECT Drop_priv
FROM mysql.user
WHERE user='root';
CREATE VIEW worker_view_del1
AS SELECT * FROM worker;
CREATE VIEW worker_view_del2
AS SELECT * FROM worker;
CREATE VIEW worker_view_del3
AS SELECT * FROM worker;
DROP VIEW IF EXISTS worker_view_del2, worker_view_del3;
8.7 本章實(shí)例
在test數(shù)據(jù)庫中work_info表上進(jìn)行視圖操作。
1. 在test數(shù)據(jù)庫中work_info表
2. 插入記錄
3. 創(chuàng)建視圖info_view
4. 查看視圖info_view的基本結(jié)構(gòu)和詳細(xì)結(jié)構(gòu)
5. 查看視圖info_view的所有記錄
6. 修改視圖info_view
7. 更新視圖
8. 刪除視圖
work_info表的結(jié)構(gòu)
字段名 字段描述 數(shù)據(jù)類型 主鍵 外鍵 非空 唯一 自增
id 編號(hào) INT(10) 是 否 是 是 否
name 姓名 VARCHAR(20) 否 否 是 否 否
gender 姓別 VARCHAR(4) 否 否 是 否 否
age 年齡 INT(5) 否 否 否 否 否
address 家庭住址 VARCHAR(50) 否 否 否 否 否
tel 電話號(hào)碼 VARCHAR(20) 否 否 否 否 否
work_info表中的內(nèi)容
id name gender age address tel
1 張三 M 18 北市市海淀區(qū) 01-155151
2 李四 M 22 北京市昌平區(qū) 01-215151
3 王五 F 17 湖南省永州市 025-545845
4 趙六 F 25 遼寧省阜新市 0625-514545
(1) 創(chuàng)建work_info表
USE test;
CREATE TABLE IF NOT EXISTS work_info (
id INT(10) NOT NULL UNIQUE PRIMARY KEY,
name VARCHAR(20) NOT NULL,
gender VARCHAR(4) NOT NULL,
age INT(5),
address VARCHAR(50),
tel VARCHAR(20)
) DEFAULT CHARSET=utf8;
(2)向work_info表中插入幾條記錄。
INSERT INTO work_info VALUES
(1, '張三', 'M', 18, '北市市海淀區(qū)','01-155151'),
(2,'李四', 'M', 22, '北京市昌平區(qū)', '01-215151'),
(3,'王五','F',17,'湖南省永州市','025-545845'),
(4,'趙六','F',25,'遼寧省阜新市','0625-514545');
(3) 創(chuàng)建視圖info_view。從work_info表中選出age20的記錄來創(chuàng)建視圖。視圖的字段包括id、name、gender和address。ALGORITHM設(shè)置為MERGE類型。加上WITH LOCAL CHECK OPTION條件。
CREATE ALGORITHM=MERGE
VIEW info_view(id, name, gender, address)
AS SELECT id, name, gender, address
FROM work_info
WHERE age20
WITH LOCAL CHECK OPTION;
(4)查看視圖info_view的基本結(jié)構(gòu)和詳細(xì)結(jié)構(gòu)。
SHOW CREATE VIEW info_view \G
(5)查看視圖info_view的所有記錄。
SELECT * FROM info_view;
(6)修改視圖info_view,使其顯示age20的信息,其他條件不變。
ALTER ALGORITHM=MERGE
VIEW info_view(id, name, gender, address)
AS SELECT id, name, gender, address
FROM work_info
WHERE age20
WITH LOCAL CHECK OPTION;
(7)更新視圖,將id為3的記錄進(jìn)行更新。設(shè)置其gender為M。
UPDATE info_view SET gender='M' WHERE id=3;
(8)刪除視圖。
DROP VIEW info_view;
8.8 上機(jī)實(shí)踐
題目要求:
(1)在數(shù)據(jù)庫example下創(chuàng)建college表。
(2)在college表上創(chuàng)建視圖college_view。視圖的字段包括student_num、student_name、student_age和department。ALGORITHM設(shè)置為UNDEFINED類型。加上WITH LOCAL CHECK OPTION條件。
(3)查看視圖college_view的詳細(xì)結(jié)構(gòu)。
(4)更新視圖。向視圖中插入三條記錄。
(5)修改視圖,使其顯示專業(yè)為"計(jì)算機(jī)"的信息,其他條件不變。
(6)刪除視圖college_view。
college表的結(jié)構(gòu)
字段名 字段描述 數(shù)據(jù)類型 主鍵 外鍵 非空 唯一 自增
number 學(xué)號(hào) INT(10) 是 否 是 是 否
name 姓名 VARCHAR(20) 否 否 是 否 否
major 專業(yè) VARCHAR(20) 否 否 是 否 否
age 年齡 INT(5) 否 否 否 否 否
college_view表的內(nèi)容
student_num student_name student_age department
0901 張三 20 外語
0902 李四 22 計(jì)算機(jī)
0903 王五 19 計(jì)算機(jī)
USE example;
CREATE TABLE college(
number INT(10) NOT NULL UNIQUE PRIMARY KEY,
name VARCHAR(20) NOT NULL,
major VARCHAR(20) NOT NULL,
age TINYINT(3)
) DEFAULT CHARSET=utf8;
CREATE ALGORITHM=UNDEFINED
VIEW college_view(student_num, student_name, student_age, department)
AS SELECT number, name, age, major
FROM college
WITH LOCAL CHECK OPTION;
SHOW CREATE VIEW college_view \G
INSERT INTO college_view VALUES
(0901, '張三', 20, '外語'),
(0902, '李四', 22, '計(jì)算機(jī)'),
(0903, '王五', 19, '計(jì)算機(jī)');
CREATE OR REPLACE ALGORITHM=UNDEFINED
VIEW college_view(student_num, student_name, student_age, department)
AS SELECT number, name, age, major
FROM college
WHERE major='計(jì)算機(jī)'
WITH LOCAL CHECK OPTION;
看你基礎(chǔ)如何了.
你要是 什么都不知道的. 那么可能需要先掌握 基本的 SQL 語言, 然后再在 MYSQL 里面慢慢實(shí)踐。
你要是 僅僅知道基本的 SQL 語言的語法, 那么就可以直接 在 MySQL 里面做一些基本的實(shí)踐, 然后慢慢的多看一些 別人的例子。然后了解一些 MySQL 的函數(shù)之類的。
你要是 已經(jīng)對(duì) SQL Server 或者 Oracle 比較熟練了,那么就可以直接 看看 MySQL 與 其他數(shù)據(jù)庫之間的差異?;旧暇涂梢粤恕2槐貜牧汩_始了。
MySQL學(xué)習(xí)路線(針對(duì)DBA)
1.深入學(xué)習(xí)SQL;
2.了解MySQL 體系結(jié)構(gòu)、MySQL 安全、MySQL 監(jiān)控與運(yùn)維、MySQL 備份與恢復(fù)、MySQL 集群、MySQL 操作與管理、MySQL 架構(gòu)等等,這里面有很多知識(shí),本人也在學(xué)習(xí)中,就不展開了;
3.在實(shí)踐中提高,多總結(jié),多積累。
學(xué)習(xí)教程: