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