當前位置:
首頁 > 知識 > MYSQL 入門全套

MYSQL 入門全套

點擊上方「

Python開發

」,選擇「置頂公眾號」


關鍵時刻,第一時間送達!






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對於許可權這塊有以下限制:








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





            

資料庫名.*

           

資料庫中的所有


            

資料庫名.表

          

指定資料庫中的某張表


            

資料庫名.存儲過程

     

指定資料庫中的存儲過程


            

*.*

                

所有資料庫




對於用戶和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表操作




1、查看錶





show

 

tables

;

                    

# 查看資料庫全部表


 


select

 

*

 

from

 

表名;

             

# 查看錶所有內容




2、創建表





create

 

table

 

表名(


    

列名

  

類型

  

是否可以為空,


    

列名

  

類型

  

是否可以為空


)

ENGINE

=

InnoDB

 

DEFAULT

 

CHARSET

=

utf8




來一個實例好詳解





CREATE

 

TABLE

 

`tab1`

 

(


  

`nid`

 

int

(11)

 

NOT NULL

 

auto_increment

,

                   

# not null表示不能為空,auto_increment表示自增


  

`name`

 

varchar

(255)

 

DEFAULT

 

zhangyanlin,

                 

# default 表示默認值


  

`email`

 

varchar

(255),


  

PRIMARY KEY

 

(`nid`)

                                      

# 把nid列設置成主鍵


)

 

ENGINE

=

InnoDB

 

DEFAULT

 

CHARSET

=

utf8;




註:






  • 默認值,創建列時可以指定默認值,當插入數據時如果未主動設置,則自動添加默認值





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





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




3、刪除表





drop table 表名




4、清空表內容





delete

 

from

 

表名


truncate

 

table

 

表名




5、修改表





添加列:

   

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 ,大家自行在網上下載,練練手,但是下面的即將講到表內容操作還是建議自己寫命令來進行




6、基本數據類型




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了,對於我這種小白還是非常難以靈活運用的,下面咱來一一操作一下




1、增





insert

 

into

 

 

(列名,列名...)

 

values

 

(值,值,...)


insert

 

into

 

 

(列名,列名...)

 

values

 

(值,值,...),(值,值,值...)


insert

 

into

 

 

(列名,列名...)

 

select

 

(列名,列名...)

 

from

 


例:


    

insert

 

into

 

tab1(name,email)

 

values

(

"zhangyanlin"

,

"zhangyanlin8851@163.com"

)




2、刪





delete

 

from

 

                                      

# 刪除表裡全部數據


delete

 

from

 

 

where

 

id=1

 

and

 

name=

"zhangyanlin"

   

# 刪除ID =1 和name="zhangyanlin" 那一行數據




3、改





update 表 set name = "zhangyanlin" where id>1




4、查





select

 

*

 

from

 


select

 

*

 

from

 

 

where

 

id

 > 

1


select

 

nid,name,gender

 

as

 

gg

 

from

 

 

where

 

id

 > 

1




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




a、條件判斷where







b、通配符like







c、限制limit







d、排序asc,desc







e、分組group by









  • 來源:張岩林




  • www.cnblogs.com/aylin/p/5744312.html



  • Python開發整理髮布,轉載請聯繫作者獲得授權


【點擊成為Java大神】

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python開發 的精彩文章:

用 greenlet 實現 Python 中的並發
使用 Scrapy 構建一個網路爬蟲

TAG:Python開發 |