歡迎光臨
每天分享高質量文章

MySQL 超級入門教程(內含資源福利)


運維行業正在變革,推薦閱讀:30萬年薪Linux運維工程師成長魔法


MySQL簡介

1、什麼是資料庫 ?


資料庫(Database)是按照資料結構來組織、儲存和管理資料的倉庫,它產生於距今六十多年前,隨著信息技術和市場的發展,特別是二十世紀九十年代以後,資料管理不再僅僅是儲存和管理資料,而轉變成用戶所需要的各種資料管理的方式。資料庫有很多種型別,從最簡單的儲存有各種資料的表格到能夠進行海量資料儲存的大型資料庫系統都在各個方面得到了廣泛的應用。


主流的資料庫有:sqlserver,mysql,Oracle、SQLite、Access、MS SQL Server等,本文主要講述的是mysql


2、資料庫管理是乾什麼用的?


  • a. 將資料儲存到檔案或記憶體


  • b. 接收特定的命令,然後對檔案進行相應的操作


PS:如果有了以上管理系統,無須自己再去創建檔案和檔案夾,而是直接傳遞 命令 給上述軟體,讓其來進行檔案操作,他們統稱為資料庫管理系統(DBMS,Database Management System)


MySQL安裝

MySQL是一種開放原始碼的關係型資料庫管理系統(RDBMS),MySQL資料庫系統使用最常用的資料庫管理語言–結構化查詢語言(SQL)進行資料庫管理。在 WEB 應用方面MySQL是最好的 RDBMS (Relational Database Management System,關係資料庫管理系統) 應用軟體之一。


使用mysql必須具備一下條件


  • a. 安裝MySQL服務端


  • b. 安裝MySQL客戶端


  • c. 【客戶端】連接【服務端】


  • d. 【客戶端】發送命令給【服務端MySQL】服務的接受命令並執行相應操作(增刪改查等)


1、下載地址:http://dev.mysql.com/downloads/mysql/


2、安裝


  • windows安裝請參考:http://www.cnblogs.com/lonelywolfmoutain/p/4547115.html


  • linux下安裝:http://www.cnblogs.com/chenjunbiao/archive/2011/01/24/1940256.html


註:以上兩個鏈接有完整的安裝方式,擼主也是參考他的安裝的,安裝完以後mysql.server start啟動mysql服務


MySQL操作

一、連接資料庫

mysql  -u user -p                   
例:mysql -u root -p

常見錯誤如下:


ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2), it means that the MySQL server daemon (Unix) or service (Windows) is not running.


退出連接:

QUIT 或者 Ctrl+D

二、查看資料庫,創建資料庫,使用資料庫查看資料庫: 

show databases;

預設資料庫:

mysql - 用戶權限相關資料
test - 用於用戶測試資料
information_schema - MySQL本身架構相關資料

創建資料庫:    

create database db1 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; # utf8編碼

create database db1 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; # gbk編碼

使用資料庫:

 use db1;

顯示當前使用的資料庫中所有表:

SHOW TABLES;

三、用戶管理

創建用戶

create user '用戶名'@'IP地址' identified by '密碼';

刪除用戶

drop user '用戶名'@'IP地址';

修改用戶

rename user '用戶名'@'IP地址'; to '新用戶名'@'IP地址';

修改密碼

set password for '用戶名'@'IP地址' = Password('新密碼');

註:用戶權限相關資料儲存在mysql資料庫的user表中,所以也可以直接對其進行操作(不建議)


四、權限管理


mysql對於權限這塊有以下限制:

all privileges除grant外的所有權限
select:僅查權限
select,insert查和插入權限
...
usage
無訪問權限
alter使用alter table
alter routine使用alter procedure和drop procedure
create使用create table
create routine使用create procedure
create temporary tables使用create temporary tables
create user使用create user、drop user、rename user和revoke  all privileges
create view使用create view
delete使用delete
drop使用drop table
execute使用call和儲存過程
file使用select into outfile 和 load data infile
grant option使用grant 和 revoke
index使用index
insert使用insert
lock tables使用lock table
process使用show full processlist
select使用select
show databases使用show databases
show view使用show view
update使用update
reload使用flush
shutdown使用mysqladmin shutdown(關閉MySQL)
super使用change master、kill、logs、purge、master和set global。還允許mysqladmin除錯登陸
replication client服務器位置的訪問
replication slave由複製從屬使用

對於資料庫及內部其他權限如下:

資料庫名.*            資料庫中的所有
資料庫名.表           指定資料庫中的某張表
資料庫名.儲存過程      指定資料庫中的儲存過程
*.*                   所有資料庫

對於用戶和IP的權限如下:

用戶名@IP地址        用戶只能在改IP下才能訪問
用戶名@192.168.1.%   用戶只能在改IP段下才能訪問(通配符%表示任意)
用戶名@%             用戶可以再任意IP下訪問(預設IP地址為%)

1、查看權限:

show grants for '用戶'@'IP地址'

2、授權

grant  權限 on 資料庫.表 to   '用戶'@'IP地址'

3、取消授權

revoke 權限 on 資料庫.表 from '用戶名'@'IP地址'

授權實體如下:

grant all privileges on db1.tb1 TO '用戶名'@'IP'

grant select on db1.* TO '用戶名'@'IP'

grant select,insert on *.* TO '用戶名'@'IP'

revoke select on db1.tb1 from '用戶名'@'IP'

MySQL表操作

一、查看表

show tables; # 查看資料庫全部表

select * from 表名; # 查看表所有內容

二、創建表

create table 表名(
   列名  型別  是否可以為空,
   列名  型別  是否可以為空
)ENGINE=InnoDB DEFAULT CHARSET=utf8

來一個實體好詳解

CREATE TABLE `tab1` (
 `nid` int(11) NOT NULL auto_increment,
 `name` varchar(255) DEFAULT zhangyanlin,
 `email` varchar(255),
 PRIMARY KEY (`nid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

註:


  • 預設值,創建列時可以指定預設值,當插入資料時如果未主動設置,則自動添加預設值


  • 自增,如果為某列設置自增列,插入資料時無需設置此列,預設將自增(表中只能有一個自增列)註意:1、對於自增列,必須是索引(含主鍵)2、對於自增可以設置步長和起始值


  • 主鍵,一種特殊的唯一索引,不允許有空值,如果主鍵使用單個列,則它的值必須唯一,如果是多列,則其組合必須唯一。


三、刪除表

drop table 表名

四、清空表內容

delete from 表名
truncate table 表名

五、修改表

添加列:   

alter table 表名 add 列名 型別

刪除列:  

alter table 表名 drop column 列名

修改列:
         
alter table 表名 modify column 列名 型別;
 -- 型別
alter table 表名 change 原列名 新列名 型別; -- 列名,型別

添加主鍵:
         
alter table 表名 add primary key(列名);

刪除主鍵:
         
alter table 表名 drop primary key;
alter table 表名  modify  列名 int, drop primary key;

添加外鍵:

alter table 從表 add constraint 外鍵名稱(形如:FK_從表_主表) foreign key 從表(外鍵欄位) references 主表(主鍵欄位);

刪除外鍵:

alter table 表名 drop foreign key 外鍵名稱

修改預設值:

ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;

刪除預設值:

ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;

對於上述這些操作是不是看起來很麻煩,很浪費時間,別慌!有專門的軟體能提供這些功能,操作起來非常簡單,這個軟體名字叫Navicat Premium ,大家自行在網上下載,練練手,但是下麵的即將講到表內容操作還是建議自己寫命令來進行


六、基本資料型別


MySQL的資料型別大致分為:數值、時間和字串

bit[(M)]
           二進制位(101001),m表示二進制位的長度(1-64),預設m=1

tinyint[(m)] [unsigned] [zerofill]

           小整數,資料型別用於儲存一些範圍的整數數值範圍:
           有符號:
               -128 ~ 127.
           無符號:
               0 ~ 255

           特別的: MySQL中無布林值,使用tinyint(1)構造。

int[(m)][unsigned][zerofill]

           整數,資料型別用於儲存一些範圍的整數數值範圍:
               有符號:
                   -2147483648 ~ 2147483647
               無符號:
                   0 ~ 4294967295

           特別的:整數型別中的m僅用於顯示,對儲存範圍無限制。例如: int(5),當插入資料2時,select 時資料顯示為:00002

bigint[(m)][unsigned][zerofill]

           大整數,資料型別用於儲存一些範圍的整數數值範圍:
               有符號:
                   -9223372036854775808 ~ 9223372036854775807
               無符號:
                   0  ~  18446744073709551615


decimal[(m[,d])] [unsigned] [zerofill]

           準確的小數值,m是數字總個數(負號不算),d是小數點後個數。 m最大值為65,d最大值為30

           特別的:對於精確數值計算時需要用此型別
                  decaimal能夠儲存精確值的原因在於其內部按照字串儲存。

FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
           
           單精度浮點數(非準確小數值),m是數字總個數,d是小數點後個數。
               無符號:
                   -3.402823466E+38 to -1.175494351E-38,
                   0
                   1.175494351E-38 to 3.402823466E+38
               有符號:
                   0
                   1.175494351E-38 to 3.402823466E+38


           **** 數值越大,越不准確 ****

DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]

           雙精度浮點數(非準確小數值),m是數字總個數,d是小數點後個數。

               無符號:
                   -1.7976931348623157E+308 to -2.2250738585072014E-308
                   0
                   2.2250738585072014E-308 to 1.7976931348623157E+308
               有符號:
                   0
                   2.2250738585072014E-308 to 1.7976931348623157E+308
           **** 數值越大,越不准確 ****


char (m)

           char資料型別用於表示固定長度的字串,可以包含最多達255個字符。其中m代表字串的長度。
           PS: 即使資料小於m長度,也會占用m長度

           
varchar(m)

           varchars資料型別用於變長的字串,可以包含最多達255個字符。其中m代表該資料型別所允許儲存的字串的最大長度,只要長度小於該最大值的字串都可以被儲存在該資料型別中。

           註:雖然varchar使用起來較為靈活,但是從整個系統的性能角度來說,char資料型別的處理速度更快,有時甚至可以超出varchar處理速度的50%。因此,用戶在設計資料庫時應當綜合考慮各方面的因素,以求達到最佳的平衡

text

           text資料型別用於儲存變長的大字串,可以組多到65535 (2**16 − 1)個字符。

mediumtext

           A TEXT column with a maximum length of 16,777,215 (2**24 − 1) characters.

longtext

           A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**32 − 1) characters.

enum

           列舉型別,
           An ENUM column can have a maximum of 65,535 distinct elements. (The practical limit is less than 3000.)
           示例:

               CREATE TABLE shirts (
                   name VARCHAR(40),
                   size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
               );

               INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small');

set

           集合型別
           A SET column can have a maximum of 64 distinct members.
           示例:
               CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));

               INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');

DATE
           
           YYYY-MM-DD(1000-01-01/9999-12-31)

TIME

           HH:MM:SS('-838:59:59'/'838:59:59')

YEAR

           YYYY(1901/2155)

DATETIME

           YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59    Y)

TIMESTAMP

           YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某時)

MySQL表內容操作

表內容操作無非就是增刪改查,當然用的最多的還是查,而且查這一塊東西最多,用起來最難,當然對於大神來說那就是so easy了,對於我這種小白還是非常難以靈活運用的,下麵咱來一一操作一下


一、增

insert into 表 (列名,列名...) values (值,值,...)
insert into 表 (列名,列名...) values (值,值,...),(值,值,值...)
insert into 表 (列名,列名...) select (列名,列名...) from
例:
   insert into tab1(name,email) values('zhangyanlin','zhangyanlin8851@163.com')

二、刪

delete from 表   # 刪除表裡全部資料
delete fromwhere id=1 and name='zhangyanlin' # 刪除ID =1 和name='zhangyanlin' 那一行資料

三、改

updateset name = 'zhangyanlin' where id>1

四、查

select * from
select * fromwhere id > 1
select nid,name,gender as gg fromwhere id > 1

查這塊的條件太多太多我給列舉出來至於組合還得看大家的理解程度哈


a、條件判斷where

select * fromwhere id > 1 and name != 'aylin' and num = 12;
select * fromwhere id between 5 and 16;
select * fromwhere id in (11,22,33)
select * fromwhere id not in (11,22,33)
select * fromwhere id in (select nid from 表)

b、通配符like

select * fromwhere name like 'zhang%'  # zhang開頭的所有(多個字串)
select * fromwhere name like 'zhang_'  # zhang開頭的所有(一個字符)

c、限制limit

select * fromlimit 5;            - 前5行
select * fromlimit 4,5;          - 從第4行開始的5行
select * fromlimit 5 offset 4    - 從第4行開始的5行

d、排序asc,desc

select * fromorder byasc              - 根據 “列” 從小到大排列
select * fromorder bydesc             - 根據 “列” 從大到小排列
select * fromorder by1 desc,列2 asc    - 根據 “列1” 從大到小排列,如果相同則按列2從小到大排序

e、分組group by

select num fromgroup by num
select num,nid fromgroup by num,nid
select num,nid from 表  where nid > 10 group by num,nid order nid desc
select num,nid,count(*),sum(score),max(score),min(score) fromgroup by num,nid
select num fromgroup by num having max(id) > 10

特別的:group by 必須在where之後,order by之前

好了,以上我們就完成了MySQL的入門。經過練習之後,一些簡單的增刪改查任務已經不成問題,這時候就應該要考慮進階了。

限於本文的主題和篇幅,在這裡我們就不多說了,如果有需要的同學可以前往 MySQL 的官方文件:https://dev.mysql.com/doc/ 進行查看,英文不太好的同學也可以去菜鳥教程:http://www.runoob.com/mysql/mysql-tutorial.html。

MySQL 資源大全

除了一份入門的教程,小編還給大家準備了一份禮物,那就是 MySQL 資源大全。

工欲善其事必先利其器,有了這些工具,我們和大神的差距就會縮小許多,而且很多工具也會為我們的日常提升提供很大幫助——有了工具包,媽媽再也不用擔心你的學習!

分析工具


性能,結構和資料分析工具


  • Anemometer – 一個 SQL 慢查詢監控器。


  • innodb-ruby – 一個對 InooDB 格式檔案的解析器,用於 Ruby 語言。


  • innotop – 一個具備多種特性和可擴展性的 MySQL 版 ‘top’ 工具。


  • pstop – 一個針對 MySQL 的類 top 程式,用於收集,彙總以及展示來自 performance_schema 的信息。


  • mysql-statsd – 一個收集 MySQL 信息的 Python 守護行程,並通過 StatsD 發送到 Graphite。


備份


備份/儲存/恢復 工具


  • MyDumper – 邏輯的,並行的 MySQL 備份/轉儲工具。


  • MySQLDumper – 基於 web 的開源備份工具-對於共享虛擬主機非常有用。


  • mysqldump-secure – 將加密,壓縮,日誌,黑名單和 Nagios 監控一體化的 mysqldump 安全腳本。


  • Percona Xtrabackup – 針對 MySQL 的一個開源熱備份實用程式——在服務器的備份期間不會鎖定你的資料庫。


性能測試


給你的服務器進行壓測的工具


  • iibench-mysql -基於 Java 的 MySQL/Percona/MariaDB 索引進行插入性能測試工具。


  • Sysbench – 一個模塊化,跨平臺以及多執行緒的性能測試工具。


聊天應用


集成進聊天室的腳本


  • Hubot MySQL ChatOps


配置


MySQL 配置實體及指導


  • mysql-compatibility-config – 使 MySQL 配置起來更像新的(或先前)的 MySQL 版本。


連接器


多種編程語言的 MySQL 連接器


  • Connector/Python – 一個對於 Python 平臺和開發的標準化資料庫驅動程式。


  • go-sql-driver – 一個 Go 語言的輕量級、極速的 MySQL 驅動程式。


  • libAttachSQL – libAttachSQL 是 MySQL 服務器的一個輕量級,非阻塞的 C 語言 API。


  • MariaDB Java Client – 針對 Java 應用且經過 LGPL 許可的 MariaDB 客戶端庫。


  • MySQL-Python – 一個 Python 語言的 MySQL 資料庫連接器。


  • PHP mysqlnd – 針對 MySQL 的 MySQL 本地驅動,棄用過時的 libmysql 基礎驅動。


開發


支持 MySQL 相關開發的工具


  • Flywaydb – 資料庫遷移;任意情況下輕鬆可靠地演變你的資料庫版本。


  • Liquibase – 對你的資料庫進行原始碼控制。


  • Propagator – 集中樣式和資料部署在一個多維拓撲上。


GUI


前端和應用的 GUI


  • Adminer – 一個 PHP 編寫的資料庫管理工具。


  • HeidiSQL – Windows 下的 MySQL 圖形化管理工具。


  • MySQL Workbench – 提供給資料庫管理員和開發人員進行資料庫設計和建模的集成工具環境;SQL 開發;資料庫管理。


  • phpMyAdmin – 一個 PHP 寫成的開源軟體,意圖對 web 上的 MySQL 進行管理。


  • SequelPro – 一個 mac 下運行 MySQL 的資料庫管理應用程式。


  • mycli – 一個帶自動補全和語法高亮的終端版 MySQL 客戶端


HA


高可用解決方案


  • Galera Cluster – 一個基於同步複製的多主機集群方案。


  • MHA – 針對 MySQL 的優秀高可用管理器及工具


  • MySQL Fabric – 一個用於管理 MySQL 服務器場(Server Farms)的可擴展框架。


  • Percona Replication Manager – 針對 MySQL 的異步複製管理代理。支持以檔案和 GTID 為基礎的複製,使用 booth 實現的地理分佈式集群。


代理


MySQL 代理


  • MaxScale – 開源,以資料庫為中心的代理。


  • Mixer – Go 實現的一個 MySQL 代理,目的為 MySQL 分片提供一個簡單的解決方案。


  • MySQL Proxy – 一個處於你的客戶端和 MySQL 服務端之間的簡單程式,它可以檢測、分析或者改變它們的通信。


  • ProxySQL – 高性能的 MySQL 代理。


複製


複製相關的軟體


  • orchestrator – 對 MySQL 複製拓撲管理並可視化的工具。


  • Tungsten Replicator – MySQL 的一個高性能、開源、資料複製引擎。


樣式


附加樣式


  • common_schema – MySQL DBA 的框架, 提供一個具有函式庫、視圖庫和查詢腳本的解釋器。


  • sys – 一個視圖、函式和過程的集合,以幫助 MySQL 管理人員更加深入理解 MySQL 資料庫的使用。


服務器


MySQL server flavors


  • MariaDB – MySQL server 的一個由社區開發的分支。


  • MySQL Server & MySQL Cluster – Oracle 官方的 MySQL server 和 MySQL 集群分佈。


  • Percona Server – 一個加強版的 MySQL 替代品


  • WebScaleSQL – WebScaleSQL,5.6 版本,基於 MySQL 5.6 社區版本。


分片


分片解決方案/框架


  • vitess – 對於大規模的 web 服務,vitess 提供服務和工具以便於 MySQL 資料庫的縮放。


  • jetpants – 一個自動化套件,用於管理大規模分片集群,由 Tumblr 開發。


工具包


工具包,通用腳本


  • go-mysql – 一個純 go 的庫,用於處理 MySQL 的網絡協議和複製。


  • MySQL Utilities – 一個命令列實用程式的集合,Python 語言編寫,用於維護和管理單一或多層的 MySQL。


  • Percona Toolkit – 一個先進的命令列工具集,用於執行對於 MySQL 服務器和系統過於困難或複雜的任務。


  • openark kit – 一組實用的工具,解決日常的維護工作,包括一些複雜的或需徒手操作的,用 Python 語言編寫。


  • UnDROP – 一個用來恢復刪除或損壞的 InnoDB 表中資料的工具。

資源合集

為了方便大家,小編已經將上述的所有資源打包整理,只需掃碼關註“Python頭條”微信公眾號,回覆關鍵字 “資源合集” 即可獲得哦~

長按掃碼

本文部分內容來源於伯樂在線





————近期開班————

《馬哥Linux雲計算及架構師》課程,由知名Linux佈道師馬哥創立,經歷了8年的發展,聯合阿裡巴巴、唯品會、大眾點評、騰訊、陸金所等大型互聯網一線公司的馬哥課程團隊的工程師進行深度定製開發,課程採用 Centos7.2系統教學,加入了大量實戰案例,授課案例均來自於一線的技術案例,自動化運維、Devops、雲服務、python等技能一站式搞定,掌握2018年linux雲計算高薪未來。

29期網絡班:2018年02月10日(網絡)

30期面授班:2018年03月26日(北京)


更多Linux好文請點擊【閱讀原文】哦

↓↓↓

赞(0)

分享創造快樂

© 2021 知識星球   网站地图