11MYSQL數據庫基本操作

數據庫的概念和作用

圖1

特殊格式數據文件的集合就是數據庫

圖2

我們網頁看到的數據展示,其實在數據庫里存儲如上面的顯示

數據庫特點簡介

圖3

數據庫分類及特點

圖4

數據庫某年排行榜,可以看到幾種數據庫的排名,關系型數據庫排前

關系型數據庫

通過二維表的方式存儲數據

圖5
圖6

常見如上的關系型數據庫,我們學習MySQL數據庫,免費(商業版低收費),而ORACLE全套部署近百萬(安全性高),SQLite是移動端,嵌入式設備數據庫,可以不聯網運行,最后微軟的SQL Server是收費的而且只能跑在微軟的windows服務器上。MySQL體積小,速度快,成本低,很多中小型企業都在使用。

非關系型數據庫

圖7

使用Key-value方式存儲,也成NoSQL,常見mongoDB,redis

數據庫管理系統

圖8

DBMS數據庫管理系統分3部分,數據庫文件集合,服務端,客戶端,每個功能如上,關系圖如下

圖9
圖10

客戶端給服務端發送語句,必須是其聽得懂的SQL語句

圖11

SQL結構化查詢語言,幾乎適用于所有關系型數據庫,但是某系細節有差異

圖12

SQL語句主要分如上5類,DQL數據查詢,DML數據操作,TPL事務處理,DCL數據控制,DDL數據定義,我們學習重點是DQL,DML,DDL

圖13

上圖又簡介了幾種關系型數據庫,簡單了解下

圖14

關系型數據庫,由多張數據表構成,數據表由多個數據行構成(數據行也叫一條數據記錄)。按列來看,把每個元素成為屬性或者字段(每列數據類型一致)

MYSQL環境搭建

linux安裝,終端sudo apt-get install mysql-server

啟動MySQL,終端sudo server mysql start(如果是重啟,關閉start分別換成restart,stop)

查看進程是否有mysql, 終端ps ajx|grep mysql (利用管道過濾,常常查看是否啟動成功)

圖15

配置環境

圖16

配置文件可以在/etc/mysql/mysql.conf.d下找到文件mysqld.cnf,可以用cat等命令查看

圖17

默認配置如上,暫時不用修改,默認端口3306,ip默認本機ip127.0.0.1

注意啦!以下出現了中坑,本人經查詢解決

坑1

視頻提出安裝mysql-server,其實mysql-client也需要一起安裝,

于是我們需要sudo apt-get install mysql-client給虛擬機安裝上客戶端。

于是我們興沖沖的使用mysql -uroot -p然后輸入密碼,哎?怎么不是視頻中的密碼,也不是網上有人說的為空。

/etc/mysql/debian.cnf.我們可以使用cat查看這個文件,找到password的內容,然后復制,是個很長很惡心的密碼,然后用mysql -uroot -p后粘貼這個密碼,登錄成功后,在mysql shell下,執行如下命令

> use mysql;

>update mysql.user set authentication_string=password('123456') where user='root'

比如想修改密碼為123456,可以使用如上,或者替換字符串'123456'

最后退出,使用sudo service mysql restart就可以使用自定義的簡單代碼登錄了。

坑2

視頻告訴我們可以按照可視化客戶端navicat,這個瀏覽器搜索安裝就行了,我分別給虛擬機和windows都安裝了一個,先說虛擬機問題吧。選擇下載64位Linux版本安裝,

切換到壓縮文件目錄cd xxx

使用tar -zxvf xxx.gz把文件解壓,然后切換到解壓目錄,使用./start_navicat運行安裝,記得要點2次取消,然后出現試用界面,視頻說會出現亂碼,然后就真的出現了,點開菜單欄倒數第3個的最后一個項目,這個就是選項,將字體設置為AR PL UKai ZN,同時也要把字體調大點,關閉,再進入就沒亂碼了。

坑3

我給筆記本和臺式都安裝了navicat客戶端,然后連接虛擬機的mysql,密碼明明是對的,卻發現無法連接,之前的虛擬機上的navicat卻可以連接。

我們進入虛擬機終端客戶端mysql -uroot ?-p

->GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; ? ? ? ? ? ? ? ? ? ? ?(123456根據你的密碼對應上)

->FLUSH PRIVILEGES; (刷新防火墻)

quit或exit退出

打開/etc/mysql/mysql.conf.d/mysqld.cnf,將bind-address=127.0.0.1改為bind-address=0.0.0.0保存

重啟mysql ? ? sudo service mysql restart

然后navicat客戶端就可以連上mysql了

數據庫完整性(了解)

為了保證數據的正確性,要求數據的約束條件

圖18
圖19

記錄識別唯一,主鍵不為空

圖20

域完整性,同一列,數據類型一致,要求非空或默認值

圖21

參照完整性,比如2個表格,一個存的是張三相關,另一個存的是小張相關,如果刪除了張三,小張也應該被刪除

自定義完整性:比如性別只能是‘男’或者‘女’,而不能是其他

圖22

NAVICAT客戶端使用

圖23

連接數據庫

圖24

我們之前已經做過連接了,這里再次介紹下連接的界面,然后連接創建完畢,但是要想連接成功,我們還必須雙擊左側,讓其灰色變綠色,表示真正連接成功

默認情況下會在下面顯示4個數據庫

圖25

創建數據庫

右鍵點擊綠色圖標點擊新建數據庫

圖26

彈出新建窗口

圖27

我們有3個空可以填,第一個數據庫名自己起,但是不要和已有的庫重名,我們起名python,

字符集我們使用utf8,排序規則使用general ci(以后講),點確定數據庫就建立完畢

圖28

數據庫創建完是灰色的,因為我們并沒有打開,雙擊打開,此時數據庫就變成了綠色

圖29

我們在新建的python庫表位置右鍵新建表,出現如下圖

圖30

比如說我們創建一個字段,名id(注意這里字段名不能用中文),類型int,是不是null勾選作為域完整性約束,我們點了鍵那里,會出現一個鑰匙,此時null也會被自動勾選,這時為主鍵約束,比如該id是自增的,我們還會下面勾選自動遞增

圖31

我們選中一行,再加入字段時,按光標↓就可以添加,我們輸入字段名name,會發現自動設置了類型varchar,長度255表示最多該項有255個字符。

圖32

我們點擊保存起名classes,在表下面雙擊就會發現如下圖,即創建了2列的表

圖33

如果我們想修改表,可以使用右鍵-設計表,又回歸到之前的界面

查看數據,我們雙擊表就行

增加數據,我們輸入內容,就可以添加數據,由于id設置了自動添加,所以我們可以不填,填入name和size,想新出現一行數據就按光標↓,id自動出現

圖34

修改數據,雙擊屬性單元格,輸入就行

保存表格,點下面√或者CTRL+S

圖35

刪除數據,點擊減號圖標

圖36

備份數據庫

右鍵點擊數據庫轉儲--結構和數據

圖37

我們存儲到桌面,就會看見python.sql文件

圖38

此時我們可以將文件拷貝給其他工作組同事或者留作備份使用。

如果我們數據庫數據丟失了,比如我們先在navicat上刪除python數據庫,我們可以再新建一個數據庫,但是因為是空的,我們可以右鍵點擊數據庫選擇運行SQL文件

圖39

選擇桌面上的python.sql文件點擊開始,然后需要右鍵關閉數據庫,再雙擊打開,此時會發現之前的數據已經成功添加進來

MYSQL數據類型

圖40
圖41

數值

圖42

整形類型

不同數據類型存儲長度不一樣(常用TINYINT,INT)

TINYINT 1字節 ?-128到127 ? ? ?無符號0-255

SMALLINT 2字節-2**15到2**15-1 ?無符號0到2**16-1

MEDIUMINT 3字節

INT 4字節

BIGINT 8字節

圖43

浮點型

float和double,分別4到8字節,float到小數點后6位,double到16位

定義方法float或者double加(總位數,小數位數) 如float(5,3) 12.345

圖44

定點數

decimal(總位數,小數位)需要精確計算小數時,比如價格等


字符串

圖45

char 255個字符

varchar65535個字節(常用varchar)其他如上圖(第二行應該為字符)

text相關的都是按字節統計

char和varchar區別

比如我們使用char(5)和varchar(5)存儲‘he’,char會使用5個字符空間,而varchar只占用2個字符空間

圖46

text類型,存儲量大

圖47

類型選擇原則

圖48

枚舉類型?

字段名 enum(枚舉值用逗號分隔)

圖49

時間類型

圖50

datetime和timestamp區別,范圍和存儲大小不同

圖51

MYSQL數據庫----登錄和退出命令

圖52

登錄(mysql -uroot -p)

圖53

退出(exit或quit或ctrl+d)

圖54

我們已經登錄了,可以查看版本和當前時間(記得大部分命令開始要結尾;)

圖55

數據庫操作

圖56

create datebase 數據庫名; ? ? ? ? ? 創建數據庫

drop?datebase 數據庫名 ; ? ? ? ? ?刪除數據庫

use 數據庫名; ? ? ? ? ? 切換數據庫

select database(); ? ?查看當前選擇的數據庫

(MYSQL命令大小寫不敏感)

圖57

上圖為剛登陸,查詢數據庫,因為沒有選擇,提示NULL

圖58

顯示所有數據庫,show databases;

圖59

我們使用use python;切換到python數據庫,這時再select database();就可以看到當前選擇了python數據庫

圖60

我們嘗試創建一個數據庫,比如python_db名字,創建成功,會顯示Query OK。否則會出現一行提示,比如我們輸錯命令就會上圖后面的提示。

我們也可以用show create database 數據庫名 ?(可以卡看到數據庫創建過程,數據庫必須已存在)

圖61

上圖我們會發現python_db數據庫,過程語句和編碼及排序,我們會發現編碼不是utf8而是utf8mb4,而且排序也不是我們用的utf8_general_ci

圖62

我們可以指定編碼創建數據庫create database python_db1 charset=utf8;

python_db1是我們給新數據庫起的名字,可以看出編碼已經被設置好,我們一般都設置為utf8否則你打開就是亂碼

刪除數據庫? drop database 數據庫名,刪除要慎重(找不回來)!!!

表結構創建

圖63

為了把數據保存到數據庫,我們需要表格,上節學了創建數據庫,這節學習創建表

圖64

比如與我們打開進入到數據庫python_db1,然后先檢查有哪些表show tables;因為沒創建過,所以是空的

圖65

創建表格create table classes(

?id int unsigned primary key auto increment,

name varchar(10) not null,

num tinyint unsigned not null

);

語句分析:create table 表格名();基本sql創建表格語句,在括號里添加語句字段,字段間用逗號分隔,最后一個結尾不用逗號。字段用字段名 字段類型(之前講過)約束條件

比如第一個id我們設置為整數,想要是無符號的用unsigned跟在int后面,約束條件,主鍵約束(唯一非空),遞增(auto_increment)

第二個字段name,我們使用varchar,設定最長10個字符,約束非空

第三個字段num,使用tinyint,約束非空

整體注意結構和語法寫法!

應用上述語句,就實現了創建表格

圖66

查看表結構

圖67

desk 表名; ? ? ? ? ? ? ? ? ? ? ? ? 可以看到表結構和設置,如上圖

圖68

我們接著再創建一個學生表,結構要求如上

alter database my_db character set 'gbk';(這里需要注意的是,我們輸入漢字內容,需要給數據庫指定默認編碼gbk),否則enum那里會報錯,修改完畢后OK,記得每次有中文項目的內容,修改數據庫編碼

表格創建成功海口可以用show create table 表名 來顯示創建過程

圖69

我們會發現結果是比較亂的,這是因為嘗試將所有內容一行寫下,但是屏幕不夠長。。。

我們可以給命令改成show create table 表名 \G;效果如下

圖70

表結構修改

圖71

增加字段

圖72

alter table 表名 add 列名 類型;

圖73

比如我們給students條件birthday列,語句alter table students add birthday datetime;輸入完成功可以desc查看到添加了birthday列

圖74

重命名字段

字段已有,但是命名類型或者約束想修改

圖75

alter table 表名 change 原名 新名 新類型約束;

比如我開門把birthday改成birth而且要求非空,使用

alter table students change birthday birth datetime not null;

同樣修改后可以查看下

修改字段類型和約束

不修改命名,只修改類型和約束(比上一個功能簡單點)

圖76

alter table 表名 modify 列名 類型及約束;

比如我們把birth類型換成date使用

alter table students modify birth date not null;(需要注意的是之前的約束如果修改沒有寫進去就是默認,不會繼承之前的,上面的change也是,所以約束都要重寫)


刪除字段

圖77

alter table 表名 drop 列名;

如給students刪掉birth使用alter table students drop birth;

desc刪除后發現drop自段沒有了

刪除表

圖78

drop table 表名; ??

所有表的增刪改查要嚴格規劃,謹慎修改

表數據的增刪查改

圖79

本節學習表數據的創建,更新,讀取,刪除

圖80

查詢所有列 select * from 表名;

圖81

之前沒有添加數據,所以我們沒有得到結果

插入數據insert into 表名 values(字段值用逗號分割,字符串要加引號!!!);

圖82

添加數據后就可以查看到數據了

圖83

我們可以試試主鍵效果,如果再插入重復的id,會提示重復錯誤

圖84

我們之前刪了students,再創建出來,這回添加一行數據如下圖1行插入,然后我們知道有些值可以非空的,我們想給指定列插入內容,可以使用下圖最后一行代碼,

圖85

多行插入?insert students values()()()();插入幾行用幾個括號

圖86

修改數據

圖87

我們嘗試給表students的age列賦值age=38,使用update students set age=38;

圖88

設置后會發現age列的所有數據都被改成了38

圖89

我們想只改一列,比如給第二行age設成88,使用update students set age=88 where name='司馬狗剩';結果如下

我們也可以設置多列修改,所以一般模式為

update 表名 set 列名1=參數1, 列名2=參數2 ...where 屬性=xxx;(注意set屬性逗號分割)

圖90

查詢數據

我們之前學了查詢表格select * from 表名;現在我們也可以加條件,比如查詢students中name=‘司馬狗剩’的數據,效果如上圖。

圖91

我們還可以進一步拓展,想查看某些列數據,如上(同理即可查詢where指定條件的某些列數據)

圖92

我們想顯示中文列名,可以使用select 列名 as‘中文列名’ from 表名;效果如上(其實as也可以省略)

刪除

圖93

delete from 表名 where 條件約束;這種刪除后數據不可恢復,是物理刪除

我們可以使用邏輯刪除,用alter table students add is_delete bit default 0;給表格設置默認為0,

當我們想做邏輯刪除,使用update students set is_delete 1 where id=3;給指定數據設置刪除;

這樣我們就可以通過where is_delete=0;來過濾掉數據(但是數據庫還有這條數據)


數據庫備份和恢復

我們之前用過navicat實現數據庫備份轉儲,導入。現在我們用命令行來實現數據備份和恢復。

首先,數據庫備份不用進mysql環境,進入終端界面輸入如下命令即可

mysqldump -uroot -p python_db1>python_db1.sql就會在命令行當前目錄導出一個python_db1.sql文件(得輸入密碼,因為-p后面沒寫),我們可以ls -l查看到,我們備份了數據庫,就可以刪除數據庫再導入,登陸mysql, mysql -uroot -p, ?然后drop database python_db1;刪除成功后,我們同樣需要創建一個數據庫以備導入,使用create database python_db charset=utf8;創建。然后我們exit退出mysql到終端,輸入mysql -uroot -p python_db <python_db1.sql然后輸入密碼,就可以實現數據庫的導入


最后對本章的內容說下總結,命令很多,需要多用多記!!!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,071評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,409評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,569評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,360評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,895評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,123評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,643評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,559評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,742評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,981評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,363評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,622評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,354評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,707評論 2 370