本文目錄一覽:
- 1、MySQL數據庫基本的三個優化法則是什麼?
- 2、零基礎如何自學使用MySQL數據庫?
- 3、MySQL數據庫基礎+ 數據庫的基本操作?
- 4、自學數據庫MySQL需要注意哪些方面
- 5、MYSQL使用基礎、進階分享
- 6、mysql 7.8本章習題work表怎麼建立
MySQL數據庫基本的三個優化法則是什麼?
(1)系統服務優化,把MySQL的key_buffer、cache_buffer、query_cache等增加容量
(2)給所有經常查詢的字段增加適當的索引
(3)優化SQL語句,減少Ditinct、Group、Join等等語句的操作
零基礎如何自學使用MySQL數據庫?
對於非計算機出身的我,大學只會hello word和跑馬燈,期間過程確實非常曲折,分享下我的自學過程:
1、 自己在windows和linux上安裝了mysql,自學linux的基礎知識,學習mysql的最基礎的知識,即怎麼寫sql,存儲過程,表的設計等,從0到熟悉大概花了3個月 ,推薦《mysql入門很簡單》。
2、系統地較為深入地學習mysql的sql優化,備份和恢復,參數優化,架構優化,硬件層面的優化,高可用方案,複製技術等等,這段時間你不一定能實際接觸到這些,就像我當初那樣,肯定沒什麼公司招一個小白。 我選擇自己看書,推薦《高性能mysql》,裏面所有的章節都需要看一遍,以現在的水平肯定看不懂,但需要知道大概怎麼回事,為後續的找mysql初級dba的工作打一個鋪墊,這個過程大概也需要3個月。
3、 紙上得來終覺淺,完成以上兩步,我開始準備找一份mysql相關的工作,而不是天天用着excel表格做着select * from table_sb這樣的工作。 當然我這麼猥瑣的人肯定不會裸辭,該畫的電路板也一樣畫,業餘時間開始投初級mysql dba的工作,並且不間斷地學習,網上各種找mysql面試的相關題目(實際上我當時完全沒有任何實戰經驗),陸續收到一些面試,憑藉之前自學的mysql知識,開始胡亂吹牛逼,先混進去再說。 你不做mysql實際相關的工作,永遠也不知道自己之前認知的db知識有多幼稚。 友情提示一點,一般公司都沒有專職dba的,所以面試的時候一定要自信,其實你學了這麼多,雖然毫無實戰經驗,理論知識很大概率比面試你的人牛逼,所以各種吹,我就這樣真正進入初級dba的圈子(由於這時對linux還處於cd ls的水平,所以之前也根本沒做過運維),這個邊工作邊找工作的過程又持續了2個月。
4、真正進入互聯網,接觸生產環境後,這是我進步最大的時候。 第一步需要將之前所學真正地應用起來,並且應用的過程中,再回頭看之前的書籍,這時候需要真正去理解,而不是似是而非,一知半解。 這時再推薦《高性能mysql 第三版》,全本再看一遍,這時需要全部看懂,另外還有《mysql技術內幕:innodb存儲引擎》等等。 總之這段時間就需要開始關注mysql一些細節了,比如db故障處理,高可用,負載均衡等等的具體實現了。 另外,linux的知識同步也要深入去學習,至少會寫shell腳本,常見的linux知識等,我在這花了1年多;
5、 dba的工作一般是非常輕閑的,畢竟不是大公司,技術能力有限,該學的也學得差不多了,接觸不到海量數據,高並發等比較鍛煉人的場合,於是我又準備跳了。 於是來了公有雲,現在每天運維萬多個db實例,平均每天處理5+個緊急db故障,幾乎mysql會遇到的問題,感覺都遇到了,能感覺到技術實力和經驗也在每天都在積累,在進步。 但是感覺還是欠缺了很多,下一步就看你選擇了,是再去研究源代碼,底層原理的東西多點,還是數據庫運維和應用多一點,就比如業界姜承堯,何登成與葉金榮的區別。 由於我的歷史原因,對c++等幾乎不懂,平時也用不到,所以看代碼等事實際太累,於是我再去學mongodb,接了公司mongodb運維的活,算是在廣度上的一個擴展,萬一哪天mysql不行了呢
6、 總之,對於db小白來說,最重要的一點就是,學習的過程不能斷。 PS 上面的方法比較野路子,適合沒什麼基礎的童鞋,如果本來就是DBA,比如從oracle轉到mysql,那麼建議直接看mysql官方文檔,而官方文檔是db達到一定水平後必看,出問題時必查的權威文檔。
MySQL數據庫基礎+ 數據庫的基本操作?
需要用的資料以鏈接的形式給需要的同學。
我用的mysql版本為: Mysql-5.5.45-win64.msi 密碼是:26zw
圖形化工具 Navicat(前期不推薦用,直接手動敲): Navicat 密碼:c7fs
開始我的MySQL之旅吧 始於2016.12.04
–WH
一、數據庫的安裝
這個就不在這裡過多闡述了,因為網上實在是太多安裝mysql的教程了,有了我給的mysql,在按照這個安裝教程(MySQL安裝教程)去看,就能夠安裝完好。
安裝好mysql後,如果需要使用windows命令窗口(也就是cmd)來操作mysql,那麼就需要配置環境變量,在安裝好的mysql下找到bin,將其目錄放到環境變量path中去,就行了,檢測成功與否的方法是在cmd命令窗口中輸入mysql,就會出現一大段英文,就說明成功了,反之失敗,如果不會的話就去百度搜教程。
二、數據庫的基本操作
1、開啟mysql服務命令
net start mysql
2、進入mysql的兩種方式
明文進入:mysql -uroot -proot格式:mysql -u帳號 -p密碼
密文進入:mysql -uroot -p 按enter會提示你輸入密碼(Enter pssword:),此時你寫的密碼就會顯示為***這樣。
3、查看mysql中所有的數據庫(一般在固定的單詞命令就會是用大寫,這個要習慣,看多了敲多了就認識了)
前面四個數據庫是mysql中自帶的,也就是必須的.
SHOW DATABASES;
4、創建名為test_1的數據庫
格式:CREATE DATABASE 數據庫名
CREATE DATABASE test_1;
5、刪除名為test_1的數據庫
格式:DROP DATABASE 數據庫名
DROP DATABASE test_1;
總結:學習了對數據庫的三個操作,1、查看所有數據庫 2、創建數據庫 3、刪除數據庫
三、數據表的基本操作
數據表和數據庫還有Mysql三者的關係
mysql中保存了很多數據庫、一個數據庫中可以保存很多表。
對數據表的增(創建表)刪(刪除表)改(修改表字段)查(查詢表結構)。 注意:這裡的操作對象是表,對錶的操作也就是表的結構,和表中的字段的操作(字段和記錄要分清楚)
前提:表是在數據庫下的,所以要先確實使用哪個數據庫。
USE test_1;
1、創建數據表
格式:CREATE TABLE 數據表名(
字段名1數據類型[列級別約束條件],
字段名2數據類型[列級別約束條件],
字段名3數據類型[列級別約束條件]
);
注意:格式不一定需要這樣隔着寫,完全可以全部寫成一行。但是那樣寫可觀性非常差。我這樣寫只是為了可以看的更清晰。
解釋:
1、[]中括號中的內容表示可以有可以沒有,
2、列級別這個「列」一定要搞清楚說的是什麼,一張表中有行有列,列表示豎,行表示橫
3、約束條件後面會講到
1.1、創建沒有約束的student表
CREATE TABLE student( idINT(11), nameVARCHAR(12), ageINT(11) );
注釋:SHOW TABLES 查詢數據庫底下的所有表。
1.2、創建有約束的student表
六大約束:主鍵約束、外鍵約束、非空約束、唯一約束、默認約束、自動增加
1.2.1:主鍵約束
PRIMARY KEY(primary key):獨一無二(唯一)和不能為空(非空),通俗的講,就是在表中增加記錄時,在該字段下的數據不能重複,不能為空,比如以上面創建的表為例子,在表中增加兩條記錄,如果id字段用了主鍵約束。則id不能一樣,並且不能為空。一般每張表中度有一個字段為主鍵,唯一標識這條記錄。以後需要找到該條記錄也可以同這個主鍵來確認記錄,因為主鍵是唯一的,並且非空,一張表中每個記錄的主鍵度不一樣,所以根據主鍵也就能找到對應的記錄。而不是多條重複的記錄。如果沒有主鍵,那麼表中就會存在很多重複的記錄,那麼即浪費存儲空間,在查詢時也消耗更多資源。
一般被主鍵約束了的字段度習慣性的稱該字段為該表的主鍵
單字段主鍵約束
兩種方式都可以
CREATE TABLE student(CREATE TABLE student(
idINT(11) PRIMARY KEY,idINT(11),
nameVARCHAR(12),nameVARCHAR(12),
ageINT(11) ageINT(11),
); PRIMARY KEY(id) );
多字段主鍵約束(複合主鍵)
這個id和name都市主鍵,說明在以後增加的插入的記錄中,id和name不能同時一樣,比如說可以是這樣。一條記錄為id=1,name=yyy、另一條記錄為:id=1,name=zzz。 這樣是可以的。並不是你們所理解的兩個字段分別度不可以相同。
CREATE TABLE student(CREATE TABLE student(
idINT(11) PRIMARY KEY,idINT(11),
nameVARCHAR(12) PRIMARY KEY, nameVARCHAR(12),
ageINT(11) ageINT(11),
);PRIMARY KEY(id,name) );
1.2.2:外鍵約束
什麼是外鍵舉個例子就清楚了,有兩張表,一張表是emp(員工)表,另一張表是dept(部門)表,一個員工屬於一個部門,那麼如何通過員工能讓我們自己他在哪個部門呢?那就只能在員工表中增加一個字段,能代表員工所在的部門,那該字段就只能是存儲dept中的主鍵了(因為主鍵是唯一的,才能確實是哪個部門,進而代表員工所在的部門,如果是部門名稱,有些部門的名稱可能是同名。就不能區分了。),像這樣的字段,就符合外鍵的特點,就可以使用外鍵約束,使該字段只能夠存儲另一張表的主鍵。如果不被外鍵約束,那麼該字段就無法保證存儲進來的值就一定是另一張表的主鍵值。
外鍵約束的特點:
1、外鍵約束可以描述任意一個字段(包括主鍵),可以為空,並且一個表中可以有多個外鍵。但是外鍵字段中的值必須是另一張表中的主鍵。
2、這樣被外鍵關聯的兩種表的關係可以稱為父子表或者主從表。子表(從表)擁有外鍵字段的表,父表(主表)被外鍵字段所指向的表。
3、子表被外鍵約束修飾的字段必須和父表的主鍵字段的類型一樣。
注意:一個表中有被外鍵修飾的字段,就稱該表有外鍵(是「有外鍵」。而不是「是外鍵」),並會給該表中的外鍵約束取一個名稱,所以我們常說的這個表有沒有外鍵,指的不是被外鍵約束修飾的字段名,而是指這個表是否有存在外鍵約束。也就是說,不能說這個表的外鍵是xxx(該表中被外鍵約束修飾的字段名),這種說法是錯誤的,但是大多數人已經習慣了這樣,雖然影響不大,但是在很多時候需要理解一個東西時,會造成一定的困擾。
格式:CONSTRAINT外鍵名稱FOREIGN KEY(被外鍵約束的字段名稱)REFERENCES 主表名(主鍵字段)
英文解釋:CONSTRAINT:約束REFERENCES:參考
CREATE TABLE tableA
(
id INT(11),
name VARCHAR(22),
location VARCHAR(50),
PRIMARY KEY(id)
);
CREATE TABLE tableB
(
id INT(11),
name VARCHAR(22) NOT NULL,
deptId INT(11),
PRIMARY KEY(id),
CONSTRAINT tableA_tableB_1 FOREIGH KEY(deptId) REFERENCES tableA(id)
);
解釋:tableB中有一個名為tableA_tableB_1的外鍵關聯了tableA和tableB兩個表,被外鍵約束修飾的字段為tableB中的deptId,主鍵字段為tableA中的id
1.2.3:非空約束
NOT NULL. 被該約束修飾了的字段,就不能為空,主鍵約束中就包括了這個約束
CREATE TABLE tableA
(
id INT(11),
name VARCHAR(22) NOT NULL,
location VARCHAR(50),
PRIMARY KEY(id)
);
1.2.4:唯一約束
UNIQUE 被唯一約束修飾了的字段,表示該字段中的值唯一,不能有相同的值,通俗點講,就好比插入兩條記錄,這兩條記錄中處於該字段的值不能是一樣的。
CREATE TABLE tableA
(
id INT(11),
name VARCHAR(22) UNIQUE,
location VARCHAR(50),
PRIMARY KEY(id)
);
也就是說在插入的記錄中,每條記錄的name值不能是一樣的。
1.2.5:默認約束
Default 指定這一列的默認值為多少,比如,男性同學比較多,性別就可以設置為默認男,如果插入一行記錄時,性別沒有填,那麼就默認加上男
CREATE TABLE table
(
id INT(11) PRIMARY KEY,
name VARCHAR(22) NOT NULL,
deptId INT(11) DEFAULT 1111,
salary FLOAT
);
1.2.6:自動增加
AUTO_INCREMENT 一個表只能一個字段使用AUTO_INCREMENT,並且使用這個約束的字段只能是整數類型(任意的整數類型 TINYINT,SMALLIN,INT,BIGINT),默認值是1,也就是說從1開始增加的。一般就是給主鍵使用的,自動增加,使每個主鍵的值度不一樣,並且不用我們自己管理,讓主鍵自己自動生成
CREATE TABLE table ( id INT(11) PRIMARY KEY AUTO_INCREMENT, name VARCHAR(22) NOT NULL );
2、查詢表結構
2.1、查看錶基本結構語句
格式1:DESCRIBE 表名/DESC 表名這兩個的功能是一樣的,簡寫了單詞describe
DESCRIBE student;
2.2、查看創建表的語句
格式:SHOW CREATE TABLE 表名
SHOW CREATE TABLE student;
這樣顯示的格式很不好,看不清楚,所以有了下面這個語句
格式:SHOW CREATE TABLE 表名\G
SHOW CREATE TABLE student\G;
3、修改數據表
修改數據表包括:對表中字段的增加、刪除、修改。 在這個裏面用的關鍵字為 ALTER
3.1、修改表名
格式:ALTER TABLE舊錶名 RENAME[TO]新表名;
將student表名改為student1(改完後在改回來)
ALTER TABLE student RENAME TO student1;
3.2、修改表中的字段名
格式:ALTER TABLE表名 CHANGE舊字段名新字段名新數據類型
將student表中的name字段名改為 username
ALTER TABLE student CHANGE name username VARCHAR(30);
3.3、修改表中的數據類型
格式:ALTER TABLE表名 MODIFY字段名數據類型
ALTER TABLE student MODIFY username VARCHAR(20);
解釋:只能修改字段名的數據類型,但是其原理跟上面change做的事情一樣,這裡也有修改字段名的過程,只不過修改後的字段名和修改前的字段名相同,但是數據類型不一樣。
3.4、修改字段的排列位置
方式1:ALTER TABLE表名 MODIFY字段1數據類型 FIRST|AFTER字段2
解釋:將字段1的位置放到第一,或者放到指定字段2的後面
ALTER TABLE student MODIFY username VARCHAR(20) AFTER age;
方式2:ALTER TABLE表名 CHANGE字段1字段2數據類型 FIRST|AFTER字段3
解釋:其實是一樣的,將是字段2覆蓋字段1,然後在進行排序
ALTER TABLE student CHANGE username username VARCHAR(20) AFTER age;
總結
CHANGE和MODIFY的區別?
原理都市一樣的,MODIFY只能修改數據類型,但是CHANGE能夠修改數據類型和字段名,也就是說MODIFY是CHANGE的更具體化的一個操作。可能覺得用CHANGE只改變一個數據類型不太爽,就增加了一個能直接改數據類型的使用關鍵字MODIFY來操作。
3.5、添加字段
格式:ALTER TABLE表名稱 ADD新字段名數據類型[約束條件][FIRST|AFTER已存在的表名]
解釋:在一個特定位置增加一個新的字段,如果不指定位置,默認是最後一個。
ALTER TABLE student ADD sex VARCHAR(11);
3.6、刪除字段
格式:ALTER TABLE表名稱 DROP字段名;
ALTER TABLE student DROP sex;
3.7、刪除表的外鍵約束
格式:ALTER TABLE表名稱 DROP FOREIGN KEY外鍵約束名
注意:外鍵約束名 指的不是被外鍵約束修飾的字段名,切記,而是我們在創建外鍵約束關係時取的名字。
3.8、更改表的存儲引擎
格式:ALTER TABLE表名 ENGINE=更改後的存儲引擎名
這個存儲引擎目前我自己也不太清楚,雖然知道有哪幾種引擎,但是稍微深入一點就不清楚了,所以打算留到日後在說。
4、刪除表
4.1、刪除無關聯表
格式:DROP TABLE表名;
ALTER TABLE student;
4.2、刪除被其他表關聯的主表
這個是比較重要的一點,在有外鍵關聯關係的兩張表中,如果刪除主表,那麼是刪不掉的,並且會報錯。因為有張表依賴於他。那怎麼辦呢?針對這種情況,總共有兩種方法
1、先刪除你子表,然後在刪除父表,這樣就達到了刪除父表的目的,但是子表也要被刪除
2、先解除外鍵關係,然後在刪除父表,這樣也能達到目的,並且保留了子表,只刪除我們不需要的父表。在3.7中就講解了如何刪除外鍵關係。
自學數據庫MySQL需要注意哪些方面
一、熟悉MySQL的運行環境
MySQL數據庫是在Linux環境下運行的,建議先熟練Linux系統。選定好架構模式之後就可以開始進入程序開發和數據處理的環節。
二、有紮實的數據庫理論知識
MySQL作為關係型數據庫,在實際的應用中也要學會分析存儲數據的關係型數據結構,關係操作集合等。只有對這些內容有一個明確的認識,在設計數據庫字段、表與表的關係才能考慮周全,避免出現錯誤。
三、熟練的SQL語言運用
任何一種數據庫的學習,包括MySQL,SQL語句都是位於核心部分的內容。需要注意的是SQL語言的使用要力求簡明扼要,能用一個select搞定的問題並不需要寫更多的union。所以在SQL語言的應用方面要注意高效。
MYSQL使用基礎、進階分享
MySQL是一個關係型數據庫管理系統,由瑞典MySQL AB公司開發,屬於Oracle旗下產品,是最流行的關係型數據庫管理系統之一。
端口是3306。
表很多時,使用linux腳本,需要根據需要修改一下:
和創建一樣,可以加上 if exists
可兩篇文章:
如:
用於在已有的表中添加、刪除或修改列。
添加 ADD
或
默認是添加到最後,但可以指定位置。 FIRST :添加最前
AFTER 字段名 :添加指定字段之後
例子:
刪除 DROP
修改 MODIFY 主要修改原列的類型或約束條件 同樣可以用 FIRST 和 AFTER 字段名 ,代表的是修改到哪裡。
修改字段名 CHANGE
可以把表2的數據複製到表1中,但 不能複製約束性條件 。
單行
多行,注意 只有一個VALUES :
不寫 (行1, 行2…) 這一部分的話,默認一一對應
除了以上方法外,還可以用SET為每一行附上相應的值。
假如沒有篩選的話,就給全部都修改了。可以用 WHERE 篩選。
假如 沒有篩選的話,就給全部刪除了 。相當於清空。
清空
先把表刪除,然後再建一個。與 DELETE FROM 相比, TRUNCATE 的效率更快,因為 DELETE FROM 是把記錄逐條刪除的。
查詢執行的順序
FROM — WHERE — SELECT — GROUP BY — HAVING — ORDER BY — LIMIT
注意
當數據很大,上百萬的時候,使用LIMIT … OFFSET ..的方式進行分頁十分浪費資源且耗時長。最好是結合WHERE使用,如:
REGEXP 使用正則表達進行匹配。 查詢時,需要搭配WHERE或HAVING使用 。
兩個表之間有交集且要用到兩個表的數據時,可以使用內連接查詢。
LEFT JOIN 關鍵字從左表(table1)返回所有的行,即使右表(table2)中沒有匹配。如果右表中沒有匹配,則結果為 NULL。
用法:
RIGHT JOIN 關鍵字從右表(table2)返回所有的行,即使左表(table1)中沒有匹配。如果左表中沒有匹配,則結果為 NULL。 把LEFT JOIN的表1、表2調換順序,就是REGHT JOIN 。
FULL OUTER JOIN 關鍵字只要左表(table1)和右表(table2)其中一個表中存在匹配,則返回行. 相當於結合了 LEFT JOIN 和 RIGHT JOIN 的結果。
但 MySQL中不支持 FULL OUTER JOIN 。
即SELECT嵌套。
IN 一個查詢結果作為另一個查詢的條件。 如:
EXISTS 用於判斷查詢子句是否有記錄,如果有一條或多條記錄存在返回 True,否則返回 False。True時執行。 如:
索引的本質是一種排好序的數據結構。利用索引可以提高查詢速度。
常見的索引有:
MySQL通過外鍵約束來保證表與表之間的數據的完整性和準確性。 外鍵的使用條件:
外鍵的好處:可以使得兩張表關聯,保證數據的一致性和實現一些級聯操作。
對已有的兩個表增加外鍵 比如:主表為A,子表為B,外鍵為aid,外鍵約束名字為a_fk_b
為子表添加一個字段,當做外鍵
為子表添加外鍵約束條件
假如刪除記錄報錯: [Err] 1451 -Cannot deleteorupdatea parent row: aforeignkeyconstraintfails (…)
這是因為MySQL中設置了foreign key關聯,造成無法更新或刪除數據。可以通過設置 FOREIGN_KEY_CHECKS 變量來避免這種情況。 第一步:禁用外鍵約束,我們可以使用: SETFOREIGN_KEY_CHECKS=0; 第二步:刪除數據 第三步:啟動外鍵約束,我們可以使用: SETFOREIGN_KEY_CHECKS=1; 查看當前FOREIGN_KEY_CHECKS的值,可用如下命令: SELECT @@FOREIGN_KEY_CHECKS;
使用 UNION 來組合兩個查詢,如果第一個查詢返回 M 行,第二個查詢返回 N 行,那麼組合查詢的結果一般為 M+N 行。
每個查詢必須包含相同的列、表達式和聚集函數。
默認會去除相同行,如果需要 保留 相同行,使用 UNION ALL 。
只能包含一個 ORDER BY 子句,並且必須位於語句的最後 。
內置函數很多, 見: MySQL 函數
我們一般使用 START TRANSACTION 或 BEGIN 開啟事務, COMMIT 提交事務中的命令, SAVEPOINT : 相當於設置一個還原點, ROLLBACK TO : 回滾到某個還原點下
一般的使用格式如下:
開啟事務時, 默認加鎖
根據類型可分為共享鎖(SHARED LOCK)和排他鎖(EXCLUSIVE LOCK)或者叫讀鎖(READ LOCK)和寫鎖(WRITE LOCK)。
根據粒度劃分又分表鎖和行鎖。表鎖由數據庫服務器實現,行鎖由存儲引擎實現。
除此之外,我們可以顯示加鎖
加鎖時, 如果沒有索引,會鎖表,如果加了索引,就會鎖行
InnoDB默認支持行鎖,獲取鎖是分步的,並不是一次性獲取所有的鎖,因此在鎖競爭的時候就會出現死鎖的情況
解決方法:
即ACID特性:
由於並發事務會引發上面這些問題, 我們可以設置事務的隔離級別解決上面的問題.
MySQL的默認隔離級別(可重複讀)
查看當前會話隔離級別
方式1
方式2
設置隔離級別
主從集群的示意圖如下:
主要涉及三個線程: binlog 線程、 I/O 線程和 SQL 線程。
同步流程:
由於MySQL主從集群只會從主節點同步到從節點, 不會反過來同步, 所以需要讀寫分離
讀寫分離需要在業務層面實現 , 寫數據只能在主節點上完成, 而讀數據可以在主節點或從節點上完成
索引是幫助MySQL高效獲取數據的排好序的數據結構
MySQL的索引有
推薦兩個在線工具:
簡單來說, B樹是在紅黑樹(一個平衡二叉樹)的基礎上將一個節點存放多個值, 實現的, 降低了樹的高度, 每個節點都存放索引及對應數據指針, 同一層的節點是遞增的
而B+樹在B樹的基礎上進行優化, 非葉子節點存放 子節點的開始的索引, 葉子節點存放索引和數據的指針, 且葉子節點之間有雙向的指針
如下示意圖:
不同的引擎, 主鍵索引存放的數據也不一樣, 比如常見的 MyISAM 和 InnoDB
MyISAM 的B+樹葉子節點存放表數據的指針, InnoDB 的B+樹葉子節點存放處主鍵外的數據
其他的:
即多個列組成一個索引, 語法:
由於聯合索引的B+樹的結構, 根據列建立, 所以我們的查找條件也要根據索引列的順序( where column1=x, column2=y,columnN… ), 否則會全表掃描
如果你對列進行了 (+,-,*,/,!) , 那麼都將不會走索引。
OR 引起的索引失效
OR 導致索引是在特定情況下的,並不是所有的 OR 都是使索引失效,如果OR連接的是 同 一個字段,那麼索引 不會失效 , 反之索引失效 。
這個我相信大家都明白,模糊搜索如果你前綴也進行模糊搜索,那麼不會走索引。
這兩種用法,也將使索引失效。另 IN 會走索引,但是當IN的取值範圍較大時會導致索引失效,走全表掃描, 見: MySQL中使用IN會不會走索引
不走索引。
走索引。
所以設計表的時候, 建議不可為空, 而是將默認值設置為 “” ( NOT NULL DEFAULT “” )
mysql 7.8本章習題work表怎麼建立
1.數據庫概述
簡而言之,數據庫(DataBase)就是一個存儲數據的倉庫。為了方便數據的存儲和管理,將數據按照特定的規律存儲在磁盤上。通過數據庫管理系統,可以有效的組織和管理存儲在數據庫中的數據。如今,已經存在的Oracle、SQLServer、MySQL等諸多優秀的數據庫。
詳解內容:
數據存儲方式
數據庫在開發中的作用
數據庫訪問技術
MySQL數據庫的介紹
數據庫泛型
SQL語言
常見數據庫系統
如果學習數據庫
1.1 數據庫理論基礎
數據庫能夠將數據按照特定的規律組織起來。那麼,數據是如何存儲的、數據庫要遵守什麼規則、數據庫在什麼地方使用,這些都是首先要了解的問題。
1.1.1 數據存儲方式
如今數據庫已經無處不在了。
一個網站需要有數據庫來存儲數據。
一個學校需要用數據庫來存儲學生和教師的信息。
一個公司需要用數據庫來存儲員工的信息和公司的資料。
要學習數據庫,必須先了解數據庫是如何存儲數據的。
數據發展分為三個階段:
1. 人工管理階段
2. 文件系統階段
3. 數據庫系統階段
1.1.2 數據庫泛型
數據庫泛型就是數據庫應該遵循的規則。數據庫泛型也稱為範式。目前關係數據庫最常用的四種範式分別是:
第一範式(1NF)
第二範式(2NF)
第三範式(3NF)
BCN範式(BCNF)
在設計數據庫時,數據庫需要滿足的最低要求的範式是第一範式。第一範式的要求表中不能有重複字段,並且每個字段不能再拆分。如果有一個數據庫連第一範式都不滿足的話,那就不能稱之為關係型數據庫了。只有滿足了第一範式的要求,才可能在這個關係數據庫中創建表。
在滿足第一範式的基礎上,可以將數據庫中進行一步的細化。細化後可以使數據庫滿足第二範式的要求。依次進行細化,可以得到第三範式、BCN範式。
1.1.3 數據庫在開發中作用
現在大部分的管理系統和軟件都需要使用數據庫來存儲數據。在開發過程中,數據庫已經成為必不可少的一部分。本小節將為讀者簡單介紹一下數據庫在開發中的作用。
在軟件開發過程中,經常需要使用數據庫來存儲數據。比如,一個學校的學生管理系統就需要數據庫來存儲學生的學籍信息、考試信息、教師的信息、課程信息等。再比如,銀行的管理系統也需要數據庫來存儲信息。用戶的銀行帳戶、存款量、存款和取款的記錄等信息都是存儲在數據庫中的。當用戶向自己的帳戶里存款時,管理系統會在數據庫中更新該用戶的存款量。
1.2 數據庫系統
1.2.1 數據庫系統
很多讀者認為數據庫就是數據庫系統(DataBase System, 簡稱為DBS)。其實,數據庫系統的範圍比數據庫大很多。數據庫系統不是一個單純的數據庫,而是由數據庫、數據庫管理系統、應用開發工具構成。很多時候,數據庫管理員和用戶可以當成數據庫系統的一份子。
數據庫就是存儲數據的地方。
數據庫管理系統(DataBase Management System, 簡稱為DBMS)是用來定義數據、管理和維護數據的軟件。它是數據庫系統的一個重要組成部分。應用系統是需要使用數據庫的軟件。比如學員管理系統就是一個應用系統,這個應用系統需要數據庫管理它的數據。應用開發工具就是用來開發應用系統的。
1.2.2 SQL語言
SQL(Structured Query Language)語言的全稱是結構化查詢語言。數據庫管理系統通過SQL語言來管理數據庫中的數據。
SQL語言分為三個部分:
數據定義語言(Data Definition Language, 簡稱為DDL)
數據操作語言(Data Manipulation Language, 簡稱為DML)
數據控制語言(Data Control Language, 簡稱為DCL)
數據查詢語言(Data Query Language, 簡稱DQL)
1.2.3 數據庫訪問技術
應用程序中,程序語言需要使用數據庫訪問技術來訪問數據庫。只有使用了數據庫訪問技術,程序中嵌入的SQL語句才會起作用。不同程序語言訪問數據庫的方式是不一樣的。
JDBC是一種用於執行SQL語句的Java API。通過JDBC可以訪問多種關係數據庫。JDBC由一組用Java語言編寫的類和接口組成。使用JDBC時,必須要安裝驅動程序Connector/J。
PHP中為程序員提供了MySQL功能模塊,PHP5以後開始提供mysqli接口。PHP可以通過MySQL功能模塊和mysqli接口來訪問MySQL數據庫。
1.3 常見數據庫
1.3.1 常見數據庫系統
如今已經在很多優秀的商業數據庫
如甲骨文(Oracle)公司的Oracle數據庫
IBM公司的DB2數據庫
微軟公司的SQL Server數據庫和Access數據庫。
還有很多優秀的開源數據庫,如MySQL數據庫、PostgreSQL數據庫等。
1. 甲骨文的Oracle
2. IBM的DB2
3. 微軟的Access和SQL Server
4. 開源PostgreSQL
6. 開源MySQL
1.3.2 為什麼要使用MySQL
如今很多大型網站已經選擇MySQL數據庫來存儲數據。那麼,MySQL到底有什麼優勢呢?MySQL數據庫的使用非常廣泛,尤其是在Web應用方面。由於MySQL數據庫發展勢頭迅猛,SUN公司於2008年收購了MySQL數據庫。這筆交易的收購價格高達10億美元。這中以說明MySQL數據庫價值。
MySQL數據庫的優勢:
1. 開源代碼
2. 跨平台性
3. 價格優勢
4. 功能強大且使用方便
1.3.3 MySQL版本和獲取
MySQL數據庫可以在Windows、UNIX、Linux和Mac OS等操作系統上運行。因此,MySQL有不同操作系統的版本。而且,根據發佈的先後順序,現在已經在開發MySQL的6.0版了。
根據MySQL的開發情況,可以將MySQL分為Alpha、Beta、Gamma和Generally Available(GA)等版本。
– Alpha(開發過程中)
– Beta(測試版)
– Gamma(比Beta版更高級)
– Generally Available(GA)(穩定版)
1.4 如果學習數據庫
數據庫已經成為軟件系統的一部分,那麼學好數據庫將是軟件開發的一個必要條件。如何才能學好數據庫,這個問題沒有確切的答案。
學好數據庫的方法:
1. 多上機實踐
2. 多編寫SQL語句
3. 通過Java或PHP程序語言操作數據庫
4. 數據庫理論知識不能丟
1.5 常見問題及解答
1. 如何選擇數據庫?
2. 如何選擇MySQL版本?
1.6 本章習題
1. 數據存儲的發展過程經歷了哪幾個階段?
2. 常用數據庫系統有哪些?
3. MySQL數據庫如何分類?
2.Windows平台下安裝與配置MySQL
在Windows系列的操作系統下,MySQL數據庫的安裝包分為圖形化界面安裝和免安裝(noinstall)這兩種安裝包。這兩種安裝包的安裝方式不同,而且配置方式也不同。圖形化界面安裝包有完整的安裝嚮導,安裝和配置很方便。免安裝的安裝包直接解壓即可使用,但是配置起來很不方便。
安裝MySQL數據庫
配置MySQL數據庫
常用圖形管理工具介紹
配置和使用免安裝的MySQL數據庫
2.1 安裝與配置MySQL
2.1.1 安裝MySQL
MySQL圖形化安裝包有一個完整的安裝嚮導,根據安裝嚮導可以很方便的安裝MySQL數據庫。在Windows操作系統下,有兩種MySQL圖形化安裝包。這兩種安裝包分別是”Windows Essentials”和”Windows MSI Installer”。前者包含了MySQL中最主要和最常用的功能,但是不包含一些不常用的功能。後者包含了MySQL全部功能,包括不常用的功能。
選擇Microsoft Windows選項
mysql-5.1.40-win32.msi(圖形界面安裝)
mysql-essential-5.1.40-win32.msi (圖形界面安裝)
mysql-noinstall-5.1.40-wind32.zip (免安裝)
安裝步驟:
1. Next
2. Typical Complete Custom(O)
3. MySQL Server
Client Programs
C Includes Files / Lib Files(X)
Change: ?????
4. Install
Setup Type: Custom
Destination Folder(程序安裝路徑):
Data Folder(數據存儲的路徑):
5. Next-Next-
(O)Configure the MySQL Serer now
(O)Register the MySQL Server now
6. Finish
2.1.2 配置MySQL
安裝完成時,選上了Configure the MySQL Server now選項,圖形化安裝嚮導將進入MySQL配置歡迎界面。通過配置嚮導,可以設置MySQL數據庫的各種參數。
1. Next
2. (O)Detailed Configuration
(X)Standard Configuration
3. (O)Developer Machine(開發者)
Server Machine(服務器)
Dedicated MySQL Server Machine(專用的數據庫服務器)
4. (O)Multifunctional Database(多功能型數據庫)
Transactional Database Only(事務型的數據庫, InnoDB)
Non-Transactional Database Only(只支持MyISaM類型數據庫,非事務)
5. InnoDB Tablespace Settings (配置表空間)
6. 設置服務器的連接數
Decision Support(DSS) / OLAP
Online Transaction Processing(OLTP)
(O)Manual Setting
Concurrent Connections: 10
7. MySQL服務的端口號:
(O)Add firewall exception for this port(允許防火牆)
(X)Enable Strict Mode(是區分大寫)
8. 設置字符集
Standard Character Set
Best Support for Multilingualism
(O)Manual Selected Default Character Set / Collation
utf-8
9. Install As Windws Service 服務選項
Service Name: MySQL
(O)Lanch the MySQL Server automatically(服務是否自動啟動)
(O)Include Bin Directory in Windows PATH(添加到path路徑當中)
10. Modify Security Setting:
New root password:
confirm:
(X)Enable root access from remote machines(不否遠程訪問root)
11. Execute
12. Finish
2.2 啟動服務並登錄MySQL數據庫
MySQL數據庫分為服務器端(Server)和客戶端(Client)兩部分。只有服務器端的服務開戶以後,才可以通過客戶端來登錄到MySQL數據庫。
2.2.1 啟動MySQL服務
開始-設置-控制面板-管理工具-服務
2.2.2 登錄MySQL服務器
1. 開始-運行-cmd
mysql -h localhost -u root -p
mysql
2. 開始-運行-mysql -h 127.0.0.1 -u root -p
2.2.3 配置path變量
如果MySQL的應用程序的目錄沒有添加到Windows系統的path環境變量中,可以手工的將MySQL的目錄添加到path中。
將MySQL的應用程序的目錄添加到Windows系統的path環境變量中,可以使以後的操作更加方便。例如,可以直接從運行對話框輸入MySQL數據庫命令。而且,以後在編程時也會更加方便。配置path路徑很簡單,只要將MySQL的應用程序的目錄添加到系統的path環境變量中就可以了。
1. 右擊【我的電腦】-【屬性】
2. 在系統環境變量中選中path變量,然後單擊編輯按鈕進入編輯環境變量的對話框。
3. 把MySQL應用程序的目錄添加到path環境變量名值的後面。已經存在的目錄用分號隔開。
2.3 更改MySQL的配置
MySQL數據庫安裝好了以後,可能根據實際情況更改MySQL的某些配置。一般可以通過兩種方式來更改。一種是通過配置嚮導來更改配置,另一種是手工來更改配置。
原創文章,作者:YOIC,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/149846.html