MySQL是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB公司開發(fā),屬于Oracle旗下產(chǎn)品,是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一。
望都網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)于2013年開始到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
端口是3306。
表很多時,使用linux腳本,需要根據(jù)需要修改一下:
和創(chuàng)建一樣,可以加上 if exists
可兩篇文章:
如:
用于在已有的表中添加、刪除或修改列。
添加 ADD
或
默認是添加到最后,但可以指定位置。 FIRST :添加最前
AFTER 字段名 :添加指定字段之后
例子:
刪除 DROP
修改 MODIFY 主要修改原列的類型或約束條件 同樣可以用 FIRST 和 AFTER 字段名 ,代表的是修改到哪里。
修改字段名 CHANGE
可以把表2的數(shù)據(jù)復(fù)制到表1中,但 不能復(fù)制約束性條件 。
單行
多行,注意 只有一個VALUES :
不寫 (行1, 行2...) 這一部分的話,默認一一對應(yīng)
除了以上方法外,還可以用SET為每一行附上相應(yīng)的值。
假如沒有篩選的話,就給全部都修改了??梢杂? WHERE 篩選。
假如 沒有篩選的話,就給全部刪除了 。相當于清空。
清空
先把表刪除,然后再建一個。與 DELETE FROM 相比, TRUNCATE 的效率更快,因為 DELETE FROM 是把記錄逐條刪除的。
查詢執(zhí)行的順序
FROM -- WHERE -- SELECT -- GROUP BY -- HAVING -- ORDER BY -- LIMIT
注意
當數(shù)據(jù)很大,上百萬的時候,使用LIMIT ... OFFSET ..的方式進行分頁十分浪費資源且耗時長。最好是結(jié)合WHERE使用,如:
REGEXP 使用正則表達進行匹配。 查詢時,需要搭配WHERE或HAVING使用 。
兩個表之間有交集且要用到兩個表的數(shù)據(jù)時,可以使用內(nèi)連接查詢。
LEFT JOIN 關(guān)鍵字從左表(table1)返回所有的行,即使右表(table2)中沒有匹配。如果右表中沒有匹配,則結(jié)果為 NULL。
用法:
RIGHT JOIN 關(guān)鍵字從右表(table2)返回所有的行,即使左表(table1)中沒有匹配。如果左表中沒有匹配,則結(jié)果為 NULL。 把LEFT JOIN的表1、表2調(diào)換順序,就是REGHT JOIN 。
FULL OUTER JOIN 關(guān)鍵字只要左表(table1)和右表(table2)其中一個表中存在匹配,則返回行. 相當于結(jié)合了 LEFT JOIN 和 RIGHT JOIN 的結(jié)果。
但 MySQL中不支持 FULL OUTER JOIN 。
即SELECT嵌套。
IN 一個查詢結(jié)果作為另一個查詢的條件。 如:
EXISTS 用于判斷查詢子句是否有記錄,如果有一條或多條記錄存在返回 True,否則返回 False。True時執(zhí)行。 如:
索引的本質(zhì)是一種排好序的數(shù)據(jù)結(jié)構(gòu)。利用索引可以提高查詢速度。
常見的索引有:
MySQL通過外鍵約束來保證表與表之間的數(shù)據(jù)的完整性和準確性。 外鍵的使用條件:
外鍵的好處:可以使得兩張表關(guān)聯(lián),保證數(shù)據(jù)的一致性和實現(xiàn)一些級聯(lián)操作。
對已有的兩個表增加外鍵 比如:主表為A,子表為B,外鍵為aid,外鍵約束名字為a_fk_b
為子表添加一個字段,當做外鍵
為子表添加外鍵約束條件
假如刪除記錄報錯: [Err] 1451 -Cannot deleteorupdatea parent row: aforeignkeyconstraintfails (...)
這是因為MySQL中設(shè)置了foreign key關(guān)聯(lián),造成無法更新或刪除數(shù)據(jù)??梢酝ㄟ^設(shè)置 FOREIGN_KEY_CHECKS 變量來避免這種情況。 第一步:禁用外鍵約束,我們可以使用: SETFOREIGN_KEY_CHECKS=0; 第二步:刪除數(shù)據(jù) 第三步:啟動外鍵約束,我們可以使用: SETFOREIGN_KEY_CHECKS=1; 查看當前FOREIGN_KEY_CHECKS的值,可用如下命令: SELECT @@FOREIGN_KEY_CHECKS;
使用 UNION 來組合兩個查詢,如果第一個查詢返回 M 行,第二個查詢返回 N 行,那么組合查詢的結(jié)果一般為 M+N 行。
每個查詢必須包含相同的列、表達式和聚集函數(shù)。
默認會去除相同行,如果需要 保留 相同行,使用 UNION ALL 。
只能包含一個 ORDER BY 子句,并且必須位于語句的最后 。
內(nèi)置函數(shù)很多, 見: MySQL 函數(shù)
我們一般使用 START TRANSACTION 或 BEGIN 開啟事務(wù), COMMIT 提交事務(wù)中的命令, SAVEPOINT : 相當于設(shè)置一個還原點, ROLLBACK TO : 回滾到某個還原點下
一般的使用格式如下:
開啟事務(wù)時, 默認加鎖
根據(jù)類型可分為共享鎖(SHARED LOCK)和排他鎖(EXCLUSIVE LOCK)或者叫讀鎖(READ LOCK)和寫鎖(WRITE LOCK)。
根據(jù)粒度劃分又分表鎖和行鎖。表鎖由數(shù)據(jù)庫服務(wù)器實現(xiàn),行鎖由存儲引擎實現(xiàn)。
除此之外,我們可以顯示加鎖
加鎖時, 如果沒有索引,會鎖表,如果加了索引,就會鎖行
InnoDB默認支持行鎖,獲取鎖是分步的,并不是一次性獲取所有的鎖,因此在鎖競爭的時候就會出現(xiàn)死鎖的情況
解決方法:
即ACID特性:
由于并發(fā)事務(wù)會引發(fā)上面這些問題, 我們可以設(shè)置事務(wù)的隔離級別解決上面的問題.
MySQL的默認隔離級別(可重復(fù)讀)
查看當前會話隔離級別
方式1
方式2
設(shè)置隔離級別
主從集群的示意圖如下:
主要涉及三個線程: binlog 線程、 I/O 線程和 SQL 線程。
同步流程:
由于MySQL主從集群只會從主節(jié)點同步到從節(jié)點, 不會反過來同步, 所以需要讀寫分離
讀寫分離需要在業(yè)務(wù)層面實現(xiàn) , 寫數(shù)據(jù)只能在主節(jié)點上完成, 而讀數(shù)據(jù)可以在主節(jié)點或從節(jié)點上完成
索引是幫助MySQL高效獲取數(shù)據(jù)的排好序的數(shù)據(jù)結(jié)構(gòu)
MySQL的索引有
推薦兩個在線工具:
簡單來說, B樹是在紅黑樹(一個平衡二叉樹)的基礎(chǔ)上將一個節(jié)點存放多個值, 實現(xiàn)的, 降低了樹的高度, 每個節(jié)點都存放索引及對應(yīng)數(shù)據(jù)指針, 同一層的節(jié)點是遞增的
而B+樹在B樹的基礎(chǔ)上進行優(yōu)化, 非葉子節(jié)點存放 子節(jié)點的開始的索引, 葉子節(jié)點存放索引和數(shù)據(jù)的指針, 且葉子節(jié)點之間有雙向的指針
如下示意圖:
不同的引擎, 主鍵索引存放的數(shù)據(jù)也不一樣, 比如常見的 MyISAM 和 InnoDB
MyISAM 的B+樹葉子節(jié)點存放表數(shù)據(jù)的指針, InnoDB 的B+樹葉子節(jié)點存放處主鍵外的數(shù)據(jù)
其他的:
即多個列組成一個索引, 語法:
由于聯(lián)合索引的B+樹的結(jié)構(gòu), 根據(jù)列建立, 所以我們的查找條件也要根據(jù)索引列的順序( where column1=x, column2=y,columnN... ), 否則會全表掃描
如果你對列進行了 (+,-,*,/,!) , 那么都將不會走索引。
OR 引起的索引失效
OR 導(dǎo)致索引是在特定情況下的,并不是所有的 OR 都是使索引失效,如果OR連接的是 同 一個字段,那么索引 不會失效 , 反之索引失效 。
這個我相信大家都明白,模糊搜索如果你前綴也進行模糊搜索,那么不會走索引。
這兩種用法,也將使索引失效。另 IN 會走索引,但是當IN的取值范圍較大時會導(dǎo)致索引失效,走全表掃描, 見: MySQL中使用IN會不會走索引
不走索引。
走索引。
所以設(shè)計表的時候, 建議不可為空, 而是將默認值設(shè)置為 "" ( NOT NULL DEFAULT "" )
兩種方式,一種是MySQL自帶的命令行窗口,一種是圖形用戶管理工具,前者類似于一個cmd窗口,日常管理維護數(shù)據(jù)庫不是很方便,后者就是一個圖形用戶管理軟件,種類繁多,使用起來也相對容易一些,下面我簡單介紹一下這2種方式:
命令行窗口
1.這個MySQL一般會自帶,安裝完MySQL后,直接可以在開始菜單中找到,如下:
2.點擊進去,輸入密碼后,就可以直接使用MySQL數(shù)據(jù)庫,編寫SQL代碼了,效果如下,這里你也可以將MySQL添加到環(huán)境變量中,后面就可以直接使用命令“mysql-hlocalhost-uroot-p”連接,效果一樣:
圖形用戶管理工具
這個就很多了,下面我簡單介紹幾個軟件,基本功能都不相上下,選擇適合自己的一個就行:
1.MySQLworkbench:這個是MySQL官方自帶的一個圖形用戶管理工具,免費、跨平臺,可以直接在MySQL官網(wǎng)下載,支持數(shù)據(jù)庫的遷移、設(shè)計、建模、備份和恢復(fù)等功能,可以直接新建查詢,編寫SQL語句,使用起來非常不錯:
2.Navicat:這也是一個非常不錯的圖形用戶管理工具,大部分開發(fā)人員都應(yīng)該聽說或者使用過,界面干凈整潔,可以直接建庫建表、設(shè)計相關(guān)字段屬性和主外鍵等,也支持數(shù)據(jù)庫備份、恢復(fù)等功能,使用起來也非常方便:
3.DataGrip:這是一個比較專業(yè)的數(shù)據(jù)庫管理工具,Jetbrains公司的產(chǎn)品,支持目前幾乎所有的主流關(guān)系型數(shù)據(jù)庫,像MySQL,Oracle,SQLServer等,新建查新、建庫建表、日常備份恢復(fù)等功能都非常不錯,支持代碼高亮、語法提示和自動補全,使用起來非常不錯,值得一試:
這里就介紹這3個軟件,當然,還有許多其他管理工具,像SQLyog,phpMyAdmin,HeidiSQL,SequelPro等都不錯,這里就不一一介紹了,感興趣的話,可以到網(wǎng)上搜一下相關(guān)軟件和資料,非常多。
至此,這2種使用MySQL的方式都介紹完了。總的來說,第一種方式使用起來不是很方便,日常開發(fā)使用不多,圖形用戶管理工具的方式使用最多,也更方便日常維護管理數(shù)據(jù)庫,建議初學(xué)者的話,還是使用圖形用戶管理工具,更容易一些,網(wǎng)上也有相關(guān)教程和資料,感興趣的話,可以搜一下,希望以上分享的內(nèi)容能對你有所幫助吧,也歡迎大家評論、留言。
1、首先第一步就是我們要先連接數(shù)據(jù)庫,只有先連接了數(shù)據(jù)庫,才可以對數(shù)據(jù)庫進行操作。首先打開一個cmd窗口。
2、在cmd命令行里輸入mysql-uroot-proot-h127.0.0.1,這樣就可以連接了。我們來看一下連接的結(jié)果。
3、使用showdatabases;這個命令可以顯示出所有的database表以方便我們查看。
4、使用use數(shù)據(jù)庫名就可以進入我們的數(shù)據(jù)庫了。成功的話就會顯示Databasechanged。
5、當我們使用showtables就可以顯示出當前數(shù)據(jù)庫里全部的表格了,這個時候我們就可以對這些表進行別的操作了。
6、使用select*from表名,就可以查看整張表格里的所有的信息,比如說我們打開的是users,所以里面會有用戶名和密碼的內(nèi)容。
MySQL
MySQL是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQLAB公司開發(fā),目前屬于Oracle旗下公司。MySQL最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),在WEB應(yīng)用方面MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,關(guān)系數(shù)據(jù)庫管理系統(tǒng))應(yīng)用軟件之一。
MySQL是一種關(guān)聯(lián)數(shù)據(jù)庫管理系統(tǒng),關(guān)聯(lián)數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個大倉庫內(nèi),這樣就增加了速度并提高了靈活性。
MySQL所使用的SQL語言是用于訪問數(shù)據(jù)庫的最常用標準化語言。MySQL軟件采用了雙授權(quán)政策,它分為社區(qū)版和商業(yè)版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網(wǎng)站的開發(fā)都選擇MySQL作為網(wǎng)站數(shù)據(jù)庫。
由于其社區(qū)版的性能卓越,搭配PHP和Apache可組成良好的開發(fā)環(huán)境。