一.基礎部分 1.資料庫是什麼 之前所學,數據要永久保留,比如用戶註冊的用戶信息,都是保存於文件,而文件只能存在於某一臺機器上. 如果我們不考慮從文件中讀取數據的效率問題,並且假設我們的程式所有的組件都運行在一臺機器上,name用文件存取數據,並沒有問題. 但需要考慮的問題是:程式的執行效率依賴於承 ...
一.基礎部分
1.資料庫是什麼
之前所學,數據要永久保留,比如用戶註冊的用戶信息,都是保存於文件,而文件只能存在於某一臺機器上.
如果我們不考慮從文件中讀取數據的效率問題,並且假設我們的程式所有的組件都運行在一臺機器上,name用文件存取數據,並沒有問題.
但需要考慮的問題是:程式的執行效率依賴於承載它的硬體,而一臺電腦機器的性能總歸是有限的,受限於目前的硬體水平,垂直擴展是由極限的.於是我們只能通過水平擴展來增強我們系統的整體性能,這就需要我們將程式的各個組件分佈於多台機器去執行.
需要註意的是,雖然我們將程式的各個組件分佈到各台電腦,但各組件仍然是一個整體,言外之意,所有組件的數據還是要共用的.但每台機器上的組件都只能操作本機的文件,這就導致了數據必然不一致.
於是我們想到了將數據與應用程式分離:把文件存放於一臺機器,然後將多台機器通過網路去訪問這台機器上的文件,即共用這台機器上的文件,共用分則意味著競爭,會發生數據不安全,需要加鎖處理...
為了遠程訪問並處理這台共用機器上的文件,我們必須為我們的程式額外寫一段代碼,完成如下功能:
#1.遠程連接 #2.打開文件 #3.讀寫(加鎖) #4.關閉文件
我們寫任何程式都需要這段代碼,於是我們提取這段代碼,寫成了一個專門的處理軟體,這就是MySQL資料庫管理軟體的由來,但是MySQL解決的不僅僅是數據共用的問題,還有查詢效率,安全性等一系列問題,總之,把程式員從數據管理中解脫出來,專註於自己的程式邏輯的編寫.
2.資料庫概述.
❤什麼是數據(Data)
數據:描述事物的符號記錄,描述事物的符號既可以是數字,也可以是文字,圖片,圖像,聲音,語言等,數據由多種表現形式,他們都可以經過數字化存入電腦
在電腦中描述一個事物,就需要抽取這一事物的典型特征,組成一條記錄,就相當於文件里的一行內容,如:
1 corn 21 河南焦作
單純的一條記錄並沒有任何意義,如果我們按逗號作為分隔以此定義各個欄位的意思.
id name age address #欄位 1 corn 21 河南焦作 #記錄
如果這樣表示的話就瞭解一個人的信息了,讓人一看就清楚了
❤什麼是資料庫(DataBase,簡稱OB)
資料庫,顧名思義就是存放數據的倉庫,只不過這個倉庫是在電腦存儲設備上.
資料庫中的數據按一定比例模型組織,描述和儲存,具有較小的冗餘度,較高的數據獨立性和易擴展性,並可為各種用戶共用
❤什麼是資料庫管理系統(DataBase Management System 簡稱DBMS)
在瞭解Data和DB的概念後,如何科學的組織和存儲數據,如何高效的獲取和維護數據成了關鍵,
這就用到了一個系統軟體----資料庫管理系統
如MySQL,Oracle,SQLite,Access,MS SQL Server
MySQL主要用於大型門戶,例如搜狗,新浪等,它主要的優勢是開放源代碼,因為開放源代碼這個資料庫是免費的,它現在是甲骨文公司的產品.
Orgcle主要用於銀行,鐵路,飛機場等.該資料庫功能強大,軟體費用高,也是甲骨文公司的產品.
SQL Server是微軟公司的產品,主要用於大中型企業,如聯想,方正等.
資料庫說白了就是文件夾
資料庫管理系統就是一個軟體
資料庫伺服器:就是對專門提供數據的一個機器
❤資料庫伺服器,資料庫管理系統,標語記錄的關係(重點)
表:student,school,class_list(即文件)
資料庫:lzsh_info(即文件夾)
資料庫管理系統:如mysql(是一個軟體)
資料庫伺服器:一臺電腦(對記憶體要求比較高)
總結:
資料庫伺服器---運行--->資料庫管理軟體
資料庫管理軟體--->管理--->資料庫
資料庫---組織--->表,即文件夾---組織--->文件
表---存放--->多條記錄,即文件---存放--->多行內容
❤資料庫管理技術的發展歷程(瞭解)
1.人工管理階段
2.文件系統階段
3.數據系統階段
3.MySQL介紹
MySQL是一個關係型資料庫管理系統,MySQL 最流行的關係型資料庫管理系統,在 WEB 應用方面MySQL是最好的 RDBMS (Relational Database Management System,關係資料庫管理系統) 應用軟體之一。
mysql是什麼?
mysql就是一個socekt服務端
客戶端軟體
mysql自帶
python模塊
其他類型的資料庫?
sqllite,db2,oracle,access,sql server,MySQL
分兩大類:
關係型:上面這一坨,註意:sql語句通用
非關係型:mongodb,redis,memcache
4.下載安裝
下載路徑:https://dev.mysql.com/downloads/mysql/
1.首先下載下來安裝包,然後把下載下來的壓縮包解壓到你要存放的路徑
2.然後設置環境變數。例如我的存放在E盤了
設置環境變數:path--E:\mysql-5.7.19-winx64\bin;
3.mysqld --initialize-insecure 初始化 (一初始化就產生了一個data的包)
4.mysqld 啟動mysql
5.tasklist | findstr mysql #查看mysql是否啟動
6.mysql -uroot -p 無密碼登錄
7.mysqladmin -uroot password 123 設置密碼登錄
8.quit 退出
9.windows 系統下幹掉任務 tskill mysqld
註意:.當我們每次用mysql啟動的時候,閑的麻煩,那麼我們把它做成一個系統服務
就用mysqld --install
當在搜索裡面輸入services.msc就可以看到一個MYSQL了
註冊成服務之後,以後再啟動和關閉MySQL服務時,僅需執行如下命令:
# 啟動MySQL服務 net start mysql # 關閉MySQL服務 net stop mysql
忘記密碼了怎麼辦?
破解密碼的兩種方式
1.乾死mysql(註意:以什麼方式啟動的就要以什麼方式吧它幹掉)
2.在cmd中啟動:mysqld --skip-grant-tables (跳過所有的授權表)
3.在cmd中登錄:mysql
4.輸入兩條命令:
update mysql.user set authentication_string = password('123') where user = 'root' and host = 'localhost'
flush privileges 重新刷新許可權
5.tskill mysqld 幹掉任務
6.正常啟動mysql
7.mysql -uroot -p123
破解密碼二 (僅限於剛剛安裝在資料庫的時候,如果對你有用的一堆數據已經存在了,就不要用這種方法,就得用第一種)
1.在mysql的解壓目錄下新建一個my.ini配置文件
那麼在my.ini配置文件里寫上
在ini配置文件中註釋有兩種#或者;
[mysql]
skip-grant-tables (開頭的--就不用要了)如果啟動了就先關了,然後重新啟動一下,登錄後,my.ini就生效了
basedir = E:\mysql-5.7.19-winx64
datadir = D:\6_data #如果data指定要保存數據的目錄,一定要記得初始化 mysqld --initialize-insecure
#完了吧原先的那個數據data幹掉。
4. 在windows下,為mysql服務指定配置文件
#在mysql的解壓目錄下,新建my.ini,然後配置 #1. 在執行mysqld命令時,下列配置會生效,即mysql服務啟動時生效 [mysqld] ;skip-grant-tables port=3306 character_set_server=utf8 #解壓的目錄 basedir=E:\mysql-5.7.19-winx64 #data目錄 datadir=E:\my_data #在mysqld --initialize時,就會將初始數據存入此處指定的目錄,在初始化之後,啟動mysql時,就會去這個目錄里找數據 #2. 針對客戶端命令的全局配置,當mysql客戶端命令執行時,下列配置生效 [client] port=3306 default-character-set=utf8 user=root password=123456 #3. 只針對mysql這個客戶端的配置,2中的是全局配置,而此處的則是只針對mysql這個命令的局部配置 [mysql] ;port=3306 ;default-character-set=utf8 user=hiayan password=123456
二.初識SQL語言
SQL(Structured Query Language 即結構化查詢語言)
SQL語言主要用於存取數據、查詢數據、更新數據和管理關係資料庫系統,SQL語言由IBM開發。SQL語言分為3種類型:
DDL語句 資料庫定義語言: 資料庫、表、視圖、索引、存儲過程,例如CREATE DROP ALTER
DML語句 資料庫操縱語言: 插入數據INSERT、刪除數據DELETE、更新數據UPDATE、查詢數據SELECT
DCL語句 資料庫控制語言: 例如控制用戶的訪問許可權GRANT、REVOKE
三.系統資料庫
SQL(Structured Query Language 即結構化查詢語言)
SQL語言主要用於存取數據、查詢數據、更新數據和管理關係資料庫系統,SQL語言由IBM開發。SQL語言分為3種類型:
DDL語句 資料庫定義語言: 資料庫、表、視圖、索引、存儲過程,例如CREATE DROP ALTER
DML語句 資料庫操縱語言: 插入數據INSERT、刪除數據DELETE、更新數據UPDATE、查詢數據SELECT
DCL語句 資料庫控制語言: 例如控制用戶的訪問許可權GRANT、REVOKE
四.創建資料庫
資料庫命名規範
可以由字母、數字、下劃線、@、#、$
區分大小寫
唯一性
不能使用關鍵字如 create select
不能單獨使用數字
最長128位
創建資料庫
create database db1
五.資料庫相關操作
資料庫的相關操作 註意:資料庫就相當於文件夾 表就相當於文件 資料庫的命名規則: 一.資料庫的增刪改查(sql語句) 增:create database db1; 刪:drop database db1; 改:alter database db1 charset utf8 查:show databases;#查看所有的資料庫 show create database db1;查看指定的資料庫 設置預設的utf8,在配置文件中:寫上character_set_server = utf8 use db2 #代表你滑鼠雙擊切換目錄 select database() #查看你當前在哪個文件夾 二.表的增刪改查 增:create table t1(id int ,name char); (t1.frm 表結構 ,t1.ibd 表數據) 刪:drop table t1; 改: 插入數據:insert into test(id,name) values(1,'x') 不寫給誰傳值就指定都傳,而且還是按照位置傳 查:show tables; #查看所有表 show create table t1;#查看指定的表 select * from t1 #查看表數據 select id,name from t1 #查看表數據 engine = InnoDB 表的存儲引擎是InnoDB
六.什麼是存儲引擎
存儲引擎說白了就是如何存儲數據、如何為存儲的數據建立索引和如何更新、查詢數據等技術的實現方
法。因為在關係資料庫中數據的存儲是以表的形式存儲的,所以存儲引擎也可以稱為表類型(即存儲和操作此表的類型)
SQL 解析器、SQL 優化器、緩衝池、存儲引擎等組件在每個資料庫中都存在,但不是每 個資料庫都有這麼多存儲引擎。MySQL 的插件式存儲引擎可以讓存儲引擎層的開發人員設 計他們希望的存儲層,例如,有的應用需要滿足事務的要求,有的應用則不需要對事務有這 麽強的要求 ;有的希望數據能持久存儲,有的只希望放在記憶體中,臨時並快速地提供對數據 的查詢
一種類型表明的是一種存儲方式
存儲引擎:就是表的類型,不同的類型就會對應不同的處理機制去處理他
事務:就是要麼同時成功,要麼同時不成功
使用存儲引擎
方法1:建表時指定
存儲引擎 1.create table t1(id int) engine = innodb 會出現2個文件 2.create table t2(id int) engine = myisam 會出現3個文件(速度比上面的快),但是我們還是用innodb存儲 3.create table t3(id int) engine = memory 只有表結構沒有表數據,是創建到記憶體中的 4.create table t4(id int) engine = blackhole 黑洞,吃數據(數據存進去就沒有了,存進去就沒有了)
方法2:在配置文件中指定預設的存儲引擎
/etc/my.cnf [mysqld] default-storage-engine=INNODB innodb_file_per_table=1
註:
1.如果你在cmd中輸入命令的時候,輸錯了用\c跳出來
2.\s查看配置信息
七.操作文件夾(庫)
增:create database db1 charset utf8; 刪:drop database db1; 改:alter database db1 charset gbk; 查:show databases; #查看所有的資料庫 show create database db1; #查看db1資料庫
八.操作文件(表)
切換到文件夾下:use db1 增:create table t1(id int,name char(10)) engine=innodb; 刪:drop table t1; 改:alter table t1 add age int; alter table t1 modify name char(12); 查:show tables; #查看所有表 show create table t1; #查看t1表 desc t1;#查看表結構 show create table t1\G; #查看表詳細結構,可加\G select * from t1; #查看所有的表數據
九.操作文件的一行內容(記錄)
增:insert into db1.t1 values(1,'haiyan'),(2,'yaling'),(3,'xiaoxiao'); #如果t1不給參數,預設按照位置參數依次傳參 刪:delete from t1 where id = 2; #對於清空記錄有兩種方式,但是推薦後者 delete from t1; truncate t1; #當數據量比較大的情況下,使用這種方式,刪除速度快 改:update t1 set name = 'SB' where id=3; update t1 set name= 'SB' where name = 'xiaoxiao'; alter table t7 modify id int primary key auto_increment; 修改id為主鍵並且自增 查:select * from t1; #查看t1里所有的數據 select name from t1; #查看t1里所有的name select id,name from t1; #查看t1里所有的id,name
十,自增id方法
create table t5(id int primary key auto_increment,name char(10)); #create table t4(id int not null unique auto_increment,name char(10)); (不空且是唯一的)#這個和上面的是一回事 insert into xx(name) values ('corn1'), ('corn2'), ('corn3'), ('corn4'), ('corn5');
十一.拷貝表結構
create table t7(id int,name char(10)); create table t8 select * from t7; #拷貝表結果(如果有數據就把數據一起拷貝了) create table t8 select * from t5 where 1=2; #拷貝表結構,不拷貝表數據(條件為假時,查不到任何記錄) alter table t7 modify id int primary key auto_increment; 修改id為主鍵並且自增 insert into t7(name) values ('alex1'), ('alex1'), ('alex1'), ('alex1');
6.delete from t7 where id = 1; #刪記錄(只是刪除一行當id=1的時候) 7.update t7 set name = '';#修改欄位對應的值
修改id為主鍵並且遞增
十二.創建賬號
8.select user()#查看當前用戶 select * from mysql.user; 查看所有的用戶 9.創建賬號 identifity create user 'haiyan'@'localhost' identified by '147852' # 名為haiyan的本機賬號 create user 'alex'@'%' identified by '123' #代表只要ip地址能拼通,那麼所有的用戶都可以遠程登錄alex create user 'susan'@'192.168.20.%' identified by '123' #創建遠程賬號,只要是192.168.20.?開頭的ip都可以登錄susan #如果你要遠程登錄alex的賬戶,那麼客戶端得這樣登錄 :mysql -h192.168.20.97 -ualex -p123
十三.資料庫的許可權
#insert ,select ,update,delete #有這麼幾個可以設置許可權的操作,那麼我們先以select為例吧。 分四個級別: 級別1:對所有的庫,下的所有的表,下的所有的欄位 '''*.*代表所有的庫下的所有的表''' 同意select許可權開放,開放的是*.*的select許可權開放給用戶 grant select on *.* to 'zhang'@'localhost' identified by '123'; #讓創建用戶的時候賦予許可權 級別2:對db1庫,下的所有的表,下的所有的欄位 grant select on db1.* to 'wang'@'localhost' identified by '123'; 級別3:對錶db1.t1,下的多有欄位 grant select on db1.t1 to 'li'@'localhost' identified by '123'; 級別4:對錶db1.t1,下的id,name,欄位 grant select (id ,name) on db1.t1 to 'zhao'@'localhost' identifitied by '123'; grant select (id ,name),update(name) on db1.t1 to 'zhao'@'localhost' identifitied by '123'; 修改完許可權後要記得刷新許可權 flush privileges; 刪除許可權: revoke select on *.* from 'zhang'@'localhost' revoke select on db1.* from 'wang'@'localhost' revoke select on db1.t1 from 'li'@'localhost' revoke select (id ,name),update(name) on db1.t1 from 'zhao'@'localhost'
1.創建本地用戶並賦予許可權
用戶本地登錄,就無需IP地址了
2.創建用戶只要Ip能配通,所有的用戶都能登錄
客戶登錄
十四.解決亂碼問題
#1. 修改配置文件 [mysqld] default-character-set=utf8 [client] default-character-set=utf8 [mysql] default-character-set=utf8 #mysql5.5以上:修改方式有所改動 [mysqld] character-set-server=utf8 collation-server=utf8_general_ci [client] default-character-set=utf8 [mysql] default-character-set=utf8 #2. 重啟服務 #3. 查看修改結果: \s show variables like '%char%'#查看編碼