数据库之mysql
準備
ubantu系統,navicat for mysql軟件
引言
mysql是基于c/s通信架構設計的,用戶通過客戶端和服務器端進行交互,服務器端對數據庫進行操作。簡單地來說,我們把sql語句傳達給客戶端,客戶端把sql語句翻譯成服務器端可以理解和可以執行的指令,服務器端按照這些指令對數據庫進行查詢操作,把操作結果傳給客戶端,客戶端再把結果翻譯成用戶也就是我們可以看懂的內容。c/s架構的好處之一就是用戶不需要和服務器端打交道,也就是意味著用戶不需要學習復雜的服務器端命令,只需要學習簡單的sql語句以及客戶端命令即可,客戶端會幫我們進行指令的翻譯等工作。mysql的c/s架構是一個服務器端可對應多個客戶端,對于mysql怎么區分不同用戶這里暫不需要了解。
mysql是關系型數據庫的一種,所以我們在設計數據庫的時候一定要抓住實物之間的關系。我們以后設計網站的時候,不同的業務板塊都應該有一個單獨的架構或者數據庫,我們可以把單獨的板塊理解為單獨的網站。
安裝mysql
命令:sudo apt install mysql-server
配置mysql
修改/etc/mysql/my.cnf文件,在文件末尾加上下述幾條語句([]表示組)
[client]
default-character-set = utf8 ? ? ? ? ? # 指定客戶端編碼,因為默認的latin1不支持中文,所以我們在這里選擇utf8
?
[mysqld]
character-set-server = utf8 ? ? ? ? ? ?# 指定服務器端編碼,通常設定為與客戶端編碼一致
collation-server = utf8_general_ci ? ? ? ? # 同一種編碼也有不同的排序規則
bind_address = 0.0.0.0 ? ? ? ? ? ? ? ? ? ? # 第一層守護,監聽所有IP
配置文件更改時應該先做備份,更改完成之后需要重新啟動來重新讀取配置文件
設置完成后查看編碼信息與排序信息
啟動mysql
命令:sudo service mysql restart 或者 ?sudo systemctl restart mysql
注意:mysql的服務進程名是mysql,所以命令不是sudo service mysqld restart,我們通常不是直接使用mysqld的程序名來啟動程序,因為這個程序可能需要一些復雜的參數,我們借助systemctl 與 service 可以輕松處理相關命令
navicat連接mysql
mysql客戶端輸入下述三條命令:
CREATE USER 'jack'@'%' IDENTIFIED BY '123456' ? # jack是用戶名,%是任意主機,123456是密碼
也可以直接用下面兩條命令:
建庫
查看已有數據庫:SHOW DATABASES;
創建數據庫: CREATE DATABASE `test` charset utf8(character set utf8);
查看數據庫創建過程: SHOW CREATE DATABASE `test`;
刪除數據庫:DROP DATABASE `test`
修改數據庫編碼:ALTER DATABASE `test` charset utf8
查看數據庫版本號:status/select version()
備份與還原數據庫
建表
數據庫中的表在用戶層相當于二維的excel表格
查看表的創建過程:SHOW CREATE TABLE `mysql`.`user`;
創建表:CREATE TABLE `test`.`user`(column1 type1 option, colum2 type2 option);
查看數據庫表(已選定數據庫情況下):SHOW TABLES;
移動并重名數據庫表:RENAME TABLE `python`.`user` TO `test`.`user`
刪除表:DROP TABLE `test`
注:
- 創建表的最后一行不要加逗號;排序 collate=utf8_general_ci不區分大小寫,查詢快 ?collate=utf8_genaral_bin區 ? ?分大小寫,排序速度慢;每個表度需要一個primary key(主鍵唯一且為非空);char()分配固定長度, ? ?varchar()是最大長度可變的,性能相對較差
- 數據庫引擎:1、myisam ? 非事務型,查詢快 ?2、innodb ? 事務型,修改快,默認引擎(功能強大)
- 數據庫表、列和數據庫一樣,可以單獨地設置字符集與排序規則
- 不指定列的default時默認會default null。
- 關于字符集編碼如果不指定就存在繼承現象:列尋找表的編碼,表尋找庫的編碼,庫尋找配置文件編碼
- 數據庫的每一個字段都必須有固定類型
- mysql的其中一個規則是名字(字段名也是名字)要加反引號
- ? ?\c ?取消命令(cancle) ? ?\G?把列數據逐行顯示
- ? ?主鍵唯一且非空,但是唯一且非空不一定是主鍵
- ? ?建表有個套路就是用沒有實際含義的id當作主鍵
- ? ?注冊的時候哪些字段可以為空,哪些可以為空根據實際需求來定
- ? ?AUTO_INCREMENT 需要和INT結合使用,有了AUTO_INCREMENT可以不指定id進行插入
- ? ?只有ALTER、RENAME、CREATE等關鍵字要接DATABASE 以及TABLE
- ? ?實體之間的關系分為三種:一對一;一對多;多對多。區分這三種關系可以通過畫圖來說明。
- ? ?一對多:使用外鍵約束來實現
- ? ?一對一:使用外鍵 + UNIQUE KEY來實現
- ? ?多對多:使用外鍵 + 第三方表來實現
表信息
數據類型
MySQL支持多種數據類型,主要有數值類型、日期/時間類型和字符串類型。
YEAR的日期格式是YYYY, TIME的日期格式是HH:MM:SS, DATE的日期格式是YYYY-MM-DD, DATETIME的日期格式是YYYY-MM-DD HH:MM:SS,TIMESTAMP的日期格式是YYYY-MM-DD HH:MM:SS。
字符串類型括號里的參數意義就是字節數
鍵和索引
mysql中可以把鍵就理解為索引,索引就是為某些列,花費額外的空間,來維持一個高效的數據結構,加快查找速度。注:加速只對指定的列有效
功能鍵(約束鍵):1、主鍵 ? ? 2、唯一鍵 ? ? ?3、外鍵
? ?非功能鍵(索引)
記錄(行)之增加
記錄(行)之刪除
注:通常在刪除之前,我們要注意我們的WHERE,同時,我們建議在刪除前,使用相同的WHERE的SELECT先查詢一遍
記錄(行)之改
UPDATE?`users` SET `name`='jack' WHERE pattern
注:通常在刪除之前,我們要注意我們的WHERE,同時,我們建議在刪除前,使用相同的WHERE的SELECT先查詢一遍
記錄(行)之查
注:分組查詢只有和聚合函數結合使用才有意義
多表查詢
- 內聯接(交叉連接)
SELECT `s_name`, `c_flower`? FROM `classes`? ?INNER JOIN `students`?ON `students`.`c_id` = `classes`.`c_id`?WHERE `students`.`c_id` = 9;
注:on是連接條件,where是篩選條件。也就是說,ON用來連接出有意義數據行的條件,WHERE是已經連接了以后,再篩選出當時有需要的數據
- 外連接(左連接與右連接)
SELECT * FROM?FROM?`classes`? ?LEFT?JOIN?`students`?ON?`students`.`c_id`?=?`classes`.`c_id`
注:左連接以左表為基準,右連接以右表為基準。區別于內連接的是外連接必須要用ON連接條件
?
?
?
?
?
?
?
轉載于:https://www.cnblogs.com/longyunfeigu/p/6753061.html
總結
- 上一篇: 业务活动图
- 下一篇: linux cmake编译源码,linu