1. 程式人生 > >MySQL基礎(一):庫操作、表操作與資料型別

MySQL基礎(一):庫操作、表操作與資料型別

一:MySQL簡介

       MySQL是一種DBMS(資料庫管理系統),即它是一種資料庫軟體;是基於客戶機-伺服器的DBMS

       MySQL優點:
       成本低:MySQL是開放原始碼的,一般可以免費使用
       效能高:執行非常快
       可信賴:某些非常重要和聲望很高的公司、站點使用

       簡單:很容易安裝和使用

二:幾個基礎操作與概念

       1,基礎操作

       1.1,客戶端登入:這裡使用MySQL命令列實用程式(MySQL自帶的客戶端軟體),MySQL伺服器安裝在本機 

       登入命令>>mysql -h 127.0.0.1 -P 3306 -u root -p (可簡寫為mysql -u root -p)

       1.2,SQL程式碼註釋:--註釋語句     (好的習慣:註釋放在SQL程式碼之前)

       1.3,help; 可檢視命令列表          help 關鍵字;檢視該關鍵字的使用資訊(如help select; 檢視select相關使用資訊)
       \s  等同於 status;   檢視資料庫服務端的狀態
       \c  取消命令            \g  指示傳送SQL語句(相當於分號)    \G  欄位列表垂直顯示

       1.4,SQL語句不區分大小寫            SQL語句以分號 ;(或\g)結尾!

       1.5,退出MySQL客戶端:quit; 或 exit;

       1.6,更改SQL語句的分隔符

       DELIMITER //      --把sql語句的分隔符由;改為//

       DELIMITER ;       --把sql語句的分隔符由//改回其預設符號;

       2,基礎概念

       2.1 約束:constraint 管理如何插入或處理資料庫資料的規則

       2.2 主鍵:primary key 用來保證一個列(或一組列)中的值是唯一的,並且永不改動;即表中的一個列(或多個列)的值唯一標識表中的行

       一張表中必須有,並且只能有一個主鍵;一般把一張表的id設為主鍵
       主鍵的要求:
主鍵值唯一且不為NULL;
包含主鍵值的列不修改或更新;

主鍵值不能重用,即從表中刪除某一行,其主鍵值不分配給新行

--形式一:
id int primary key auto_increment
--形式二:
id int,
primary key(id)
--形式三:聯合主鍵
primary key(id,name)

        2.3 外來鍵:是表中的一個列,其值必須在另一表的主鍵中列出

FOREIGN KEY(vendor_id) REFERENCES vendor(id)

--同步更新,同步刪除
FOREIGN KEY(vendor_id) REFERENCES vendor(id)
ON UPDATE CASCADE
ON DELETE CASCADE

       2.4 唯一約束 UNIQUE:用來保證一個列(或一組列)中的資料唯一;這也是一種鍵

id int unique

聯合唯一:
unique(ip,port)  

三:庫操作 database

       資料庫(database)儲存有組織的資料的容器(通常是一個資料夾)

       show databases;   檢視所有存在的庫名
       use db1;    開啟資料庫db1      記住,必須先使用USE開啟資料庫,才能讀取其中的資料。

       select database();    檢視當前所在的庫

       建立庫:create database db1;(可指定字符集create database db1 charset utf8;)
       查庫的資訊:show create database db1;
       修改:alter database db1 charset gbk;

       刪:drop database db1;


四:表操作 table

       表是一種結構化的檔案,可用來儲存某種特定型別的資料,也稱之是某種特定型別資料的結構化清單(可把表想象為一個網格)

       列:colomn 表中的一個欄位(可看成表頭)。所有表都是由一個或多個列組成的

       行:row    表中的一條記錄

       欄位定義:中括號[ ]表示可選   豎線 | 表示或,即多選一
       column_definition:
           data_type  [NOT NULL | NULL]  [DEFAULT default_value]
             [AUTO_INCREMENT]  [UNIQUE [KEY]]  [[PRIMARY] KEY]
             [COMMENT 'string']
             [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]
             [STORAGE {DISK|MEMORY|DEFAULT}]
             [reference_definition]

       data_type:資料型別 格式如:INT[(length)] [UNSIGNED] [ZEROFILL] 或 CHAR[(length)]
       DEFAULT:設定預設值 
       AUTO_INCREMENT:自增,預設從1開始,步長為1
       UNIQUE:一種鍵   約束每個列值唯一

       PRIMARY KEY:主鍵,約束每個列值唯一且不為NULL

       建立表:create table 表名(欄位名1 欄位定義,欄位名2 欄位定義)

       查:
       show tables; 檢視該庫內所有的表名
       show table status; 檢視該庫內所有表的狀態資訊
       show create table t1; 查看錶t1的資訊
       describe t1;  簡寫:desc t1;   查看錶的結構資訊(也可show columns from t1;)
       show table status like 't1'; 查看錶t1的狀態資訊

       改:
       alter table t1 modify name char(16);
       alter table t1 add 欄位名 欄位定義  [first|after 欄位名]
       alter table t1 add [primary key(欄位名) | unique(欄位名) | foreign key(欄位名)]
       alter table t1 drop 欄位名
       alter table t1 change 舊欄位名 新欄位名 欄位定義
       rename [as|to] 新表名

       刪表:drop table t1;




五:資料型別

       資料型別datatype:所容許的資料的型別。每個表列都有相應的資料型別,它限制(或容許)該列中儲存的資料

       1,字串型別:

       1.1,有兩種基本的串型別:定長串和變長串
       定長串:接受長度固定的字串,其長度是在建立表時指定的;不允許多於指定的字元數目;若少於指定的字元數目,以空格補充。

       CHAR 屬於定長串

       變長串:儲存可變長度的文字;只有指定的資料得到儲存(最大的定長內的資料),額外的資料不儲存。

       VARCHAR 和 TEXT 屬於變長串


    BINARY(M):與CHAR類似,但只是用來存二進位制字串;M不寫預設為1

    VARBINARY(M):與VARCHAR類似,但只是用來存二進位制字串

       1.2,CHAR 與 VARCHAR的比較

    當CHAR值被儲存時,它們被用空格填充到指定的長度。 當檢索到CHAR值時,除非啟用了PAD_CHAR_TO_FULL_LENGTH SQL模式,否則將刪除尾隨空格。

       與CHAR相反,VARCHAR值儲存為1位元組或2位元組長度字首加資料。 長度字首表示該值中的位元組數。 如果值不超過255個位元組,則列使用一個長度位元組,如果值可能需要超過255個位元組,則使用兩個長度位元組。

       MySQL處理定長列遠比處理變長列快得多;MySQL不允許對變長列(或一個列的可變部分)進行索引,這也會極大地影響效能。所有使用CHAR效能更優,但存在浪費儲存空間的問題;使用VARCHAR一定程度上節省儲存空間,但效能上較差

       1.3, 二進位制資料型別:字串型別的一種

       二進位制資料型別主要用來儲存很大的二進位制字串,如影象、多媒體等

       BLOB是一個二進位制大物件,可以容納可變數量的資料;BLOB值被視為二進位制字串。


       2,數值型別

       2.1 整型

       INT[(M)] [UNSIGNED] [ZEROFILL]:

       M:表示最大的顯示寬度

       UNSIGNED:指定為無符號的

       ZEROFILL:指定用0填充

整型
type 儲存位元組 有符號範圍(預設)signed 無符號範圍unsigned
TINYINT        1-128 to 1270 to 255
SMALLINT        2-32768 to 327670 to 65535
MEDIUMINT        3-8388608 to 83886070 to 16777215
INT(INTEGER)        4-2147483648 to 21474836470 to 4294967295
BIGINT        8-2^63 to 2^63-10 to 2^64-1
2.2 浮點型       FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]

       M:數字總位數

       D:小數點後的數字位數

       UNSIGNED:指定為無符號的

       ZEROFILL:指定用0填充

浮點型
型別 名稱精確度 取值範圍
FLOAT單精度浮點數能精確到約7位小數允許值為-3.402823466E + 38到-1.175494351E-38,0
和1.175494351E-38到3.402823466E + 38
DOUBLE雙精度浮點數能精確到15位小數-1.7976931348623157E + 308至-2.2250738585072014E-308,0
和2.2250738585072014E-308至1.7976931348623157E + 308
DECIMAL(或DEC)精度可變浮點數能精確到30位小數(M,D)  最大(65,30) 預設(10,0)

       3,日期型別


       注意:從MySQL 5.6.6開始,YEAR(2)已過時。 現有表中的YEAR(2)列與以前一樣被處理,但新的或變更表中的YEAR(2)被轉換為YEAR(4)。

六:表關係與使用者操作

1,表關係
①一對多/多對一:

關聯方式:在多的一方定義foreign key

②多對多:

關聯方式:建立第三張表,定義兩個foreign key關聯第一張表和第二張表

③一對一:

關聯方式:同時定義unique + foreign key 

2,使用者操作

--檢視所有的使用者
use mysql;
SELECT user from user;

--建立新使用者
CREATE USER rock1 IDENTIFIED BY '123';
--更改使用者名稱
RENAME USER rock1 TO rock;

--更改密碼
SET PASSWORD FOR rock = Password('new123');
SET PASSWORD = Password('123');

--刪除使用者
DROP USER rock;

--檢視某個使用者的許可權
SHOW GRANTS FOR rock;

--設定使用者許可權
GRANT SELECT ON tb1.* TO rock;

--設定某使用者全部許可權
GRANT ALL TO rock;

--解除使用者許可權
REVOKE SELECT ON tb1.* FROM rock;