目錄
一、mysql概述
二、下載安裝
三、數據庫操作
四、數據表操作
五、表內容操作
一、mysql概述
MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬于 Oracle 旗下產品。MySQL 是最流行的關系型數據庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關系數據庫管理系統) 應用軟件。
MySQL是一種關系數據庫管理系統,關系數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度并提高了靈活性。
MySQL所使用的 SQL 語言是用于訪問數據庫的最常用標準化語言。MySQL 軟件采用了雙授權政策,分為社區版和商業版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇 MySQL 作為網站數據庫。
二、下載安裝
1. Windows
下載地址:
解壓并初始化:
如果想要讓MySQL安裝在指定目錄,那么就將解壓后的文件夾移動到指定目錄,如:C:mysql-5.7.18-winx64
MySQL解壓后的 bin 目錄下有一大堆的可執行文件,若C:mysql-5.7.18-winx64目錄下無data文件夾,新建一個空data文件夾后執行如下命令初始化數據:
cd c:mysql-5.7.18-winx64bin mysqld --initialize-insecure
啟動服務:
# 進入可執行文件目錄 cd c:mysql-5.7.18-winx64bin # 啟動MySQL服務 mysqld
啟動MySQL客戶端并連接MySQL服務:
由于初始化時使用的【mysqld –initialize-insecure】命令,其默認未給root賬戶設置密碼
# 進入可執行文件目錄 cd c:mysql-5.7.18-winx64bin # 連接MySQL服務器 mysql -u root -p # 提示請輸入密碼,直接回車
到此為止,MySQL服務端已經安裝成功并且客戶端已經可以連接上,以后再操作MySQL時,只需要重復上述步驟即可。但是,上述步驟中重復的進入可執行文件目錄比較繁瑣,如想日后操作簡便,可以做如下操作。
添加環境變量,將MySQL可執行文件添加到環境變量中,如此一來,以后再啟動服務并連接時,僅需:
# 啟動MySQL服務,在終端輸入 mysqld # 連接MySQL服務,在終端輸入: mysql -u root -p
上一步解決了一些問題,但不夠徹底,因為在執行 mysqld 啟動MySQL服務器時,當前終端會被hang住,那么做一下設置即可解決此問題:
將MySQL服務制作成windows服務,
# 制作MySQL的Windows服務,在終端執行此命令: "c:mysql-5.7.18-winx64binmysqld" --install # 移除MySQL的Windows服務,在終端執行此命令: "c:mysql-5.7.18-winx64binmysqld" --remove
注冊成服務之后,以后再啟動和關閉MySQL服務時,僅需執行如下命令:
# 啟動MySQL服務 net start mysql # 關閉MySQL服務 net stop mysql
2. Linux
安裝:
yum install mysql-server
服務端啟動:
mysql.server start
客戶端連接:
連接: mysql -h host -u user -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 或者 Control+D
三、數據庫操作?
1. 顯示數據庫
show databases; 默認數據庫: mysql - 用戶權限相關數據 test - 用于用戶測試數據 information_schema - MySQL本身架構相關數據
2. 創建數據庫
# utf-8create database db_name default charset utf8 collate utf8_general_ci; # gbkcreate database db_name default charset gbk collate gbk_chinese_ci;
3. 使用數據庫
use db_name; #顯示當前使用的數據庫中的所有表: show tables;
4. 用戶管理
創建用戶 create user '用戶名'@'IP地址' identified by '密碼'; 刪除用戶 drop user '用戶名'@'IP地址'; 修改用戶 rename user '用戶名'@'IP地址' to '新用戶名'@'IP地址';; 修改密碼 set password for '用戶名'@'IP地址' = Password('新密碼') PS:用戶權限相關數據保存在mysql數據庫的user表中,所以也可以直接對其進行操作(不建議)
5. 授權管理
show grants for '用戶'@'IP地址' -- 查看權限grant 權限 on 數據庫.表 to '用戶'@'IP地址' -- 授權revoke 權限 on 數據庫.表 from '用戶'@'IP地址' -- 取消權限
權限:
all privileges 除grant外的所有權限select 僅查權限select,insert 查和插入權限 ... usage 無訪問權限alter 使用alter tablealter routine 使用alter procedure和drop procedurecreate 使用create tablecreate routine 使用create procedurecreate temporary tables 使用create temporary tablescreate user 使用create user、drop user、rename user和revoke all privilegescreate view 使用create viewdelete 使用deletedrop 使用drop tableexecute 使用call和存儲過程file 使用select into outfile 和 load data infilegrant option 使用grant 和 revokeindex 使用indexinsert 使用insert lock tables 使用lock tableprocess 使用show full processlistselect 使用select show databases 使用show databases show view 使用show viewupdate 使用update reload 使用flushshutdown 使用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地址為%)
示例:
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'特殊的: flush privileges,將數據讀取到內存中,從而立即生效。
四、數據表操作
1. 創建表
create table 表名( 列名 類型 是否可以為空, 列名 類型 是否可以為空 )engine=innodb default charset=utf8
?
是否可空:
null 表示空,非字符串not null - 不可空
默認值:
默認值,創建列時可以指定默認值,當插入數據時如果未主動設置,則自動添加默認值create table tb1( nid int not null defalut 2, num int not null)
自增:
auto_increment session auto_increment_increment session auto_increment_offset global auto_increment_increment global auto_increment_offset;
?
主鍵:
auto_increment
?
外鍵:
外鍵,一個特殊的索引,只能是指定內容create table color( nid int not null primary key, name char(16) not null)create table fruit( nid int not null primary key, smt char(32) null , color_id int not null,constraint fk_cc foreign key (color_id) references color(nid) )
2. 刪除表
drop table tb_name;
?
3. 清空表
delete from tb_name; 只清空內容,主鍵值未清空,若再次插入,則主鍵會繼續自增truncate table tb_name; 完全清空
?
4. 修改表?
添加列: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;
?
5. 基本數據類型
MySQL的數據類型大致分為:數值、時間和字符串
數值:
bit[(M)] 二進制位(101001),m表示二進制位的長度(1-64),默認m=1tinyint[(m)] [unsigned] [zerofill] 小整數,數據類型用于保存一些范圍的整數數值范圍: 有符號: -128 ~ 127. 無符號: 0 ~ 255 特別的: MySQL中無布爾值,使用tinyint(1)構造。int[(m)][unsigned][zerofill] 整數,數據類型用于保存一些范圍的整數數值范圍: 有符號: -2147483648 ~ 2147483647 無符號: 0 ~ 4294967295 特別的:整數類型中的m僅用于顯示,對存儲范圍無限制。例如: int(5),當插入數據2時,select 時數據顯示為: 00002bigint[(m)][unsigned][zerofill] 大整數,數據類型用于保存一些范圍的整數數值范圍: 有符號: -9223372036854775808 ~ 9223372036854775807 無符號: 0 ~ 18446744073709551615decimal[(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 **** 數值越大,越不準確 ****
?
?
時間:
DATE YYYY-MM-DD(1000-01-01/9999-12-31) TIME HH:MM:SS('-838:59:59'/'838:59:59')YEARYYYY(1901/2155)DATETIMEYYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y)TIMESTAMPYYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某時)
字符串:
char (m) char數據類型用于表示固定長度的字符串,可以包含最多達255個字符。其中m代表字符串的長度。 PS: 即使數據小于m長度,也會占用m長度varchar(m) varchars數據類型用于變長的字符串,可以包含最多達255個字符。其中m代表該數據類型所允許保存的字符串的最大長度,只要長度小于該最大值的字符串都可以被保存在該數據類型中。 注:雖然varchar使用起來較為靈活,但是從整個系統的性能角度來說,char數據類型的處理速度更快,有時甚至可以超出varchar處理速度的50%。因此,用戶在設計數據庫時應當綜合考慮各方面的因素,以求達到最佳的平衡texttext數據類型用于保存變長的大字符串,可以組多到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');
更多參考:
五、表內容操作
1. 增
insert into 表 (列名,列名...) values (值,值,值...)insert into 表 (列名,列名...) values (值,值,值...),(值,值,值...)insert into 表 (列名,列名...) select (列名,列名...) from 表
2. 刪
delete from 表delete from 表 where id=1 and name='alex'
3. 改
update 表 set name = 'alex' where id>1
4. 查
select * from 表select * from 表 where id > 1select nid,name,gender as gg from 表 where id > 1
5. 其它
1 a、條件 2 select * from 表 where id > 1 and name != 'alex' and num = 12; 3 4 select * from 表 where id between 5 and 16; 5 6 select * from 表 where id in (11,22,33) 7 select * from 表 where id not in (11,22,33) 8 select * from 表 where id in (select nid from 表) 9 10 b、通配符11 select * from 表 where name like 'ale%' - ale開頭的所有(多個字符串)12 select * from 表 where name like 'ale_' - ale開頭的所有(一個字符)13 14 c、限制15 select * from 表 limit 5; - 前5行16 select * from 表 limit 4,5; - 從第4行開始的5行17 select * from 表 limit 5 offset 4 - 從第4行開始的5行18 19 d、排序20 select * from 表 order by 列 asc - 根據 “列” 從小到大排列21 select * from 表 order by 列 desc - 根據 “列” 從大到小排列22 select * from 表 order by 列1 desc,列2 asc - 根據 “列1” 從大到小排列,如果相同則按列2從小到大排序23 24 e、分組25 select num from 表 group by num26 select num,nid from 表 group by num,nid27 select num,nid from 表 where nid > 10 group by num,nid order nid desc28 select num,nid,count(*),sum(score),max(score),min(score) from 表 group by num,nid29 30 select num from 表 group by num having max(id) > 1031 32 特別的:group by 必須在where之后,order by之前33 34 f、連表35 無對應關系則不顯示36 select A.num, A.name, B.name37 from A,B38 Where A.nid = B.nid39 40 無對應關系則不顯示41 select A.num, A.name, B.name42 from A inner join B43 on A.nid = B.nid44 45 A表所有顯示,如果B中無對應關系,則值為null46 select A.num, A.name, B.name47 from A left join B48 on A.nid = B.nid49 50 B表所有顯示,如果B中無對應關系,則值為null51 select A.num, A.name, B.name52 from A right join B53 on A.nid = B.nid54 55 g、組合56 組合,自動處理重合57 select nickname58 from A59 union60 select name61 from B62 63 組合,不處理重合64 select nickname65 from A66 union all67 select name68 from B
?
?
?
參考資料:
1.?
2.?