MySql的前戲
在學習Mysql以前,咱們先來想一下一開始作的登陸註冊案例,當時咱們把用戶的信息保存到一個文件中:css
#用戶名 |密碼
root|123321 alex|123123
上面文件內容的規則是我本身定義的,你要想用我這個程序,必須按照個人規則去執行,但凡不是這個規則,就沒有交流的餘地。html
在一開始的時候文件格式的規定是沒有規範的,後面學到模塊的時候逐漸知道了目錄規則,咱們會把文件放到db目錄下。node
相似下面目錄結構:python
對於上面db目錄中,是能夠存放多個文件的,而且文件中能夠有多行數據。mysql
那麼問你們一個問題,若是說上面那個軟件是我寫好的,在一臺服務器或者一臺機器上安裝了我寫好的軟件。redis
如今有張三和李四兩我的都安裝了我這個軟件,張三註冊了一個用戶,李四也註冊了一個用戶,那麼本身註冊的用戶應該是本身用的。那麼這兩個用戶是不共享的,算法
因此這個軟件證實我寫的不太好,它不能共享,這種相似單機的軟件是很差的。sql
而後呢,我如今將我寫的這個軟件中目錄修改一下,將db目錄移除。如今將單機程序(本身的DB)改變成也是單機程序(公用DB)。mongodb
那麼以前給你們介紹過,凡是交互操做,是離不開scoket的,那麼如今我這邊有個公用DB和一個scoket服務端,而後在張三和李四那邊有scoket客戶端。張三和李四此時輸入用戶名和密碼,如今我這邊scoket服務端某個目錄接收用戶輸入的用戶名和密碼,看一下該用戶名存在不存在,若是存在返回true,若是不存在返回false。也就是說重點的內容咱們把db目錄放到某臺服務器上。數據庫
那麼上面這個例子呢,其實就給你們慢慢的引出來mysql了,mysql呢其實就一個軟件,這個軟件安裝到某臺電腦上或者某臺服務器上,那麼如今只要我告訴它建立一個文件目錄或者建立文件,那麼mysql就自動幫咱們建立了,好比說咱們再在文件中添加一條數據,那麼它也幫咱們完成。
總結一句話:其實mysql就是用於管理咱們的文件的一個軟件。
那麼對於mysql這個軟件來講有兩個軟件
---服務器軟件 - socket服務端 - 本地文件操做
- 解析指令(mysql語句) ---客戶端軟件 - socket客戶端 - 發送指令
- 解析指令(mysql語句)
解釋:
對於服務器軟件中的socket服務器是一直開着,客戶端得須要鏈接,而且還有建立文件、刪除文件等等的操做
對於客戶端軟件中的scoket客戶端,咱們得須要發送指令去命令scoket服務端對文件進行操做。
你們應該知道ftp的項目,上傳項目和下載項目的命令是不同的。那麼對於mysql中的客戶端和服務端也會有些指令的操做,那麼在這兩個端中應該是有解析指令的過程,這個指令只有mysql這個軟件知道,這種指令就是mysql語句。
再想一想咱們寫的html、css、js.這些比如就是咱們客戶端寫好的語法,而後瀏覽器充當了服務端的角色去解析咱們的的語法,最後來渲染出來結果。
接下來咱們要學習這些技能:
- 安裝 服務端和客戶端 - 鏈接 - 學習SOL語句規則:命令服務端作任何的操做
02-數據庫概述
什麼是數據(Data)
描述事物的符號記錄稱爲數據,描述事物的符號既能夠是數字,也能夠是文字、圖片,圖像、聲音、語言等,數據由多種表現形式,它們均可以通過數字化後存入計算機 在計算機中描述一個事物,就須要抽取這一事物的典型特徵,組成一條記錄,就至關於文件裏的一行內容,如:
1 xiaomage,male,18,1999,山東,計算機系,2017,oldboy
單純的一條記錄並無任何意義,若是咱們按逗號做爲分隔,依次定義各個字段的意思,至關於定義表的標題
這樣經過表格咱們很清楚的知道了某人的詳細信息。
什麼是數據庫(DataBase,簡稱DB)
數據庫即存放數據的倉庫,只不過這個倉庫是在計算機存儲設備上,並且數據是按必定的格式存放的
過去人們將數據存放在文件櫃裏,如今數據量龐大,已經再也不適用
數據庫是長期存放在計算機內、有組織、可共享的數據便可。
數據庫中的數據按必定的數據模型組織、描述和儲存,具備較小的冗餘度、較高的數據獨立性和易擴展性,並可爲各類 用戶共享
什麼是數據庫管理系統(DataBase Management System)
在瞭解了Data與DB的概念後,如何科學地組織和存儲數據,如何高效獲取和維護數據成了關鍵
這就用到了一個系統軟件---數據庫管理系統
如MySQL、Oracle、SQLite、Access、MS SQL Server
mysql主要用於大型門戶,例如搜狗、新浪等,它主要的優點就是開放源代碼,由於開放源代碼這個數據庫是免費的,他如今是甲骨文公司的產品。
oracle主要用於銀行、鐵路、飛機場等。該數據庫功能強大,軟件費用高。也是甲骨文公司的產品。
sql server是微軟公司的產品,主要應用於大中型企業,如聯想、方正等。
數據庫服務器、數據管理系統、數據庫、表與記錄的關係(重點理解!!!)
記錄:1 xxx 324245234 22(多個字段的信息組成一條記錄,即文件中的一行內容)
表:student,scholl,class_list(即文件)
數據庫:oldboy_stu(即文件夾)
數據庫管理系統:如mysql(是一個軟件)
數據庫服務器:一臺計算機(對內存要求比較高)
總結:
數據庫服務器-:運行數據庫管理軟件
數據庫管理軟件:管理-數據庫
數據庫:即文件夾,用來組織文件/表
表:即文件,用來存放多行內容/多條記錄
03-MySql安裝和基本管理
本節掌握內容:
-
MySQL的介紹安裝、啓動
- windows上製做服務
-
MySQL破解密碼
-
MySQL中統一字符編碼
MySQL是一個關係型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬於 Oracle 旗下公司。MySQL 最流行的關係型數據庫管理系統,在 WEB 應用方面MySQL是最好的 RDBMS (Relational Database Management System,關係數據庫管理系統) 應用軟件之一。
MySQL是一種關係數據庫管理系統,關係數據庫將數據保存在不一樣的表中,而不是將全部數據放在一個大倉庫內,這樣就增長了速度並提升了靈活性。
-
Mysql是開源的,因此你不須要支付額外的費用。
-
Mysql支持大型的數據庫。能夠處理擁有上千萬條記錄的大型數據庫。
-
MySQL使用標準的SQL數據語言形式。
-
Mysql能夠容許於多個系統上,而且支持多種語言。這些編程語言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
-
Mysql對PHP有很好的支持,PHP是目前最流行的Web開發語言。
-
MySQL支持大型數據庫,支持5000萬條記錄的數據倉庫,32位系統表文件最大可支持4GB,64位系統支持最大的表文件爲8TB。
-
Mysql是能夠定製的,採用了GPL協議,你能夠修改源碼來開發本身的Mysql系統。
因爲其社區版的性能卓越,搭配Apache和PHP以及python 可組成良好的開發環境。
應用環境
與其餘的大型數據庫例如 Oracle、DB2、SQL Server等相比,MySQL [1] 自有它的不足之處,可是這絲毫也沒有減小它受歡迎的程度。對於通常的我的使用者和中小型企業來講,MySQL提供的功能已經綽綽有餘,並且因爲 MySQL是開放源碼軟件,所以能夠大大下降整體擁有成本。
mysql是什麼?
總結:mysql就是一個基於socket編寫的C/S架構的軟件
數據庫管理軟件分類
分兩大類: 關係型:如sqllite,db2,oracle,access,sql server,MySQL,注意:sql語句通用 非關係型:mongodb,redis,memcache 總結兩句話: 關係型數據庫須要有表結構 非關係型數據庫是key-value存儲的,沒有表結構
因此,如今咱們使用關係型數據庫管理系統(RDBMS)來存儲和管理的大數據量。所謂的關係型數據庫,是創建在關係模型基礎上的數據庫,藉助於集合代數等數學概念和方法來處理數據庫中的數據。
RDBMS即關係數據庫管理系統(Relational Database Management System)的特色:
-
1.數據以表格的形式出現
-
2.每行爲各類記錄名稱
-
3.每列爲記錄名稱所對應的數據域
-
4.許多的行和列組成一張表單
-
5.若干的表單組成database
RDBMS 術語
在咱們開始學習MySQL 數據庫前,讓咱們先了解下RDBMS的一些術語:
-
數據庫: 數據庫是一些關聯表的集合。.
-
數據表: 表是數據的矩陣。在一個數據庫中的表看起來像一個簡單的電子表格。
-
列: 一列(數據元素) 包含了相同的數據, 例如郵政編碼的數據。
-
行:一行(=元組,或記錄)是一組相關的數據,例如一條用戶訂閱的數據。
-
冗餘:存儲兩倍數據,冗餘下降了性能,但提升了數據的安全性。
-
主鍵:主鍵是惟一的。一個數據表中只能包含一個主鍵。你能夠使用主鍵來查詢數據。
-
外鍵:外鍵用於關聯兩個表。
-
複合鍵:複合鍵(組合鍵)將多個列做爲一個索引鍵,通常用於複合索引。
-
索引:使用索引可快速訪問數據庫表中的特定信息。索引是對數據庫表中一列或多列的值進行排序的一種結構。相似於書籍的目錄。
-
參照完整性: 參照的完整性要求關係中不容許引用不存在的實體。與實體完整性是關係模型必須知足的完整性約束條件,目的是保證數據的一致性。
mysql的下載安裝
想要使用MySQL來存儲並保存數據,則須要作幾件事情:
a. 安裝MySQL服務端
b. 安裝MySQL客戶端
b. 【客戶端】鏈接【服務端】
c. 【客戶端】發送命令給【服務端MySQL】服務的接受命令並執行相應操做(增刪改查等)
下載地址:
window版本
一、官網去下載
二、針對操做系統的不一樣下載不一樣的版本
3.解壓
若是想要讓MySQL安裝在指定目錄,那麼就將解壓後的文件夾移動到指定目錄,如:C:\mysql-5.6.40-winx64
4.添加環境變量
5.初始化
1
|
mysqld
-
-
initialize
-
insecure
|
6.啓動mysql服務
mysqld #啓動MySQL服務
7.啓動mysql客戶端並鏈接mysql服務端(新開一個cmd窗口)
mysql -u root -p # 鏈接MySQL服務器
上一步解決了一些問題,但不夠完全,由於在執行【mysqd】啓動MySQL服務器時,當前終端會被hang住,那麼作一下設置便可解決此問題,即將MySQL服務製做成windows服務
注意:--install前,必須用mysql啓動命令的絕對路徑 # 製做MySQL的Windows服務,在終端執行此命令: "c:\mysql-5.6.40-winx64\bin\mysqld" --install # 移除MySQL的Windows服務,在終端執行此命令: "c:\mysql-5.6.40-winx64\bin\mysqld" --remove 註冊成服務以後,之後再啓動和關閉MySQL服務時,僅需執行以下命令: # 啓動MySQL服務 net start mysql # 關閉MySQL服務 net stop mysql
windows下登陸設置密碼
打開終端,輸入mysql
輸入mysql提供的函數:select user(); # 查看當前登陸的帳號
當前登陸的默認帳號爲ODBC@localhost
若是想切到root帳號登陸
執行命令:
mysql -uroot -p
再查看當前用戶:
select user();
管理員爲root(擁有最高權限,管理員帳號),密碼爲空,以無密碼的方式登陸了管理員帳號,是很是危險的一件事情,因此要爲管理員帳號設置密碼
設置管理員root帳號密碼爲123
C:\Users\mjj>mysqladmin -uroot -p password "123" #設置初始密碼 因爲原密碼爲空,所以-p能夠不用 Mysql版本的不一樣,可能執行這句指令不起做用,請使用update mysql.user set authentication_string =password('') where User='root';
ps:⚠️不用管它。翻譯爲:在命令行界面使用密碼不安全,暴露在終端當中。
而後再登陸帳號,不輸入密碼則會出現以下結果:
再次執行以下操做:
再查看一下當前登陸的帳號:
若是想將原始密碼123,設置新密碼爲456
C:\Users\mjj>mysqladmin -uroot -p"123" password "456" #修改mysql密碼,由於已經有密碼了,因此必須輸入原密碼才能設置新密碼
依次執行以下操做:
mysql -uroot -p456 select user();
密碼忘記——破解密碼
跳過受權方式,直接登陸!!
0.以管理員身份打開cmd
2.停掉mysql服務端
C:\WINDOWS\system32>net stop mysql MySQL 服務正在中止. MySQL 服務已成功中止。
3.執行以下命令跳過受權表
#跳過受權表 C:\WINDOWS\system32>mysqld --skip-grant-tables 2018-06-09 17:12:38 0 [Warning] Insecure configuration for --secure-file-priv: Current value does not restrict location of generated files. Consider setting it to a valid, non-empty path. 2018-06-09 17:12:38 0 [Note] mysqld (mysqld 5.6.40) starting as process 6052 ...4.
4.再次查看
5. 如今能夠任意的更改密碼,執行以下命令
6.刷新權限,執行命令
flush privileges;
7.退出mysql。執行命令:exit,
8.讓用戶去加載權限,以管理員身份進入cmd,查看當前mysql進程
1
|
tasklist |findstr mysql
#查看當前mysql的進程
|
9.殺死當前的進程,執行以下命令
taskkill /F /PID 6052 # 殺死當前的進程pid
10.再次執行以下操做,還原
統一字符編碼
進入mysql客戶端,執行\s
爲了統一字符編碼,請執行以下操做:
(1)my.ini文件是mysql的配置文件,
在C:\mysql-5.6.40-winx64文件下建立my.ini文件
(2)將以下代碼拷貝保存。
[mysqld]
# 設置mysql的安裝目錄 **後面的路徑必定是安裝sql的目錄(本身電腦的)**
basedir=C:\mysql-5.7.22-winx64\mysql-5.7.22-winx64
# 設置mysql數據庫的數據的存放目錄,必須是data
datadir=C:\mysql-5.7.22-winx64\mysql-5.7.22-winx64\data
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# mysql端口
port=3306
# 字符集
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
(3)以管理員身份重啓服務,執行以下命令
C:\Windows\system32>net stop MySQL MySQL 服務正在中止.. MySQL 服務已成功中止。 C:\Windows\system32>net start MySQL MySQL 服務正在啓動 . MySQL 服務已經啓動成功。
(4)在cmd中輸入mysql進入mysql環境,執行\s,顯示以下信息,表示成功
04-基本的mysql語句
本節課先對mysql的基本語法初體驗。
操做文件夾(庫)
增
create database db1 charset utf8;
查
# 查看當前建立的數據庫 show create database db1; # 查看全部的數據庫 show databases;
改
alter database db1 charset gbk;
刪
drop database db1;
操做文件(表)
use db1; #切換文件夾 select database(); #查看當前所在文件夾
增
create table t1(id int,name char);
查
#查看當前的這張t1表 show create table t1; # 查看全部的表 show tables; # 查看錶的詳細信息 desc t1;
改
# modify修改的意思 alter table t1 modify name char(6); # 改變name爲大寫的NAME alter table t1 change name NAMA char(7);
刪
# 刪除表 drop table t1;
操做文件內容(記錄)
增
# 插入一條數據,規定id,name數據leilei insert t1(id,name) values(1,"mjj01"),(2,"mjj02"),(3,"mjj03");
查
select id from db1.t1; select id,name from db1.t1; select * from db1.t1;
改
update db1.t1 set name='zhangsan'; update db1.t1 set name='alex' where id=2;
刪
delete from t1; delete from t1 where id=2;