MySQL可以說是開發(fā)小型系統(tǒng)、網(wǎng)站等必不可少的數(shù)據(jù)庫軟件,性能非常強,功能也是超強大,新版的MYSQL 8.0相比之前的版本擁有更快的性能,還有非常多的優(yōu)化和改進,讓你的數(shù)據(jù)安全又高效
MySQL數(shù)據(jù)庫亮點
使用C和C++編寫,并使用了多種編譯器進行測試,保證源代碼的可移植性。
支持AIX、BSDi、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、NetBSD、OpenBSD、OS/2 Wrap、Solaris、SunOS、Windows等多種操作系統(tǒng)。
為多種編程語言提供了API。這些編程語言包括C、C++、C#、Delphi、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。
支持多線程,充分利用CPU資源,支持多用戶。
優(yōu)化的SQL查詢算法,有效地提高查詢速度。
既能夠作為一個單獨的應(yīng)用程序應(yīng)用在客戶端服務(wù)器網(wǎng)絡(luò)環(huán)境中,也能夠作為一個庫而嵌入到其他的軟件中。
提供多語言支持,常見的編碼如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作數(shù)據(jù)表名和數(shù)據(jù)列名。
提供TCP/IP、ODBC和JDBC等多種數(shù)據(jù)庫連接途徑。
提供用于管理、檢查、優(yōu)化數(shù)據(jù)庫操作的管理工具。
可以處理擁有上千萬條記錄的大型數(shù)據(jù)庫。
MySQL8.0新版軟件特色
1.性能:MySQL8.0的速度是MySQL5.7的兩倍。MySQL8.0在以下幾個方面帶來了更好的性能:閱讀/寫作tspot熱點競爭問題)等方面帶來了更好的性能。
2.NoSQL:MySQL從5.7版本開始提供NoSQL存儲功能,這部分功能在8.0版本中得到了更大的改進。該功能消除了對獨立NoSQL文檔數(shù)據(jù)庫的需求,MySQL文檔存儲也為JSON文檔提供了多文檔事務(wù)支持和完整的ACID合規(guī)。
3.窗口函數(shù)(Windowfunctions):從MySQL8.0開始,增加了一個叫做窗口函數(shù)的概念,可以用來實現(xiàn)幾種新的查詢方法。窗口函數(shù)類似于SUM()和COUNT(),但它不會將多行查詢結(jié)果合并為一行,而是將結(jié)果放回多行。也就是說,窗口函數(shù)不需要GROUPBY。
4.隱藏索引:在MySQL8.0中,索引可以隱藏和顯示。當索引被隱藏時,它不會被查詢優(yōu)化器使用。我們可以使用這個特性進行性能調(diào)試,例如,我們首先隱藏一個索引,然后觀察它對數(shù)據(jù)庫的影響。如果數(shù)據(jù)庫性能下降,索引有用,然后恢復(fù)顯示;如果數(shù)據(jù)庫性能沒有變化,索引是多余的,請考慮刪除。
5.降序索引:MySQL8.0支持索引按降序排序,該索引中的值也按降序排序。
6.通用表達式(Commontableexpresionscte):在復(fù)雜查詢中使用嵌入式表時,使用CTE使查詢句更加清晰。
7.UTF-8編碼:從MySQL8開始,使用UTF8mb4作為MySQL的默認字符集。
8.JSON:MySQL8大大提高了對JSON的支持,增加了基于路徑查詢參數(shù)從JSON字段中提取數(shù)據(jù)的JSON_EXTRACT()函數(shù),以及JSON_ARAYAGG()和JSON_OBJECTAGG()聚合函數(shù)。
9.可靠性:InnnoDB現(xiàn)在支持表DDL的原子性,即InnoDB表上的DDL也可以實現(xiàn)事務(wù)的完整性,要么回滾失敗,要么提交成功,以免DDL出現(xiàn)部分成功問題。此外,它還支持單個事務(wù)數(shù)據(jù)字典中存儲元數(shù)據(jù)。
10.高可用性(HighAvailability):InnoDB集群為您的數(shù)據(jù)庫提供集成的本地HA解決方案。
11.安全:OpenSSL的改進,新的默認身份驗證,SQL角色,密碼強度,授權(quán)。
更新日志:
MYSQL數(shù)據(jù)庫改進了觸發(fā)器的動態(tài)控制:支持在同一個表中對一個事件類型應(yīng)用多個觸發(fā)器;
實時的執(zhí)行分析;
改進了JSON Explain Data:可以在優(yōu)化器中添加總查詢成本、單表查詢成本、總數(shù)據(jù)量等參數(shù)來獲得更詳細的信息。
mysql數(shù)據(jù)庫基礎(chǔ)知識
Mysql使用時的注意事項
每日一條數(shù)據(jù)庫操作語句都應(yīng)該以分號 ;結(jié)尾,因為mysql支持換行操作
mysql數(shù)據(jù)庫對大小寫不敏感,大小寫皆可,通常關(guān)鍵字使用大寫表示
mysql數(shù)據(jù)庫中哭的名稱應(yīng)該以英文字符或者一些符號起始,但是不允許以數(shù)字起始
mysql數(shù)據(jù)庫中哭的名稱、表的名稱、字段的名稱都不能使用mysql關(guān)鍵字,比如create、database;如果非要使用,那就用反引號括起來
庫的操作
查看mysql中的所有庫:show databases;
創(chuàng)建庫:create database 庫名稱;----》create database if not exists 庫名稱;如果不存在該庫,則創(chuàng)建
刪除庫:drop database 庫名稱;
選擇使用數(shù)據(jù)庫:use 庫名稱;
顯示當前使用的數(shù)據(jù)庫:select database();
數(shù)據(jù)類型
數(shù)值類型
MySQL支持所有標準SQL數(shù)值數(shù)據(jù)類型。
這些類型包括嚴格數(shù)值數(shù)據(jù)類型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似數(shù)值數(shù)據(jù)類型(FLOAT、REAL和DOUBLE PRECISION)。
關(guān)鍵字INT是INTEGER的同義詞,關(guān)鍵字DEC是DECIMAL的同義詞。
BIT數(shù)據(jù)類型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。
作為SQL標準的擴展,MySQL也支持整數(shù)類型TINYINT、MEDIUMINT和BIGINT。下面的表顯示了需要的每個整數(shù)類型的存儲和范圍。
日期和時間類型
表示時間值的日期和時間類型為DATETIME、DATE、TIMESTAMP、TIME和YEAR
每個時間類型有一個有效值范圍和一個"零"值,當指定不合法的MySQL不能表示的值時使用"零"值。
字符串類型
字符串類型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET
注意:char(n) 和 varchar(n) 中括號中 n 代表字符的個數(shù),并不代表字節(jié)個數(shù),比如 CHAR(30) 就可以存儲 30 個字符。
CHAR 和 VARCHAR 類型類似,但它們保存和檢索的方式不同。它們的最大長度和是否尾部空格被保留等方面也不同。在存儲或檢索過程中不進行大小寫轉(zhuǎn)換。
BINARY 和 VARBINARY 類似于 CHAR 和 VARCHAR,不同的是它們包含二進制字符串而不要非二進制字符串。也就是說,它們包含字節(jié)字符串而不是字符字符串。這說明它們沒有字符集,并且排序和比較基于列值字節(jié)的數(shù)值值。
BLOB 是一個二進制大對象,可以容納可變數(shù)量的數(shù)據(jù)。有 4 種 BLOB 類型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它們區(qū)別在于可容納存儲范圍不同。
有 4 種 TEXT 類型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。對應(yīng)的這 4 種 BLOB 類型,可存儲的最大長度不同,可根據(jù)實際情況選擇。
表的操作
顯示庫中所有的表:show tables;
創(chuàng)建表:create table if not exists tb_stu(id int,name varchar(3),age int, birthdatetime);
查看表結(jié)構(gòu):desc tb_stu;
刪除表:drop table tb_stu;
表中數(shù)據(jù)的增刪改查基礎(chǔ)
插入數(shù)據(jù):insert
指定列插入:可以指定單獨個一個或幾個列信息進程插入,并且前綴列信息
insert [into] tb_stu(id,name) values (1,“韓云溪”);
全列插入:可以省略前綴的列信息,按照列順序插入所有列的數(shù)據(jù)
insert [into] tb_stu values (1,“韓云溪”,21,“2000-03-19 12:00:00”);
多行插入:
insert [into] tb_name values(val1,val2…),(val1,val2…),…;
insert [into] tb_stu values (3,“三三”,17,now()),(4,“四四”,18,now());
查詢數(shù)據(jù):select
查詢指定表中所有數(shù)據(jù):select * from tb_name;
指定列查詢:select name,birth from tb_stu;
排序查詢:select * from tb_stu order by age [asc]/desc;按照年齡排序查詢
默認為asc升序查詢,desc為降序查詢
多列排序:在第一列相同的情況下針對第二列進行排序:select * from tb_stu order by age ,id desc;
分頁查詢:通常搭配排序一起使用
select * from tb_stu limit m offset n;-----分頁查詢,每頁顯示m條數(shù)據(jù),偏移到第n條開始顯示m條數(shù)據(jù)(即從第n條起,顯示一頁)
查詢字段為表達式:
select name,id+age from tb_stu;----按照name和id+age的值分列查詢
查詢時,字段別名的使用:
select name,id+age [as] total from tb_stu; -----給id+age起了個別名叫total,as可以省略
去重:
select distinct age from tb_stu ;-----根據(jù)age查詢,并對age去重
條件查詢
按照一定的限制條件進行查詢,限制條件通過where子句給出
例如:按照id>1的限制條件進行查詢:select * from tb_stu where id>1;
where子句涉及的運算符:
另外還有:> = <(大于、等于、小于)可以和NULL進行比較
is NULL/is not NULL 可以用來判斷是否為空
IN的使用:判斷查詢的數(shù)據(jù)是否是給予的多個選項之一
例如:select * from tb_stu where name in(“韓云溪”,“夏紫藤”);-----查詢名字為韓云溪或夏紫藤的項,符合則顯示,不符合則忽略
between A and B 的使用:查詢范圍介于AB兩者之間項
select * from tb_name where id between 1 and 3; -----查詢id介于1和3之間的項
LIKE 模糊匹配的使用:查詢一個數(shù)據(jù)看起來像某個條件
select * from tb_stu where name like ‘韓%’;-----查詢表中姓名以韓開頭的項,%為通配符
邏輯運算符的使用:與and、 或or、 非not
select * from tb_stu where age>17 and age<22;-----查詢表中年齡大于17并且小于22的項
修改數(shù)據(jù):update
update tb_name set fields1=val1,fields2=val2 where condition;----尤其注意不要忘了where限制條件,否則整張表的該列數(shù)據(jù)都會更改
刪除數(shù)據(jù):delete
delete from tb_name where condition;----尤其注意不要忘了where限制條件,否則整張表的數(shù)據(jù)都會被刪除
————————————————
版權(quán)聲明:本文為CSDN博主「頭暈神教的神秘人」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_43962381/article/details/118223561
上一篇:迅蟒自媒體營銷助手