這類文章,記錄我看《MySQL5.6從零開始學》這本書的過程,將本身以爲重要的東西記錄一下,並有可能幫助到大家,在寫的博文前幾篇度會很是基礎,只要動手敲,跟着我寫的例子所有實現一遍,基本上就搞定了,前期很難理解的東西基本沒有,因此寫博文的內容,就是以練題的形式來呈現的。html
須要用的資料以連接的形式給須要的同窗。mysql
我用的mysql版本爲: Mysql-5.5.45-win64.msi 密碼是:26zwsql
圖形化工具 Navicat(前期不推薦用,直接手動敲): Navicat 密碼:c7fs數據庫
開始個人MySQL之旅吧 始於2016.12.04windows
--WH工具
1、數據庫的安裝post
這個就不在這裏過多闡述了,由於網上實在是太多安裝mysql的教程了,有了我給的mysql,在按照這個安裝教程(MySQL安裝教程)去看,就可以安裝無缺。學習
安裝好mysql後,若是須要使用windows命令窗口(也就是cmd)來操做mysql,那麼就須要配置環境變量,在安裝好的mysql下找到bin,將其目錄放到環境變量path中去,就好了,檢測成功與否的方法是在cmd命令窗口中輸入mysql,就會出現一大段英文,就說明成功了,反之失敗,若是不會的話就去百度搜教程。 url
2、數據庫的基本操做spa
一、開啓mysql服務命令
net start mysql
二、進入mysql的兩種方式
明文進入:mysql -uroot -proot 格式:mysql -u賬號 -p密碼
密文進入:mysql -uroot -p 按enter會提示你輸入密碼(Enter pssword:),此時你寫的密碼就會顯示爲***這樣。
三、查看mysql中全部的數據庫(通常在固定的單詞命令就會是用大寫,這個要習慣,看多了敲多了就認識了)
前面四個數據庫是mysql中自帶的,也就是必須的.
SHOW DATABASES;
四、建立名爲test_1的數據庫
格式:CREATE DATABASE 數據庫名
CREATE DATABASE test_1;
五、刪除名爲test_1的數據庫
格式:DROP DATABASE 數據庫名
DROP DATABASE test_1;
總結:學習了對數據庫的三個操做,一、查看全部數據庫 二、建立數據庫 三、刪除數據庫
3、數據表的基本操做
數據表和數據庫還有Mysql三者的關係
mysql中保存了不少數據庫、一個數據庫中能夠保存不少表。
對數據表的增(建立表)刪(刪除表)改(修改表字段)查(查詢表結構)。 注意:這裏的操做對象是表,對錶的操做也就是表的結構,和表中的字段的操做(字段和記錄要分清楚)
前提:表是在數據庫下的,因此要先確實使用哪一個數據庫。
USE test_1;
一、建立數據表
格式:CREATE TABLE 數據表名(
字段名1 數據類型[列級別約束條件],
字段名2 數據類型[列級別約束條件],
字段名3 數據類型[列級別約束條件]
); 注意:格式不必定須要這樣隔着寫,徹底能夠所有寫成一行。可是那樣寫可觀性很是差。我這樣寫只是爲了能夠看的更清晰。
解釋:一、[]中括號中的內容表示能夠有能夠沒有,二、列級別這個「列」必定要搞清楚說的是什麼,一張表中有行有列,列表示豎,行表示橫 三、約束條件後面會講到
1.一、建立沒有約束的student表
CREATE TABLE student(
id INT(11),
name VARCHAR(12),
age INT(11)
);
註釋:SHOW TABLES 查詢數據庫底下的全部表。
1.二、建立有約束的student表
六大約束:主鍵約束、外鍵約束、非空約束、惟一約束、默認約束、自動增長
1.2.1:主鍵約束
PRIMARY KEY(primary key):獨一無二(惟一)和不能爲空(非空),通俗的講,就是在表中增長記錄時,在該字段下的數據不能重複,不能爲空,好比以上面建立的表爲例子,在表中增長兩條記錄,若是id字段用了主鍵約束。則id不能同樣,而且不能爲空。通常每張表中度有一個字段爲主鍵,惟一標識這條記錄。之後須要找到該條記錄也能夠同這個主鍵來確認記錄,由於主鍵是惟一的,而且非空,一張表中每一個記錄的主鍵度不同,因此根據主鍵也就能找到對應的記錄。而不是多條重複的記錄。若是沒有主鍵,那麼表中就會存在不少重複的記錄,那麼即浪費存儲空間,在查詢時也消耗更多資源。
通常被主鍵約束了的字段度習慣性的稱該字段爲該表的主鍵
單字段主鍵約束
兩種方式均可以
CREATE TABLE student( CREATE TABLE student(
id INT(11) PRIMARY KEY, id INT(11),
name VARCHAR(12), name VARCHAR(12),
age INT(11) age INT(11),
); PRIMARY KEY(id) );
多字段主鍵約束(複合主鍵)
這個id和name都市主鍵,說明在之後增長的插入的記錄中,id和name不能同時同樣,好比說能夠是這樣。一條記錄爲id=1,name=yyy、另外一條記錄爲:id=1,name=zzz。 這樣是能夠的。並非大家所理解的兩個字段分別度不能夠相同。
CREATE TABLE student( CREATE TABLE student(
id INT(11) PRIMARY KEY, id INT(11),
name VARCHAR(12) PRIMARY KEY, name VARCHAR(12),
age INT(11) age INT(11),
); PRIMARY KEY(id,name) );
1.2.2:外鍵約束
什麼是外鍵舉個例子就清楚了,有兩張表,一張表是emp(員工)表,另外一張表是dept(部門)表,一個員工屬於一個部門,那麼如何經過員工能讓咱們本身他在哪一個部門呢?那就只能在員工表中增長一個字段,能表明員工所在的部門,那該字段就只能是存儲dept中的主鍵了(由於主鍵是惟一的,才能確實是哪一個部門,進而表明員工所在的部門,若是是部門名稱,有些部門的名稱多是同名。就不能區分了。),像這樣的字段,就符合外鍵的特色,就可使用外鍵約束,使該字段只可以存儲另外一張表的主鍵。若是不被外鍵約束,那麼該字段就沒法保證存儲進來的值就必定是另外一張表的主鍵值。
外鍵約束的特色:
一、外鍵約束能夠描述任意一個字段(包括主鍵),能夠爲空,而且一個表中能夠有多個外鍵。可是外鍵字段中的值必須是另外一張表中的主鍵。
二、這樣被外鍵關聯的兩種表的關係能夠稱爲父子表或者主從表。子表(從表)擁有外鍵字段的表,父表(主表)被外鍵字段所指向的表。
三、子表被外鍵約束脩飾的字段必須和父表的主鍵字段的類型同樣。
注意:一個表中有被外鍵修飾的字段,就稱該表有外鍵(是「有外鍵」。而不是「是外鍵」),並會給該表中的外鍵約束取一個名稱,因此咱們常說的這個表有沒有外鍵,指的不是被外鍵約束脩飾的字段名,而是指這個表是否有存在外鍵約束。也就是說,不能說這個表的外鍵是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.一、查看錶基本結構語句
格式1:DESCRIBE 表名/DESC 表名 這兩個的功能是同樣的,簡寫了單詞describe
DESCRIBE student;
2.二、查看建立表的語句
格式:SHOW CREATE TABLE 表名
SHOW CREATE TABLE student;
這樣顯示的格式很很差,看不清楚,因此有了下面這個語句
格式:SHOW CREATE TABLE 表名\G
SHOW CREATE TABLE student\G;
三、修改數據表
修改數據表包括:對錶中字段的增長、刪除、修改。 在這個裏面用的關鍵字爲 ALTER
3.一、修改表名
格式:ALTER TABLE<舊錶名> RENAME[TO]<新表名>;
將student表名改成student1(改完後在改回來)
ALTER TABLE student RENAME TO student1;
3.二、修改表中的字段名
格式:ALTER TABLE<表名> CHANGE<舊字段名><新字段名><新數據類型>
將student表中的name字段名改成 username
ALTER TABLE student CHANGE name username VARCHAR(30);
解釋:這個不只能改變字段名,還能將字段的數據類型一併修改,也就是說,你能夠單純的只修改字段名,也能夠單純的只修改數據類型,也能夠同時一塊兒修改
3.三、修改表中的數據類型
格式:ALTER TABLE<表名> MODIFY<字段名><數據類型>
ALTER TABLE student MODIFY username VARCHAR(20);
解釋:只能修改字段名的數據類型,可是其原理跟上面change作的事情同樣,這裏也有修改字段名的過程,只不過修改後的字段名和修改前的字段名相同,可是數據類型不同。
3.四、修改字段的排列位置
方式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.五、添加字段
格式:ALTER TABLE<表名稱> ADD<新字段名><數據類型>[約束條件][FIRST|AFTER<已存在的表名>]
解釋:在一個特定位置增長一個新的字段,若是不指定位置,默認是最後一個。
ALTER TABLE student ADD sex VARCHAR(11);
3.六、刪除字段
格式:ALTER TABLE<表名稱> DROP<字段名>;
ALTER TABLE student DROP sex;
3.七、刪除表的外鍵約束
格式:ALTER TABLE<表名稱> DROP FOREIGN KEY<外鍵約束名>
注意:外鍵約束名 指的不是被外鍵約束脩飾的字段名,切記,而是咱們在建立外鍵約束關係時取的名字。
3.八、更改表的存儲引擎
格式:ALTER TABLE<表名> ENGINE=<更改後的存儲引擎名>
這個存儲引擎目前我本身也不太清楚,雖然知道有哪幾種引擎,可是稍微深刻一點就不清楚了,因此打算留到往後在說。
四、刪除表
4.一、刪除無關聯表
格式:DROP TABLE<表名>;
ALTER TABLE student;
4.二、刪除被其餘表關聯的主表
這個是比較重要的一點,在有外鍵關聯關係的兩張表中,若是刪除主表,那麼是刪不掉的,而且會報錯。由於有張表依賴於他。那怎麼辦呢?針對這種狀況,總共有兩種方法
一、先刪除你子表,而後在刪除父表,這樣就達到了刪除父表的目的,可是子表也要被刪除
二、先解除外鍵關係,而後在刪除父表,這樣也能達到目的,而且保留了子表,只刪除咱們不須要的父表。在3.7中就講解了如何刪除外鍵關係。
4、總結
講了這麼多,但實際中,用到的並非不少,特別是對錶結構的修改的操做,在實際開發中,通常數據庫表被定義下來了,就不會在修改了,發現數據庫表設計的很差,也是將表所有刪除,而後在從新建立過新表。可是在咱們學習的過程當中,這些操做仍是很重要的,由於須要這些基礎來學習後面更深刻的東西,不可能由於實際中不用,就不學這不學那,要相信,無論作什麼,那確定是有意義的事情,可能那意義並不大,可是往後確定會對咱們有所幫助。