tip: windows 系統(tǒng)下的MySQL學(xué)習(xí)
參考資料: 菜鳥教程
1.安裝
按照網(wǎng)上的許多教程安裝好了MySQL(百度有許多,不重復(fù)了~)
2. 基本概念
- 數(shù)據(jù)庫是按照數(shù)據(jù)結(jié)構(gòu)來組織离福、存儲和管理數(shù)據(jù)的倉庫;
- 關(guān)系型數(shù)據(jù)庫: 建立在關(guān)系模型基礎(chǔ)上的數(shù)據(jù)庫,借助于集合代數(shù)等數(shù)學(xué)概念和方法來處理數(shù)據(jù)庫中的數(shù)據(jù)。(這句話有點抽象复哆,看看經(jīng)過后面的學(xué)習(xí)能不能有自己的理解~);
- RDBMS 即關(guān)系數(shù)據(jù)庫管理系統(tǒng)(Relational Database Management System)的特點:
- 數(shù)據(jù)以表格的形式出現(xiàn)腌零;
- 每行為各種記錄名稱
- 每列為記錄名稱所對應(yīng)的數(shù)據(jù)域
- 許多行和列組成一張表單
- 若干的表單組成database
(這樣子理解:有一個數(shù)據(jù)庫叫school梯找,存放學(xué)校的各種數(shù)據(jù)。school數(shù)據(jù)庫中有很多張表益涧,比如有一張表叫teacher來存放教師數(shù)據(jù)锈锤,有一張表叫student存放學(xué)生數(shù)據(jù)等。在student數(shù)據(jù)表中有很多行,每行是一個學(xué)生牙咏,每列是學(xué)生的各種屬性例如姓名臼隔、年齡、班級妄壶、分?jǐn)?shù)等)
3. RDBMS 術(shù)語
- 數(shù)據(jù)庫: 數(shù)據(jù)庫是一些關(guān)聯(lián)表的集合摔握。.
- 數(shù)據(jù)表: 表是數(shù)據(jù)的矩陣蠕趁。在一個數(shù)據(jù)庫中的表看起來像一個簡單的電子表格拦坠。
- 列: 一列(數(shù)據(jù)元素) 包含了相同的數(shù)據(jù), 例如郵政編碼的數(shù)據(jù)杠茬。
- 行:一行(=元組滋戳,或記錄)是一組相關(guān)的數(shù)據(jù)笑诅,例如一條用戶訂閱的數(shù)據(jù)裹驰。
- 冗余:存儲兩倍數(shù)據(jù)雀扶,冗余降低了性能蚁孔,但提高了數(shù)據(jù)的安全性屑埋。
- 主鍵:主鍵是唯一的豪筝。一個數(shù)據(jù)表中只能包含一個主鍵。你可以使用主鍵來查詢數(shù)據(jù)摘能。
- 外鍵:外鍵用于關(guān)聯(lián)兩個表续崖。
- 復(fù)合鍵:復(fù)合鍵(組合鍵)將多個列作為一個索引鍵,一般用于復(fù)合索引团搞。
- 索引:使用索引可快速訪問數(shù)據(jù)庫表中的特定信息严望。索引是對數(shù)據(jù)庫表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu)。類似于書籍的目錄逻恐。
- 參照完整性: 參照的完整性要求關(guān)系中不允許引用不存在的實體像吻。與實體完整性是關(guān)系模型必須滿足的完整性約束條件,目的是保證數(shù)據(jù)的一致性复隆。
4. 數(shù)據(jù)類型
數(shù)值類型
5. 以下是命令行SQL語句的學(xué)習(xí)
命令行切換到 MySQL 安裝目錄下拨匆,命令行輸入 mysql
,進(jìn)入MySQL命令輸入模式昏名。
-
查看有哪些數(shù)據(jù)庫(
show databases;
)
出現(xiàn)一個箭頭涮雷? 其實是忘記輸入分號就按了回車,如果忘記輸入分號轻局,代表這句命令還沒有結(jié)束洪鸭,可以繼續(xù)輸入,這時可以在箭頭后面繼續(xù)輸入分號仑扑。
-
創(chuàng)建數(shù)據(jù)庫:
create database 庫名;
插入后看看數(shù)據(jù)庫:
是不區(qū)分大小寫嗎览爵? -
刪除數(shù)據(jù)庫
drop database 庫名;
-
切換數(shù)據(jù)庫
use 庫名;
-
在數(shù)據(jù)庫中創(chuàng)建一張表:
create table 表名(列名 列類型(n),列名 列類型(n)....);
一個簡單的例子:
- 列名即屬性,比如id镇饮,名字蜓竹,年齡等;
- 列類型即數(shù)據(jù)類型比如
varchar(變長字符型),char(字符型),int(整型)
等; - 列類型括號中的數(shù)字 n 代表為它分配多少存儲空間俱济,就好像C語言定義數(shù)組那樣定義了數(shù)組的長度就會為它分配一定的空間嘶是,不足就不滿,超過就會溢出蛛碌。有一篇參考文章:https://www.cnblogs.com/loren-Yang/p/7512258.html
- 當(dāng)不希望插入的列數(shù)據(jù)為
NULL
時聂喇,可以在創(chuàng)建表示定義列類型加上NOT NULL
;這樣如果插入NULL
的數(shù)據(jù)時就會報錯蔚携; -
AUTO_INCREMENT
定義列為自增的屬性希太,一般用于主鍵,數(shù)值會自動加1酝蜒; -
PRIMARY KEY
關(guān)鍵字用于定義列為主鍵誊辉; -
ENGINE
設(shè)置存儲引擎,CHARSET
設(shè)置編碼(編碼大概知道是什么亡脑,存儲引擎是啥后面看看能不能學(xué)到堕澄,先放著);
一個復(fù)雜的例子:
創(chuàng)建了一個表远豺,名為
student
奈偏,包含 id,name,enter_date
等屬性,分別定義了數(shù)據(jù)類型躯护,id
是整型無符號自增的主鍵;name
是變長字符型丽涩,最多不能超過100字節(jié)棺滞,不能為 null
;enter_date
是日期類型矢渊;存儲引擎為 innodb
,默認(rèn)字符編碼為 utf8
继准。-
查看表中的字段:
show columns from 表名;
可以看到字段名,字段數(shù)據(jù)類型矮男,默認(rèn)值等信息移必。 -
查看數(shù)據(jù)表類型:
show table status like '表名';
尷尬,有點亂毡鉴。 -
刪除表:
drop table 表名;
-
在表中插入記錄:
看起來有兩種格式:
insert into 表名(fields1,fields2,...)values(value1,value2);
或者可以省略fields
崔泵。
fields
代表字段名,即屬性即列名猪瞬;value
代表各列的值憎瘸;目測省略字段名就按照表中字段順序?qū)?yīng)插入;
如果value
值是字符型或者日期陈瘦,需要用單引號或者雙引號括住幌甘。
可以看到日期如果沒有用引號的話,查詢到的結(jié)果為0000-00-00;
可以看到插入的時候沒有為id字段賦值锅风,但是它是自增的酥诽。 -
查詢表中記錄:
剛創(chuàng)建的表中沒有記錄:
select * from 表名; //*代表返回表中所有字段;
select 字段名1,字段名2 from 表名 [where 條件] [limit n] [offset n];
- select后面的字段名表示要返回的字段名;
- where包含限制條件皱埠;
- limit限制返回記錄的數(shù)目肮帐;
-
offset設(shè)置偏移量,即從第幾條記錄開始查詢漱逸,默認(rèn)為0即從最開始開始查詢泪姨。
-
where 子句
- 可以用and 或者 or指定多個查詢條件;
- where 子句對記錄的查詢不區(qū)分大小寫饰抒;
- where binary 加查詢條件則區(qū)分大小寫肮砾;
操作符列表:
-
update 子句
update 表名 set 字段名1=newValue,字段名2=newValue2 [可以配合where子句];
-
delete 子句
delete from 表名 [where子句];
沒有where子句表示刪除全部記錄:
-
like 子句:模糊查詢
SQLLIKE
子句中使用百分號%
字符來表示任意字符,類似于UNIX或正則表達(dá)式中的星號*
袋坑;
如果沒有使用百分號%
,LIKE
子句與等號=
的效果是一樣的仗处;
可以使用AND
或者OR
指定一個或多個條件;
-
union 操作符
連接兩個以上的select
結(jié)果到同一個結(jié)果集中枣宫;
select 字段 from 表名 union [all或者distinct] select 字段 from 表名;
union
默認(rèn)不返回重復(fù)數(shù)據(jù)婆誓,distinct
即默認(rèn)選項,all
即返回全部數(shù)據(jù)包含重復(fù)數(shù)據(jù)也颤;
兩張表中的數(shù)據(jù):
返回兩張表中的全部姓名name
:
-
排序
select 字段 from 表名 order by 字段 [asc或者desc];
asc
:升序洋幻,不加默認(rèn)升序;
desc
:降序翅娶;
-
分組
舉個例子:
該表代表道具清單文留,表中,name
代表道具名竭沫,number
代表道具數(shù)量燥翅,price
代表道具單價,buy_date
代表道具購買日期蜕提,同一個名字的道具可能有不同價格的品種森书,例如杯子cup
單價3元的購買了100個,單價5元的購買了200個谎势。
以下按照道具名name進(jìn)行分組:
group by name
代表按照name
分組凛膏,count( * )
代表記錄計數(shù)。所以結(jié)果列出了name
這一列和count( * )
這一列它浅。按照名字分組的結(jié)果應(yīng)該是chair, cup,cup, desk,flower
译柏。所以cup
的count( * )
是2,其他都是1姐霍。
以下按照道具購買數(shù)量number
進(jìn)行分組:
同上分析鄙麦,購買數(shù)量為100的有chair和cup(price=3)
典唇,所以count
為2,購買數(shù)量為200的有desk和cup(price=5)
胯府,所以count
為2介衔,購買數(shù)量為500的有flower
,所以count
為1骂因。
以下按照name
分組并分別統(tǒng)計購買數(shù)量:
sum(number)
代表對購買數(shù)量number
進(jìn)行求和炎咖,即:將分組后的同名記錄的number
值進(jìn)行求和。所以對于cup
這一種道具有兩個同名記錄寒波,number
求和為300乘盼。
加上with rollup
會對結(jié)果進(jìn)行求和,如圖是將sum(number)
加起來的總數(shù)俄烁,但是他沒有名字绸栅,所以是null
,可以為他取一個名字:
coalesce
的作用是:如果記錄的第一個參數(shù)為null
页屠,就用第二個參數(shù)粹胯,如果第二個參數(shù)也為null
,就用第三個參數(shù)辰企,以此類推风纠。所以對于總數(shù)這一項沒有name
,就會使用第二個參數(shù)“總數(shù)”牢贸。
也可以把分別算一下總價再加起來竹观,如上圖。 -
mysql 連接(內(nèi)連接潜索、左連接栈幸、右連接)
這是兩個表的數(shù)據(jù):
內(nèi)連接(怎么解釋呢)就是a表關(guān)聯(lián)b表的數(shù)據(jù),這個數(shù)據(jù)在兩個表中都是存在的帮辟。例如:
select
要列出的項是 a 表的id
,a 表的name
,b 表的age
,因為 a b 表一起才能包含比較完全的信息玩焰,例如 a 表student
有id
和
name
由驹,但是沒有age
信息,可以從 b 表teacher
找到age
信息(此處舉例不太恰當(dāng)昔园,可以把 b 表換成一個person
表而字段不變蔓榄,這樣就不會有又是teacher
又是學(xué)生的疑惑)from
表示從 a 表找,inner join
代表關(guān)聯(lián) b 表的信息默刚,on
代表關(guān)聯(lián)的條件甥郑。所以從
student
表第一項列出id,name
,再去teacher
表找到
name
相同的age
值荤西,如果teacher
沒有找到同名項澜搅,則不列出student
表這一項伍俘。類似交集。-
還有一種格式可以不用寫a和b:
左連接:獲取左表所有記錄勉躺,即使右表沒有對應(yīng)匹配的記錄癌瘾。右表沒有的項用 null
填充。
右連接:與
LEFT JOIN
相反饵溅,用于獲取右表所有記錄妨退,即使左表沒有對應(yīng)匹配的記錄。-
null 值處理
正如JavaScript
里的NaN
蜕企,NaN === NaN
返回的是false
咬荷,在 MySQL 中,某個值為null
時轻掩,不能通過value = null
或者value 幸乒!= null
來判斷,因為 MySQL 中null=null
也是返回false
放典。在 JavaScript 中判斷是否為NaN
可以通過isNaN
函數(shù)來判斷逝变,在 MySQL 中,可以通過value is null
或者value is not null
來返回 null 值或者 非null 值奋构。例如:
正則表達(dá)式
可以用在where
子句中(emmm,我的正則不太好壳影,每次要用的時候都是要再去查的,此處就忽略正則的例子):
select * from 表名 where 字段 regexp 正則表達(dá)式;
上面的命令會按照正則表達(dá)式匹配對應(yīng)的內(nèi)容返回弥臼。-
事務(wù)
- 根據(jù) 菜鳥教程的解釋和舉例我覺得可以理解為事務(wù)是一組操作宴咧;事務(wù)開始,然后進(jìn)行了一組操作径缅,最后可以確認(rèn)掺栅,這樣就影響了數(shù)據(jù)庫中的數(shù)據(jù),也可以在一組操作之后不確認(rèn)纳猪,使用回滾來放棄這組操作氧卧。
- 原子性:整一組操作,要么確認(rèn)了一起生效氏堤,要么回滾了一起失效沙绝;
- 穩(wěn)定性 :有非法數(shù)據(jù)(外鍵約束之類),事務(wù)撤回(emmm鼠锈,不懂)闪檬;
- 隔離性:事務(wù)獨立運行。一個事務(wù)處理后的結(jié)果购笆,影響了其他事務(wù)粗悯,那么其他事務(wù)會撤回。事務(wù)的100%隔離同欠,需要犧牲速度(emmm样傍,不懂)横缔;
- 可靠性:軟、硬件崩潰后铭乾,InnoDB數(shù)據(jù)表驅(qū)動會利用日志文件重構(gòu)修改剪廉。可靠性和高速度不可兼得炕檩, innodb_flush_log_at_trx_commit 選項 決定什么時候把事務(wù)保存到日志里(emmm斗蒋,不懂);
- 在 MySQL 中只有使用了 Innodb 數(shù)據(jù)庫引擎的數(shù)據(jù)庫或表才支持事務(wù)笛质;
- 在我們之前的使用命令行模式的時候都可以看作自動提交的事務(wù)泉沾;
- 顯示開啟事務(wù):
begin;
執(zhí)行一組操作:insert,update,delete
等;
提交:commit;
或者 回滾:rollback;
關(guān)于事務(wù)應(yīng)該還有更多的操作,后續(xù)補(bǔ)充;
-
alter 命令:修改妇押、添加跷究、刪除字段名、字段類型或者表名等信息
添加字段:alter table 表名 add 字段名 字段數(shù)據(jù)類型;
添加字段的位置:關(guān)鍵字first
可將字段插在第一列敲霍,after
關(guān)鍵字可將字段插在某字段后面俊马;
在使用after
關(guān)鍵字將新字段插入name
字段后面時遇到了錯誤,后來將gender
的數(shù)據(jù)類型改為char
類型時就成功了肩杈。
應(yīng)該是varchar
是變長的柴我,沒有默認(rèn)大小,所以 MySQL 不知道要給它分配多少空間扩然,因此報錯艘儒,而char
或者int
是固定長度的,默認(rèn)分配一個字節(jié)夫偶。所以在新增字段的時候定義數(shù)據(jù)類型時還是為它分配好所需的空間好界睁,以免出錯。
修改字段:alter table 表名 change 舊字段名 新字段名 新字段數(shù)據(jù)類型;
刪除字段:
alter table 表名 drop 字段名;
修改字段類型:
modify
或者 change
即
change
可以同時用來修改字段名和字段類型兵拢。
設(shè)置null值和默認(rèn)值:
把gender設(shè)置為非null值和默認(rèn)值為female翻斟,從第一次設(shè)置失敗可見,female六個字節(jié)已經(jīng)超過了gender的長度5個字節(jié)说铃,所以要修改大一些杨赤。
可見設(shè)置默認(rèn)值不會影響之前已經(jīng)存在的記錄,但是對新添加的記錄有影響截汪。
可見除了用
modify
也可以使用 alter table tablename alter field set default value;
來修改默認(rèn)值。
刪除默認(rèn)值:alter table tablename alter field drop default;
修改表名:alter table 舊表名 rename to 新表名
MySQL索引
看了菜鳥教程的MySQL索引后依然不知道這個是什么作用植捎,只是說創(chuàng)建了索引可以提高查詢速度衙解,并不知道為什么以及怎么個提高法。于是去網(wǎng)上搜了一些其他的文章焰枢,大概看了和B-tree和哈希索引的一些東西有關(guān)蚓峦,由于這部分和數(shù)據(jù)結(jié)構(gòu)有關(guān)舌剂,而我的數(shù)據(jù)結(jié)構(gòu)又是極其的菜,所以等我后面補(bǔ)了數(shù)據(jù)結(jié)構(gòu)的知識就回來部MySQL的索引暑椰。mysql臨時表
當(dāng)我們需要臨時在MySQL保存一些數(shù)據(jù)用完就馬上銷毀時霍转,可以創(chuàng)建MySQL臨時表。MySQL臨時表只在當(dāng)前連接有效一汽,連接關(guān)閉后臨時表就會被自動銷毀避消。
create temporary table 表名(fields type);
手動銷毀臨時表:drop table 表名
MySQL復(fù)制表
有大概三種形式,一二種只復(fù)制結(jié)構(gòu)不復(fù)制表中的記錄召夹,第三種復(fù)制結(jié)構(gòu)和記錄:-
way1:
show create table 源表名
//顯示要復(fù)制的源表的創(chuàng)建語句
然后把那段create
語句復(fù)制后即可創(chuàng)建(= = 我的命令行不知道怎么復(fù)制就沒有演示了)岩喷; -
way 2:
首先create table 目標(biāo)表名 like 源表名;
//復(fù)制源表的結(jié)構(gòu)
show tables;
//可以看到已經(jīng)創(chuàng)建了一個新表
show columns from 目標(biāo)表名;
//可以看到目標(biāo)表和源表擁有相同的字段等信息
select * from 目標(biāo)表名;
//看到新復(fù)制的目標(biāo)表并沒有記錄內(nèi)容
insert into 目標(biāo)表名 select * from 源表名;
//從源表復(fù)制內(nèi)容到目標(biāo)表
select * from 目標(biāo)表名;
//可以看到新復(fù)制的目標(biāo)表已經(jīng)有了源表的內(nèi)容
也可以用create table 目標(biāo)表名 select * from 目標(biāo)表名 where 1=2;
取代create table 目標(biāo)表名 like 源表名;
命令復(fù)制源表結(jié)構(gòu):
-
way 3:
create table 目標(biāo)表名 select * from 源表名;
//復(fù)制源表結(jié)構(gòu)并且復(fù)制源表中的數(shù)據(jù):
-
MySQL自增序列
student表的id字段是一個定義時為auto_increment的序列,但是在刪除了一些記錄之后并沒有重新補(bǔ)回序號的空缺监憎,所以上圖沒有id為1234的記錄纱意。可以通過將id字段先刪除然后重新添加自增序列鲸阔。
也可以為自增序列設(shè)置一個起始值:
設(shè)置起始值不會影響已有記錄只會影響新的記錄偷霉。
-
mysql處理重復(fù)數(shù)據(jù)
在MySQL數(shù)據(jù)表中設(shè)置指定的字段為PRIMARY KEY
(主鍵) 或者UNIQUE
(唯一) 索引來保證數(shù)據(jù)的唯一性。
insert ignore into
與insert into
的區(qū)別就是insert ignore into
會忽略數(shù)據(jù)庫中已經(jīng)存在的數(shù)據(jù)褐筛,如果數(shù)據(jù)庫沒有數(shù)據(jù)类少,就插入新的數(shù)據(jù),如果有數(shù)據(jù)的話就跳過這條數(shù)據(jù)死讹。這樣就可以保留數(shù)據(jù)庫中已經(jīng)存在數(shù)據(jù)瞒滴,達(dá)到在間隙中插入數(shù)據(jù)的目的。
insert ignore into
當(dāng)插入數(shù)據(jù)時赞警,在設(shè)置了記錄的唯一性后妓忍,如果插入重復(fù)數(shù)據(jù),將不返回錯誤愧旦,只以警告形式返回世剖。 而replace into
如果存在 primary 或 unique 相同的記錄,則先刪除掉笤虫。再插入新記錄旁瘫。- 過濾重復(fù)數(shù)據(jù):使用
distinct
關(guān)鍵字
- 過濾重復(fù)數(shù)據(jù):使用
SQL注入
情況大致就是惡意用戶在用戶輸入中輸入了SQL語句,SQL語句被執(zhí)行后帶來不好的后果琼蚯。
所以永遠(yuǎn)認(rèn)為用戶輸入是不安全的酬凳,永遠(yuǎn)不要信任用戶輸入,對用戶輸入進(jìn)行過濾和轉(zhuǎn)義等遭庶。
具體如何注入和如何防止在我進(jìn)行了實例學(xué)習(xí)后會舉例說明~-
導(dǎo)出數(shù)據(jù)到文件
select ... into outfile 文件路徑 [fields terminated by 分隔符] [lines terminated by 分隔符];
tmp 文件夾如果不存在會報錯宁仔。
全部數(shù)據(jù)連成一行了~
格式化一下:每個字段用引號包住,用逗號隔開峦睡,每行回車換行:
不要引號和逗號:
-
mySQL數(shù)據(jù)導(dǎo)入
load data local infile 文件路徑 into table 表名 [fields terminated by 分隔符] [lines terminated by 分隔符];
用上面數(shù)據(jù)導(dǎo)出的文件導(dǎo)入到一個新的表格中:
6. 遇到的問題
(1)MySQL 初次安裝沒有自己設(shè)置密碼翎苫,打開命令行直接輸入“mysql
”之后就可以進(jìn)入 MySQL 的命令模式权埠,一開始可以正常使用 show databases
和 create database name
等命令,但是突然某一次開始使用 create
命令創(chuàng)建數(shù)據(jù)庫一直報權(quán)限錯誤:
查看網(wǎng)上教程很多與我的情況有相似又有不同煎谍,找到了一篇是使用安裝
MySQL 的時候一起安裝的 MySQL workbench(MySQL可視化工作臺)解決了這個問題攘蔽。附上鏈接:http://blog.csdn.net/a19881029/article/details/37809209
我的做法是修改了 root 的密碼,然后之后全部使用 root 身份登錄 MySQL
進(jìn)行命令操作呐粘。結(jié)合網(wǎng)絡(luò)教程满俗,猜測之前報權(quán)限錯誤的原因是用匿名身份登錄了 MySQL,匿名身份缺乏相關(guān)創(chuàng)建數(shù)據(jù)庫的權(quán)限吧= =事哭?(歡迎知道原因的胖友告訴我~)
(2)事務(wù)回滾問題:
- 在使用alter重命名表名時使用了事務(wù)漫雷,修改了表名后想要回滾發(fā)現(xiàn)還是被修改了。在網(wǎng)上查了之后覺得可能一個是因為使用了alter是ddl語句(關(guān)于DDL語句是什么以及哪些語句會自動提交可以參考:http://blog.csdn.net/sunshixingh/article/details/50920119)會隱式提交鳍咱,另一個是因為事務(wù)中出現(xiàn)了錯誤降盹。
-
于是使用控制變量法對這兩個原因進(jìn)行了測試:
首先是測試DDL語句的因素:
可見teacher不在,即事務(wù)中不存在錯誤也被修改了谤辜,回滾失敗了蓄坏。
對事務(wù)中發(fā)生錯誤的因素:
可見即使事務(wù)中發(fā)生了錯誤也沒有插入新數(shù)據(jù),回滾成功丑念。
根據(jù)上面的測試涡戳,應(yīng)該是因為事務(wù)中的DDL語句導(dǎo)致了隱式的提交。
再次查詢了相關(guān)資料后進(jìn)行相關(guān)的測試(不包含隱式提交語句的):
-
事務(wù)開始脯倚,如果全部執(zhí)行了正確的操作并且commit就是全部提交:
-
事務(wù)開始渔彰,如果執(zhí)行了正確的操作然后執(zhí)行了錯誤的操作又執(zhí)行了正確的操作,然后commit推正,會提交成功的操作:
-
事務(wù)開始恍涂,如果執(zhí)行了正確的操作然后執(zhí)行了錯誤的操作又執(zhí)行了正確操作,然后rollback植榕,會全部回滾:
-
set autocommit=0
似乎不起作用再沧?
關(guān)于MySQL事務(wù)的理解歡迎大神指正~
(3)兩個MySQL服務(wù):
今天打開命令行如往常一樣mysql -u root -p
然后輸入密碼的時候發(fā)現(xiàn)密碼錯誤,打開MySQLworkbench發(fā)現(xiàn)也需要輸入密碼尊残,結(jié)果輸入和以往一樣的密碼無法登陸成功炒瘸,后來試了很多常用密碼就登進(jìn)去了。一開始以為是我記錯密碼了寝衫,但當(dāng)我用命令行查看test數(shù)據(jù)庫下的數(shù)據(jù)表時卻發(fā)現(xiàn)沒有昨天練習(xí)的數(shù)據(jù)表顷扩,又看了數(shù)據(jù)庫好像多了其他數(shù)據(jù)庫名稱。覺得很奇怪慰毅。以為是數(shù)據(jù)庫數(shù)據(jù)丟失屎即,去看了安裝目錄下的data文件夾,是存在我之前的數(shù)據(jù)表的。后來看了網(wǎng)上教程說會不會連接錯了數(shù)據(jù)庫技俐,就打算用任務(wù)管理器關(guān)掉數(shù)據(jù)庫服務(wù)再看看怎么連接。但是我在任務(wù)管理器中發(fā)現(xiàn)了兩個MySQL服務(wù)统台,一個叫MySQL56(正在運行)雕擂,一個叫MySQL(已停止),于是我啟用了MySQL服務(wù)又停掉MySQL56贱勃,就找回自己的數(shù)據(jù)表了井赌,發(fā)現(xiàn)原來我的密碼也沒有記錯!
之前好像也有安裝過MySQL但是好像安裝失敗了贵扰,后來卸載掉仇穗。過了很久重新按照網(wǎng)上教程按照的MySQL就可以用了。
所以是因為我安裝了兩次MySQL嗎還是什么原因戚绕?
MySQL和MySQL56對應(yīng)不同的密碼,安裝目錄下的數(shù)據(jù)是MySQL不是MySQL56的,所以MySQL56是什么旱捧?脏里??用MySQL56的時候data文件夾又在哪里球切?谷誓?
發(fā)現(xiàn)每次開機(jī)自啟的MySQL服務(wù)是那個MySQL56的。吨凑。捍歪。?鸵钝?糙臼?
以上是MySQL入門學(xué)習(xí),更多復(fù)雜操作蒋伦,待使用更新~
理論上會學(xué)Nodejs+MySQL弓摘,而且這些語句,也是要結(jié)合實例多多使用多多踩坑才更容易記住和學(xué)會的痕届,emmmm