本文目錄一覽:
mysql數據庫的優點
mysql數據庫的優點如下:
1、速度:運行速度快。
2、價格:MySQL對多數個人來說是免費的。
3、容易使用;與其他大型數據庫的設置和管理相比,其複雜程度較低,容易學習。
4、可移植性:能夠工作在眾多不同的系統平台上,例如:Windows、Linux、Unix、MacOS等。
5、豐富的接口:提供了用於C、C++、Eiffel、Java、Perl、PHP、Python、Rudy和TCL等語言的APl。6、支持查詢語言:MySQL可以利用標準SQL語法和支持ODBC(開放式數據庫連接)的應用程序。
7、安全性和連接性;十分靈活和安全的權限和密碼系統,允許主機驗證。連接到服務器時,所有的密碼均採用加密形式,從而保證了密碼安全。並且由於MySQL時網絡化的,因此可以在因特網網上的任何地方訪問,提高數據共享效率。
MySQL是用來做什麼的?
如下:
1、MySQL是一個關係型數據庫管理系統,由瑞典MySQL AB 公司開發,現在是屬於 Oracle 旗下產品。MySQL 是現下最流行的關係型數據庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關係數據庫管理系統) 應用軟件之一。
2、MySQL是一種關係型數據庫管理系統,關係數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度並提高了靈活性。
3、MySQL所使用的 SQL 語言是用於訪問數據庫的最常用標準化語言。MySQL 軟件採用了雙授權政策,分為社區版和商業版,由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇 MySQL 作為網站數據庫。
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 “” )
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/200993.html