0基礎學習MySQL,這些一定要知道!

2021-03-02 數據分析輕鬆學

堅持看到最後的孩子有彩蛋



資料庫基礎知識
1)為什麼要使用資料庫

數據保存在內存

優點:存取速度快

缺點:數據不能永久保存

數據保存在文件

優點:數據永久保存

缺點:速度比內存操作慢,頻繁的IO操作;查詢數據不方便

數據保存在資料庫

1)數據永久保存

2)使用SQL語句,查詢方便效率高。

3)管理數據方便


2)什麼是SQL?


結構化查詢語言(Structured Query Language)簡稱SQL,是一種資料庫查詢語言。

作用:用於存取數據、查詢、更新和管理關係資料庫系統

3)什麼是MySQL?

MySQL是一個關係型資料庫管理系統,由瑞典MySQL AB 公司開發,屬於 Oracle 旗下產品。

MySQL 是最流行的關係型資料庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關係資料庫管理系統) 應用軟體之一。

在Java企業級開發中非常常用,因為 MySQL 是開源免費的,並且方便擴展。

4)資料庫三大範式是什麼?

第一範式:每個列都不可以再拆分。

第二範式:在第一範式的基礎上,非主鍵列完全依賴於主鍵,而不能是依賴於主鍵的一部分。

第三範式:在第二範式的基礎上,非主鍵列只依賴於主鍵,不依賴於其他非主鍵。

在設計資料庫結構的時候,要儘量遵守三範式,如果不遵守,必須有足夠的理由。比如性能。事實上我們經常會為了性能而妥協資料庫的設計。

5)mysql有關權限的表都有哪幾個?

MySQL伺服器通過權限表來控制用戶對資料庫的訪問,權限表存放在mysql資料庫裡,由mysql_install_db腳本初始化。這些權限表分別user,db,table_priv,columns_priv和host。下面分別介紹一下這些表的結構和內容:

user權限表:記錄允許連接到伺服器的用戶帳號信息,裡面的權限是全局級的。

db權限表:記錄各個帳號在各個資料庫上的操作權限。

table_priv權限表:記錄數據表級的操作權限。

columns_priv權限表:記錄數據列級的操作權限。

host權限表:配合db權限表對給定主機上資料庫級操作權限作更細緻的控制。這個權限表不受GRANT和REVOKE語句的影響。

6)MySQL的binlog有有幾種錄入格式?分別有什麼區別?

有三種格式,statement,row和mixed。

此外,新版的MySQL中對row級別也做了一些優化,當表結構發生變化的時候,會記錄語句而不是逐行記錄。

數據類型

1)mysql有哪些數據類型?


1、整數類型,包括TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,分別表示1位元組、2位元組、3位元組、4位元組、8位元組整數。

任何整數類型都可以加上UNSIGNED屬性,表示數據是無符號的,即非負整數。

長度:整數類型可以被指定長度,例如:INT(11)表示長度為11的INT類型。長度在大多數場景是沒有意義的,它不會限制值的合法範圍,只會影響顯示字符的個數,而且需要和UNSIGNED ZEROFILL屬性配合使用才有意義。


例子,假定類型設定為INT(5),屬性為UNSIGNED ZEROFILL,如果用戶插入的數據為12的話,那麼資料庫實際存儲數據為00012。

2、實數類型,包括FLOAT、DOUBLE、DECIMAL。


DECIMAL可以用於存儲比BIGINT還大的整型,能存儲精確的小數。
而FLOAT和DOUBLE是有取值範圍的,並支持使用標準的浮點進行近似計算。
計算時FLOAT和DOUBLE相比DECIMAL效率更高一些,DECIMAL你可以理解成是用字符串進行處理。

3、字符串類型,包括VARCHAR、CHAR、TEXT、BLOB


VARCHAR用於存儲可變長字符串,它比定長類型更節省空間。
VARCHAR使用額外1或2個字節存儲字符串長度。列長度小於255位元組時,使用1位元組表示,否則使用2位元組表示。

VARCHAR存儲的內容超出設置的長度時,內容會被截斷。
CHAR是定長的,根據定義的字符串長度分配足夠的空間。
CHAR會根據需要使用空格進行填充方便比較。


CHAR適合存儲很短的字符串,或者所有值都接近同一個長度。
CHAR存儲的內容超出設置的長度時,內容同樣會被截斷。使用策略:
對於經常變更的數據來說,CHAR比VARCHAR更好,因為CHAR不容易產生碎片。


對於非常短的列,CHAR比VARCHAR在存儲空間上更有效率。
使用時要注意只分配需要的空間,更長的列排序時會消耗更多內存。
儘量避免使用TEXT/BLOB類型,查詢時會使用臨時表,導致嚴重的性能開銷。

4、枚舉類型(ENUM),把不重複的數據存儲為一個預定義的集合。


有時可以使用ENUM代替常用的字符串類型。
ENUM存儲非常緊湊,會把列表值壓縮到一個或兩個字節。
ENUM在內部存儲時,其實存的是整數。
儘量避免使用數字作為ENUM枚舉的常量,因為容易混亂。
排序是按照內部存儲的整數

5、日期和時間類型,儘量使用timestamp,空間效率高於datetime,用整數保存時間戳通常不方便處理。


如果需要存儲微妙,可以使用bigint存儲。
看到這裡,這道真題是不是就比較容易回答了。

常用SQL語句


1)SQL語句主要分為哪幾類?

數據定義語言DDL(Data Ddefinition Language)CREATE,DROP,ALTER

主要為以上操作 即對邏輯結構等有操作的,其中包括表結構,視圖和索引。

數據查詢語言DQL(Data Query Language)SELECT

這個較為好理解 即查詢操作,以select關鍵字。各種簡單查詢,連接查詢等 都屬於DQL。

數據操縱語言DML(Data Manipulation Language)INSERT,UPDATE,DELETE

主要為以上操作 即對數據進行操作的,對應上面所說的查詢操作 DQL與DML共同構建了多數初級程式設計師常用的增刪改查操作。而查詢是較為特殊的一種 被劃分到DQL中。

數據控制功能DCL(Data Control Language)GRANT,REVOKE,COMMIT,ROLLBACK

主要為以上操作 即對資料庫安全性完整性等有操作的,可以簡單的理解為權限控制等。

2)超鍵、候選鍵、主鍵、外鍵分別是什麼?

超鍵:在關係中能唯一標識元組的屬性集稱為關係模式的超鍵。一個屬性可以為作為一個超鍵,多個屬性組合在一起也可以作為一個超鍵。超鍵包含候選鍵和主鍵。

候選鍵:是最小超鍵,即沒有冗餘元素的超鍵。

主鍵:資料庫表中對儲存數據對象予以唯一和完整標識的數據列或屬性的組合。一個數據列只能有一個主鍵,且主鍵的取值不能缺失,即不能為空值(Null)。

外鍵:在一個表中存在的另一個表的主鍵稱此表的外鍵。

3)SQL 約束有哪幾種?

NOT NULL: 用於控制欄位的內容一定不能為空(NULL)。

UNIQUE: 控制項欄位內容不能重複,一個表允許有多個 Unique 約束。

PRIMARY KEY: 也是用於控制項欄位內容不能重複,但它在一個表只允許出現一個。

FOREIGN KEY: 用於預防破壞表之間連接的動作,也能防止非法數據插入外鍵列,因為它必須是它指向的那個表中的值之一。

CHECK: 用於控制欄位的值範圍。

4)六種關聯查詢
SELECT * FROM A,B(,C)或者SELECT * FROM A CROSS JOIN B (CROSS JOIN C)#沒有任何關聯條件,結果是笛卡爾積,結果集會很大,沒有意義,很少使用內連接(INNER JOIN)SELECT * FROM A,B WHERE A.id=B.id或者SELECT * FROM A INNER JOIN B ON A.id=B.id多表中同時符合某種條件的數據記錄的集合,INNER JOIN可以縮寫為JOIN

內連接分為三類

外連接(LEFT JOIN/RIGHT JOIN)

左外連接:LEFT OUTER JOIN, 以左表為主,先查詢出左表,按照ON後的關聯條件匹配右表,沒有匹配到的用NULL填充,可以簡寫成LEFT JOIN

右外連接:RIGHT OUTER JOIN, 以右表為主,先查詢出右表,按照ON後的關聯條件匹配左表,沒有匹配到的用NULL填充,可以簡寫成RIGHT JOIN

聯合查詢(UNION與UNION ALL)

SELECT * FROM A UNION SELECT * FROM B UNION ...

全連接(FULL JOIN)

SELECT * FROM A LEFT JOIN B ON A.id=B.id UNIONSELECT * FROM A RIGHT JOIN B ON A.id=B.id

5)學習MYSQL推薦書籍


SQL必知必會 (豆瓣)

推薦理由:這本書的特點就在於擺脫了傳統的大段理論,直接教你一些語句的寫法和用法,非常有利於初學者上手

《SQL基礎教程》(豆瓣)


推薦理由:非常好的SQL基礎教材,不掉書袋,脫離現實,慢慢看跟著做絕對沒問題


最後附上菊廠的2分鐘了解雲資料庫MySQL


31個驚豔的數據可視化作品,讓你感受「數據之美」!

怎麼獲得各行業的數據?這30個網站強烈建議收藏!

2021年,做數據分析還有前景嗎?

統計學思維導圖!附下載連結

阿里、招行、華為三家大廠數據分析面經

相關焦點

  • mysql之安裝和遠程登入操作學習總結
    那麼對於我們搞嵌入式的人來說,學習資料庫,我覺得剛開始不要太注重理論化的東西,先去學習一下實操,等對實操達到了一個輕車駕熟的入門(算是簡單操作的入門)之後,那麼這個時候去看理論的東西,就不會太吃力了,你只要根據理論的東西,你有不懂的可以去做實驗,這裡對理論就會掌握的更加熟練(其實說到這裡,可能這是我自己的學習方法,不一定適合你);因為從很多技術群和平時的溝通交流來看,有的時候,特別是現在在這個「浮躁
  • 深入理解MySQL8.0直方圖
    採樣統計的時候InnoDB 默認會選擇 N 個數據頁,統計這些頁面上的不同值,得到一個平均值,然後乘以這個索引的頁面數,就得到了這個索引的基數。而數據表是會持續更新的,索引統計信息也不會固定不變。所以,當變更的數據行數超過 1/M 的時候,會自動觸發重新做一次索引統計。
  • 學習MySQL的select語句
    1,3,5)"使用concat連接查詢的結果$sql="select concat(id,"-",con)  as res from article where id=1"返回 "1-article content"使用locate用法: select locate("hello","hello baby");返回1不存在返回 0
  • MySQL 8.0 正式版 8.0.11 發布:比 MySQL 5.7 快 2 倍
    MySQL 8.0 正式版 8.0.11 已發布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,還帶來了大量的改進和更快的性能!性能:MySQL 8.0 的速度要比 MySQL 5.7 快 2 倍。MySQL 8.0 在以下方面帶來了更好的性能:讀/寫工作負載、IO 密集型工作負載、以及高競爭("hot spot"熱點競爭問題)工作負載。
  • MySQL 8.0.23新特性 - 不可見列
    引用這些列:insert into table1 (id, name, age)        values (0,'mysql', 25),               (0,'kenny', 35),               (0, 'lefred','44'); Query OK, 3 rows affected (0.1573 sec
  • MySQL聊聊SELECT必須知道的基礎知識
    一、前言select語句可以說是mysql中最常用的語句了,除了select還有insert、delete、update等關鍵詞,這些關鍵詞是mysql的保留詞,我們在定義表名,欄位名,變量名的時候不要使用這些保留詞。
  • 06-mysql基礎-mysql中的DQL-子查詢
    每天和小潭一起快樂的學習~    你好,我是在學mysql的小潭。在上一期05-mysql基礎-mysql中的DQL-連接查詢的推文中我們學習了mysql的連接查詢知識,本期我們將繼續學習DQL中的子查詢。
  • 學注會的會計要具備什麼基礎?這些基礎知識一定要知道!
    想要考注會的會計,需要具備什麼樣的基礎才可以順利的通關呢?會計究竟要怎麼學習呢?會計的精髓在哪裡呢?一、一些基礎的會計知識一定要懂一些簡單的會計知識肯定是要懂的,不然非常不好進行下去的!會計的6大要素考生一定要知道,有借必有貸,借貸必相等這些知識點肯定也是要搞清楚的!學習會計本身是一個循序漸進的過程,從基礎的會計知識一直到高深的知識,註冊會計師本身的難度就比較大的,在財會的地位也是非常的重要的,所以考生一定要清楚的了解注會的難度!
  • MYSQL優化 學習筆記
    2、最佳左前綴法則過濾條件要使用索引必須按照索引建立時的順序,依次滿足,一旦跳過某個欄位,索引後面的欄位都無法被使用 多列索引是先按照第一列進行排序,然後在第一列排好序的基礎上再對第二列排序,如果沒有第一列的話,直接訪問第二列,那第二列肯定是無序的,直接訪問後面的列就用不到索引3、索引列上不計算 不在索引列上做任何操作(計算、函數、(自動 or 手動)類型轉換
  • 中間件mysql-proxy的一些細節
    mysql-proxy是官方提供的mysql中間件產品可以實現負載平衡,讀寫分離,failover等,但其不支持大數據量的分庫分表且性能較差。Atlas(是由 Qihoo 360, Web平臺部基礎架構團隊開發維護的一個基於MySQL協議的數據中間層項目。)今天推薦一篇文章,深度分享mysql-proxy的細節。
  • 玩轉Mysql系列 - 第6篇:select查詢基礎篇
    查詢指定的欄位 select 欄位1,欄位2,欄位3 from 表名;如:mysql> drop table if exists test1;Query OK, 0 rows affected (0.01 sec)mysql> create table test1(a int not null comment
  • 英語0基礎,一定要從0開始?
    因為高考的倒計時,仿佛不能匹配你的薄弱基礎所需耗用的時間。「我也不好說,要看你的吸收程度。」老師淡定地說道,眼神耐心且堅定,卻有一絲迷惘。.........很多學生經歷了期末考試,看到了自己慘不忍睹的分數後,想利用好寒/暑假,開啟瘋狂的補課模式。
  • MySql之基礎語法篇
    MySql之基礎語法篇 對於mysql來說,存儲引擎,sql優化,慢sql分析,存儲過程,數據結構,事務,並發,鎖等等,感覺每一部分都可以延伸出來一本書的知識,對於剛剛步入工作的我來說想要深入研究還太過遙遠,只能以後討論了,不過對於我這個剛剛從事計算機行業的人來說,一些基本功還是具備的,敲了這麼長時間的代碼,就在這裡做個簡單的記錄吧!
  • MYSQL資料庫操作案例
    TABLE runoob_tblQuery OK, 0 rows affected (0.8 sec)mysql>MySQL 插入數據MySQL 表中使用 INSERT INTO SQL語句來插入數據。
  • SQL 基礎學習參考資料分享
    信安之路的小白成長階段目前處於 SQL 的基礎學習階段,在每一個學習階段都會分享一些參考資料給大家,即使大家未能成為學習的主力,但是也希望更多想要參與學習的同學跟著這個學習計劃一直前行
  • 沒遇到過這十個MySQL資料庫經典錯誤,你一定不是個好工程師
    學習任何一門技術的同時,其實就是自我修煉的過程。沉下心,嘗試去擁抱數據的世界!在從庫依次執行:mysql> insert into t (b) values (『ddd』);Query OK, 1 row affected (0.01 sec)mysql> stop slave;Query OK, 0 rows affected (0.00 sec)mysql> exitBye[root@node4 bin]# .
  • 新特性解讀 | MySQL 8.0 窗口函數框架用法
    之前在 MySQL 8.0 新特性欄目裡介紹過 8.0 的窗口函數的用法,沒有細化到全部的語法,恰巧今天有客戶追問其中的框架子句用法,寫出來大家一起探討。窗口函數其實就是一個分組窗口內部處理每條記錄的函數,這個窗口也就是之前聚合操作的窗口。
  • Mysql注入導圖-學習篇
    每次以為自己都弄懂了之後都會有新的東西冒出來,需要再次學習,一路走來效率不高,工作量很大。而且隨著知識體系的壯大,很多東西會漸漸忘記。因此萌生了寫一個思維導圖的想法,一來整理自己的思路,防止遺忘。二來,作為一名大二的小學長,希望學弟學妹們在這方面能夠學得更快一些。
  • mysql基礎-mysql中的DQL-常見函數
    每天和小潭一起快樂的學習~    你好,我是在學mysql的小潭。鑑於篇幅原因,小潭將mysql查詢部分的知識點分成同期不同篇的方式進行學習和介紹。該篇中我們將了解mysql中的常見函數。sql語句選中使用F9可快速提交查詢,使用F12可以格式化sql語句。
  • 安裝Mysql報錯:RSA private key file not found
    file not found: /db/mysql5.6/data//private_key.pem.解決方法如下:1.檢查是否安裝openssl$rpm -qa opensslopenssl-1.0.0-20.el6_2.5.x86_642.利用openssl