天天看點

Mysql必知必會學習筆記(一)

    今天開始學習mysql,有一位老師推薦一本經典的入門書籍《MySQL必知必會》,讓我把這本書通讀幾遍,就能對資料庫有個很好的入門了。網上有文字版,感興趣的小夥伴可以找來閱讀。

書封面長這樣:

Mysql必知必會學習筆記(一)

資料庫概念的簡要介紹

資料庫(database)儲存有組織的資料的容器(通常是一個檔案或一組檔案)

容易混淆的地方資料庫軟體與資料庫:

資料庫軟體應稱為DBMS(資料庫管理系統)。資料庫是通過DBMS建立和操縱的容器。資料庫可以是儲存在硬裝置上的檔案,但也可以不是。

     我們經常通過各種資料庫連接配接工具比如Navicat for mysql(這個好評廣泛)、mysql workbench(這個是官方提供的,用不習慣)等,在程式設計語言裡,比如python(我隻會這一門),可以安裝pymysql子產品,調用相關方法來通路資料庫。也可以通過互動界面來通路比如下面這樣:

不過排版就不怎麼友好了,以前在一個項目上,客戶為了保證生産環境資料安全,不讓安裝連接配接工具,我們操作資料庫隻能通過互動界面,頭都大了。

PS C:\Users\Administrator> mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.7.20-log MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type \'help;\' or \'\h\' for help. Type \'\c\' to clear the current input statement.

mysql> show databases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| learn_scrapy        |
| love_learning       |
| mysql               |
| mysql_bi_zhi_bi_hui |
| performance_schema  |
| sakila              |
| sys                 |
| world               |
| zabbix              |
+---------------------+
10 rows in set (0.00 sec)

mysql>      

表(table) 某種特定類型資料的結構化清單。

存儲在表中的資料是一種類型的資料或一個清單。決不應該将顧客的清單與訂單的清單存儲在同一個資料庫表中。這樣做将使以後的檢索和通路很困難。應該建立兩個表,每個清單一個表。

資料庫中的每個表都有一個名字,用來辨別自己。此名字是唯一的,這表示資料庫中沒有其他表具有相同的名字。

模式(schema) 關于資料庫和表的布局及特性的資訊。

描述表的這組資訊就是所謂的模式,模式可以用來描述資料庫中特定的表以及整個資料庫(和其中表的關系)

列(column) 表中的一個字段。所有表都是由一個或多個列組成的。

了解列的最好辦法是将資料庫表想象為一個網格。網格中每一列存儲着一條特定的資訊。例如,在顧客表中,一個列存儲着顧客編号,另一個列存儲着顧客名,而位址、城市、州以及郵政編碼全都存儲在各自的列中。

資料類型(datatype) 所容許的資料的類型。每個表列都有相應的資料類型,它限制(或容許)該列中存儲的資料。資料類型限制可存儲在列中的資料種類(例如,防止在數值字段中錄入字元值)。資料類型還幫助正确地排序資料,并在優化磁盤使用方面起重要的作用。

行(row) 表中的一個記錄。主鍵(primary key)一一列(或一組列),其值能夠唯一區分表中每個行。

唯一辨別表中每行的這個列(或這組列)稱為主鍵。主鍵用來表示一個特定的行。沒有主鍵,更新或删除表中特定行很困難,因為沒有安全的方法保證隻涉及相關的行。

表中的任何列都可以作為主鍵,隻要它滿足以下條件:

 任意兩行都不具有相同的主鍵值;

 每個行都必須具有一個主鍵值(主鍵列不允許NULL值)。

應該總是定義主鍵 雖然并不總是都需要主鍵,但大多數資料庫設計人員都應保證他們建立的每個表具有一個主鍵,以便于以後的資料操縱和管理。

主鍵通常定義在表的一列上,但這并不是必需的,也可以一起使用多個列作為主鍵。在使用多列作為主鍵時,上述條件必須應用到構成主鍵的所有列,所有列值的組合必須是唯一的(但單個列的值可以不唯一)。

主鍵的最好習慣 除MySQL強制實施的規則外,應該堅持的幾個普遍認可的最好習慣為:

 不更新主鍵列中的值;

 不重用主鍵列的值;

 不在主鍵列中使用可能會更改的值。(例如,如果使用一個名字作為主鍵以辨別某個供應商,當該供應商合并和更改其名字時,必須更改這個主鍵。)

SQL(發音為字母S-Q-L或sequel)是結構化查詢語言(Structured QueryLanguage)的縮寫。SQL是一種專門用來與資料庫通信的語言

SQL有如下的優點。

 SQL不是某個特定資料庫供應商專有的語言。幾乎所有重要的DBMS都支援SQL,是以,學習此語言使你幾乎能與所有資料庫打交道。

 SQL簡單易學。它的語句全都是由描述性很強的英語單詞組成,而且這些單詞的數目不多。

 SQL盡管看上去很簡單,但它實際上是一種強有力的語言,靈活使用其語言元素,可以進行非常複雜和進階的資料庫操作。