mysql數據庫理論基礎之三,mysql數據庫基礎知識

本文目錄一覽:

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
YOIC的頭像YOIC
上一篇 2024-11-05 16:53
下一篇 2024-11-05 16:54

相關推薦

  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝數據庫方案

    本文將介紹在openeuler操作系統中安裝數據庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟件源 sudo…

    編程 2025-04-29
  • 數據庫第三範式會有刪除插入異常

    如果沒有正確設計數據庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係數據庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的數據庫存儲引擎

    本文將介紹兩款高性能的數據庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • Python怎麼導入數據庫

    Python是一種高級編程語言。它具有簡單、易讀的語法和廣泛的庫,讓它成為一個靈活和強大的工具。Python的數據庫連接類型可以多種多樣,其中包括MySQL、Oracle、Post…

    編程 2025-04-28
  • Python元祖排序:從基礎知識到高級應用

    Python元祖是一種不可變序列,通常用於將一組數據綁定在一起。元祖之間經常需要排序,本文將從基礎知識到高級應用,為你詳細講解Python元祖排序。 一、排序方法 Python提供…

    編程 2025-04-28
  • Think-ORM數據模型及數據庫核心操作

    本文主要介紹Think-ORM數據模型建立和數據庫核心操作。 一、模型定義 Think-ORM是一個開源的ORM框架,用於簡化在PHP應用中(特別是ThinkPHP)與關係數據庫之…

    編程 2025-04-27
  • 如何使用Python將CSV文件導入到數據庫

    CSV(Comma Separated Values)是一種可讀性高、易於編輯與導入導出的文件格式,常用於存儲表格數據。在數據處理過程中,我們有時需要將CSV文件導入到數據庫中進行…

    編程 2025-04-27
  • Python批量導入數據庫

    本文將介紹Python中如何批量導入數據庫。首先,對於數據分析和挖掘領域,數據庫中批量導入數據是一個必不可少的過程。這種高效的導入方式可以極大地提高數據挖掘、機器學習等任務的效率。…

    編程 2025-04-27
  • Activiti 6自動部署後不生成數據庫act_hi_*的解決方法

    本文將從多個方面詳細闡述Activiti 6自動部署後不生成數據庫act_hi_*的問題,並提供對應的代碼示例。 一、問題分析 在使用Activiti 6部署流程後,我們發現act…

    編程 2025-04-27

發表回復

登錄後才能評論