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 127 | 0 to 255 |
SMALLINT | 2 | -32768 to 32767 | 0 to 65535 |
MEDIUMINT | 3 | -8388608 to 8388607 | 0 to 16777215 |
INT(INTEGER) | 4 | -2147483648 to 2147483647 | 0 to 4294967295 |
BIGINT | 8 | -2^63 to 2^63-1 | 0 to 2^64-1 |
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;