入門或者提升MySql染乌,那推薦一書《Mysql必知必會(huì)》冗茸,提取鏈接:
鏈接: https://pan.baidu.com/s/1lemqy8kaFEa4ycpSFj8qGw 提取碼: mgtt
一痴荐、連接與退出
1铆铆、登錄連接數(shù)據(jù)庫(kù)
通過(guò)window+R快捷鍵种蝶,輸入cmd员萍,按回車啟動(dòng)命令,輸入:mysql -u root -p 隨后輸入密碼即可犀盟。PS:root為用戶名而晒,實(shí)際操作中請(qǐng)輸入實(shí)際用戶號(hào)。
2阅畴、連接數(shù)據(jù)庫(kù)以后倡怎,一般操作命令:
show databases; --- 顯示所有數(shù)據(jù)庫(kù)
use databaseName; ---選擇指定數(shù)據(jù)庫(kù)
show tables; ---顯示該數(shù)據(jù)庫(kù)下所有表
select database(); ---查看當(dāng)前自己所在數(shù)據(jù)庫(kù)
3、查詢當(dāng)前安裝的MySQL服務(wù)器的版本號(hào)
select version();
4贱枣、退出數(shù)據(jù)庫(kù)
mysql> \q;
mysql> exit; --- 兩命令皆可
二监署、導(dǎo)入導(dǎo)出——推薦Navicat For Mysql
1)導(dǎo)出數(shù)據(jù)庫(kù) mysqldump命令(mysql的安裝路徑,即此命令的路徑)
1纽哥、導(dǎo)出數(shù)據(jù)庫(kù)(包含數(shù)據(jù)+表結(jié)構(gòu))
mysqldump -u root -p test > test_20160513.sql
mysqldump -t test -uroot -p > test222.sql
回車后提示輸入密碼
2钠乏、導(dǎo)出數(shù)據(jù)庫(kù)(只導(dǎo)出表結(jié)構(gòu))--- 多加了一個(gè)-d命令,注意區(qū)別
mysqldump -uroot -p -d test > test1.sql
mysqldump --opt -d test -u root -p > test_desc.sql
3春塌、導(dǎo)出數(shù)據(jù)庫(kù)中的某一張表
mysqldump -h localhost -u root -p test --opt T_CFN_LIMIT >T_CFN_LIMIT11.sql
4晓避、導(dǎo)出數(shù)據(jù)庫(kù)中某一張表的結(jié)構(gòu)(不導(dǎo)出數(shù)據(jù))
mysqldump -uroot -p -B test -- table T_CFN_LIMIT > T_CFN_LIMIT_desc.sql
5、導(dǎo)出數(shù)據(jù)庫(kù)中的數(shù)據(jù)和表結(jié)構(gòu)
mysqldump test -uroot -p > test_20180711.sql
6只壳、查詢結(jié)果導(dǎo)出為Excle[連接數(shù)據(jù)庫(kù)以后執(zhí)行]
select * from T_ECFN_PAY WHERE PAY_FLAG NOT IN ('A','C','6') AND VOU_DATE='20180101' INTO outfile '/home/tomcat/test2.xls' CHARACTER SET GBK
ps: 查詢語(yǔ)句 + INTO outfile + 路徑 + 設(shè)置編碼
2)導(dǎo)入數(shù)據(jù)庫(kù)
mysql>create database abc
mysql>use abc
mysql>set names utf8
導(dǎo)入數(shù)據(jù)(注意sql文件的路徑)
mysql>source /home/abc/abc.sql
方法2:
mysql>create database abc
mysql -u用戶名 -p密碼 數(shù)據(jù)庫(kù)名 < 數(shù)據(jù)庫(kù)名.sql
mysql -uabc_f -p abc < abc.sql
PS:該部分命令比較難記俏拱,一般推薦使用Navicat For Mysql(可視化工具)
三、修改密碼與增加用戶權(quán)限
1吼句、新建用戶
CREATE USER name IDENTIFIED BY 'aaa';
如:CREATE USER user_name [ @hostname ] [ IDENTIFIED BY [ PASSWORD ] 'pass_word' ];
2锅必、更改密碼
mysql>SET PASSWORD FOR name=PASSWORD('bbb');
3、權(quán)限管理
mysql>SHOW GRANTS FOR name; //查看name用戶權(quán)限
mysql>GRANT SELECT ON db_name.* TO name; //給name用戶db_name數(shù)據(jù)庫(kù)的所有權(quán)限
mysql>REVOKE SELECT ON db_name.* TO name; //GRANT的反操作惕艳,去除權(quán)限搞隐;
4、復(fù)制數(shù)據(jù)庫(kù)
全部復(fù)制:>CREATE TABLE tb_name2 SELECT * FROM tb_name;
部分復(fù)制:>CREATE TABLE tb_name2 SELECT id,name FROM tb_name;
四远搪、結(jié)構(gòu)化查詢語(yǔ)言
DDL:數(shù)據(jù)定義語(yǔ)言——用于建立劣纲、修改、刪除數(shù)據(jù)庫(kù)對(duì)象>表终娃、視圖、索引蒸甜、序列
DML:數(shù)據(jù)操作語(yǔ)言——用于增棠耕、刪、改表中的數(shù)據(jù)>DML是伴隨事務(wù)(TCL)控制的
TCL:事務(wù)控制語(yǔ)言——用來(lái)維護(hù)數(shù)據(jù)一致性的語(yǔ)句[給予數(shù)據(jù)庫(kù)一個(gè)后悔的機(jī)會(huì)]
DQL:數(shù)據(jù)查詢語(yǔ)言——必要的字句有兩部分組成>SELECT子句+FROM字句
DCL:用于執(zhí)行權(quán)限的授予和收回操作
一柠新、DDL:數(shù)據(jù)定義語(yǔ)言
作用:定義數(shù)據(jù)庫(kù)或表結(jié)構(gòu)
操作對(duì)象:數(shù)據(jù)庫(kù)或表結(jié)構(gòu)
關(guān)鍵字:CREATE窍荧、 ALTER、 DROP
1恨憎、創(chuàng)建數(shù)據(jù)庫(kù)
mysql> create database 數(shù)據(jù)庫(kù)名; //數(shù)據(jù)庫(kù)已經(jīng)存在或創(chuàng)建權(quán)限則執(zhí)行失敗蕊退。
mysql>CREATE TABLE table_name(
mysql>id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
mysql>name VARCHAR(60) NOT NULL
mysql>score TINYINT UNSIGNED NOT NULL DEFAULT 0,
mysql>PRIMARY KEY(id)
mysql>)ENGINE=InnoDB
mysql>DEFAULT charset=utf8;
第2行:id值郊楣,無(wú)符號(hào)、非空瓤荔、遞增——唯一性净蚤,可做主鍵。
第4行:設(shè)置默認(rèn)列值
第6行:設(shè)置表存儲(chǔ)引擎输硝,常用InnoDB和MyISAM今瀑;InnoDB可靠,支持事務(wù)点把;MyISAM高效不支持全文檢索
第7行:設(shè)置默認(rèn)的編碼橘荠,防止數(shù)據(jù)庫(kù)中文亂碼
如果有條件的創(chuàng)建數(shù)據(jù)表還可以使用
mysql>CREATE TABLE IF NOT EXISTS tb_name(........)
2、刪除數(shù)據(jù)庫(kù)
mysql> drop database 數(shù)據(jù)庫(kù)名;
3郎逃、創(chuàng)建表結(jié)構(gòu)
mysql>create table 表名(列名 列數(shù)據(jù)類型,列名 列數(shù)據(jù)類型......);
mysql>create table dept( //創(chuàng)建部門表
deptno int(11) primary key, //部門編號(hào),int型哥童,主鍵約束
deptname varchar(12) unique //部門名稱,varchar類型褒翰,唯一性約束
);
附:常用約束
a)主鍵約束:primary key --非空且唯一贮懈,一張表就定義一個(gè)主鍵
b)主鍵自增長(zhǎng):auto_increment
c)非空:not null --不允許插入null值,可定義多個(gè)非空約束
d)唯一性:unique --不允許重復(fù)影暴,但可以為空错邦,可定義多個(gè)唯一約束
e)默認(rèn)值:default 默認(rèn)值 --指定缺省值,在沒(méi)有添加值得情況下使用default后指定的默認(rèn)值
f)外鍵:foreign key(列名) references 外鍵表名(外鍵列名); //注意:有外鍵時(shí)型宙,創(chuàng)建表撬呢,先創(chuàng)建父表,再創(chuàng)建子表妆兑;插入數(shù)據(jù)魂拦,先插入父表,再插入子表搁嗓;刪除數(shù)據(jù)芯勘,先刪除子表中的數(shù)據(jù),再刪除父表中的數(shù)據(jù)腺逛。
4荷愕、查看表結(jié)構(gòu)
mysql> desc 表名; //常用
mysql> describe 表名;
mysql> show columns from 表名;
5、修改表名稱
mysql> alter table 原表名 rename to 新表名;
mysql> rename table 原表名 to 新表名;
例:mysql> alter table dept rename to de; //將dept表名稱改為de
6棍矛、修改表編碼字符集
mysql>alter table 表名 character set 字符集;
例:mysql>alter table 表名 character set gbk; //修改表的編碼字符集為gbk
7安疗、向表中添加新的列
mysql> alter table 表名 add 列名 列的數(shù)據(jù)類型 [<列的完整性約束>];
mysql>ALTER TABLE tb_name ADD COLUMN address varchar(80) NOT NULL;
8、修改表中的某一列
a)修改表中某一列的列名(同時(shí)可修改列的數(shù)據(jù)類型)
mysql>alter table 表名 change 原列名 新列名 列數(shù)據(jù)類型;
mysql>ALTER TABLE tb_name CHANGE name stu_name varchar(80) NOT NULL;
b)修改表中某一列的數(shù)據(jù)類型
mysql>alter table 表名 modify 列名 列新的數(shù)據(jù)類型;
9够委、刪除表中的某一列
mysql>alter table 表名 drop <column> 列名; //column可省略
10荐类、刪除表
mysql>drop table 表名; //徹底刪除表,數(shù)據(jù)庫(kù)中不會(huì)保留表結(jié)構(gòu)茁帽。注意與delete和truncate區(qū)別[truncate 和 delete 只刪除數(shù)據(jù)不刪除表的結(jié)構(gòu)(定義)]玉罐。
mysql>truncate 表名; //截?cái)啾斫Y(jié)構(gòu)屈嗤,刪除數(shù)據(jù)
11、創(chuàng)建和刪除索引
CREATE INDEX - 創(chuàng)建索引(搜索鍵)
DROP INDEX - 刪除索引
12吊输、全文檢索——MATCH和AGAINST
1饶号、SELECT MATCH(note_text)AGAINST('PICASO') FROM tb_name;
2、InnoDB引擎不支持全文檢索璧亚,MyISAM可以讨韭;
13、視圖
1癣蟋、創(chuàng)建視圖
mysql>CREATE VIEW name AS SELECT * FROM tb_name WHERE ~~ ORDER BY ~~;
2透硝、視圖的特殊作用:
a、簡(jiǎn)化表之間的聯(lián)結(jié)(把聯(lián)結(jié)寫在select中)疯搅;
b濒生、重新格式化輸出檢索的數(shù)據(jù)(TRIM,CONCAT等函數(shù))幔欧;
c罪治、過(guò)濾不想要的數(shù)據(jù)(select部分)
d、使用視圖計(jì)算字段值礁蔗,如匯總這樣的值觉义。
14、觸發(fā)器:觸發(fā)器是指在進(jìn)行某項(xiàng)指定操作時(shí)浴井,觸發(fā)觸發(fā)器內(nèi)指定的操作
1晒骇、支持觸發(fā)器的語(yǔ)句有DELETE、INSERT磺浙、UPDATE,其他均不支持
2洪囤、創(chuàng)建觸發(fā)器:
mysql>CREATE TRIGGER trig AFTER INSERT ON ORDERS FOR EACH ROW SELECT NEW.orser_name;
mysql>INSERT語(yǔ)句,觸發(fā)語(yǔ)句撕氧,返回一個(gè)值
3瘤缩、刪除觸發(fā)器
mysql>DROP TRIGGER trig;
二、DML: 數(shù)據(jù)操作語(yǔ)言
作用:操作表中的數(shù)據(jù)
關(guān)鍵字:INSERT伦泥、 UPDATE 剥啤、DELETE
1、insert語(yǔ)句需字段和值一一對(duì)應(yīng)不脯,但一般不建議直接insert
2府怯、修改某一列的所有字段值為新的字段值
mysql>update 表名 set 列名=新字段值;
mysql>update 表名 set 列名=新字段值,列名=新字段值...; //批量修改多個(gè)列的所有字段值都新字段值。
如:update fei set name='秋冬',age=27;
3跨新、修改某一條記錄的字段值
mysql>update 表名 set列名=新字段值 where 列名=字段值;
mysql>update 表名 set 列名=新字段值,列名=新字段值... where 列名=字段值; //批量修改多個(gè)字段的字段值都為該值富腊。
如:>update fei set name='林拜' where age=27;
4坏逢、刪除表中的某一條記錄
mysql>delete from 表名 where 列名=列值;
例:刪除學(xué)生表(student)中名字(sname)為'張三'的學(xué)生的記錄
mysql>delete from student where sname='張三'; //注意域帐,由于學(xué)生名字有重復(fù)的可能赘被,所以會(huì)把所有名字叫張三的學(xué)生信息都從student表中刪除掉,所以刪除單條記錄的條件可以參照主鍵約束的列肖揣,或者唯一約束的列民假,或者在已確定沒(méi)有重復(fù)的情況下自行確定where后面選的條件。
5龙优、刪除表
mysql>delete from 表名;
補(bǔ)充:truncate 羊异、delete與drop
------ 相同點(diǎn) ------
1.truncate和不帶where子句的delete、以及drop都會(huì)刪除表內(nèi)的數(shù)據(jù)彤断。
2.drop野舶、truncate都是DDL語(yǔ)句(數(shù)據(jù)定義語(yǔ)言),執(zhí)行后會(huì)自動(dòng)提交。
------- 不同點(diǎn) ------
1) truncate 和 delete 只刪除數(shù)據(jù)不刪除表的結(jié)構(gòu)[刪除表中的所有行宰衙,但表結(jié)構(gòu)及其列平道、約束、索引等保持不變]
2)delete 語(yǔ)句會(huì)放到 rollback segement 中供炼,事務(wù)提交之后才生效一屋;truncate、drop是操作立即生效袋哼,原數(shù)據(jù)不放到 rollback segment 中冀墨,不能回滾。
3)執(zhí)行速度: drop> truncate > delete
4)安全性:drop 和 truncate使用需注意涛贯,若無(wú)備份诽嘉,一般不用。一般來(lái)說(shuō)疫蔓,刪除部分?jǐn)?shù)據(jù)含懊,用delete帶where子句.刪除整張表用drop,如果
想保留表而將所有數(shù)據(jù)刪除衅胀,且和事務(wù)無(wú)關(guān)岔乔,用truncate即可。
5)delete是DML語(yǔ)句,不會(huì)自動(dòng)提交滚躯。drop/truncate都是DDL語(yǔ)句,執(zhí)行后會(huì)自動(dòng)提交雏门。
6)對(duì)于由FOREIGN KEY約束引用的表,不能使用TRUNCATE TABLE掸掏,而應(yīng)使用不帶WHERE子句的DELETE語(yǔ)句茁影。因?yàn)門RUNCATE TABLE不記錄在日志中,所以它不能激活觸發(fā)器丧凤。
7)TRUNCATE TABLE不能用于參與了索引視圖的表募闲。
三、DQL:數(shù)據(jù)查詢語(yǔ)言[按照實(shí)際類別劃分 可以歸為DML]
關(guān)鍵字:SELECT
1愿待、查詢表中所有記錄
mysql> select * from 表名;
2浩螺、查詢表中的某一條記錄
mysql>select * from 表名 where 列名=字段值;
如:select age,grade from student where sname='張三';
3靴患、濾重[過(guò)濾表中重復(fù)數(shù)據(jù)(關(guān)鍵字distinct)]
mysql>select distinct 列名 from 表名; //返回該字段下的所有字段值,若有相同字段值,則只返回一個(gè)。
4要出、排序(關(guān)鍵字order by)
mysql>select * from 表名 order by 列名 asc; //默認(rèn)是升序,asc一般可省略鸳君。
mysql>select * from 表名 order by 列名 desc; //desc是降序,不可省略
如:select sno,sname,grade from student order by grade desc; //依據(jù)成績(jī)降序排列
5患蹂、分頁(yè)查詢(關(guān)鍵字limit)
mysql>select * from 表名 limit (pageNo-1)*pagesize,pagesize; // pageNo-->要查詢的頁(yè)數(shù)或颊,pageSize-->每頁(yè)顯示的記錄數(shù)
如:select * from 表名 limit 0,5; //查詢第一頁(yè) 每一頁(yè)顯示5條
6、模糊查詢(關(guān)鍵字like)
mysql>select * from 表名 where 列名 like ' % '; //%指代任意字符
如:select * from student where sname like '陳%'; //查詢姓陳的學(xué)生
select * from student where sname like '飛%'; //指代一個(gè)字符 查詢學(xué)生表中姓名第二個(gè)字為飛的學(xué)生信息
7传于、范圍查詢(關(guān)鍵字between .. and .. , in())
mysql>select * from 表名 where 列名 between 字段值(小) and 字段值(大); //包含兩端的字段值
mysql>select * from 表名 where 列名 in (字段值1,字段值2,......);
如: mysql>select * from student where chinese between 80 and 90; //語(yǔ)文成績(jī)?cè)?0~90分之間的所有學(xué)生信息(包含80和90)
mysql>select * from student where math in (60,70,80,90); //數(shù)學(xué)成績(jī)?yōu)?0分,70分,80分和90分的所有學(xué)生信息
8囱挑、別名
mysql>select 字段名 別名,字段名 別名,... from 表名;
如:mysql>select sname 姓名,chinese+math+english 總分 from sc; //查詢學(xué)生成績(jī)表(sc)中學(xué)生姓名(sname)及總成績(jī),sname字段用姓名表示,所有科目得分總和用總分表示。
9沼溜、分組查詢(關(guān)鍵字group by)
mysql>select 列名,count(列名) from 表名 group by 列名;
如:mysql>select deptno,count(empno) from emp group by deptno; //empno--員工編號(hào)看铆,emp--員工表 查詢每個(gè)部門的員工人數(shù),根據(jù)部門編號(hào)(deptno)對(duì)員工進(jìn)行分組,返回各部門員工人數(shù)。
having:對(duì)分組后的結(jié)果進(jìn)行條件限制
如:mysql>select deptno,count(empno) from emp group by deptno having count(empno)>2; //查詢每個(gè)部門員工人數(shù)大于2的所有記錄,返回人數(shù)大于2人的部門編號(hào)及其部門人數(shù)盛末。
10弹惦、表連接查詢(同時(shí)涉及多個(gè)表的查詢稱為連接查詢,用來(lái)連接兩個(gè)表的條件稱為連接條件)
內(nèi)連接:表1 join 表2 on 表1.列名=表2.列名;
如:mysql> select empno,empname,emp.deptno,deptname from emp join dept on emp.deptno=dept.deptno; //查詢員工表(emp)中的員工號(hào)(empno)、員工姓名(empname)悄但、部門號(hào)(deptno)和部門名稱(deptname),部門名稱字段在部門表(dept)中.
左外連接:表1 left join 表2 on 表1.列名=表2.列名;
表1作為主表棠隐,主表中的所有記錄都會(huì)輸出,和從表匹配不上的字段用null進(jìn)行補(bǔ)齊檐嚣。
如:mysql> select empno,empname,emp.deptno,deptname from emp left join dept on emp.deptno=dept.deptno; //以員工表(emp)為主表實(shí)現(xiàn)上述查詢
右外連接:表1 right join 表2 on 表1.列名=表2.列名;
表2為主表助泽,主表中的所有記錄都會(huì)輸出,和從表匹配不上的字段用null進(jìn)行補(bǔ)齊嚎京。
如:mysql> select empno,empname,emp.deptno,deptname from emp right join dept on emp.deptno=dept.deptno; //以部門表(dept)為主表實(shí)現(xiàn)上述查詢
11嗡贺、復(fù)制表
mysql>create table 新表表名 select * from 被復(fù)制表表名; //新表的表結(jié)構(gòu)和數(shù)據(jù)與原表相同。
mysql>create table 新表表名 select 列名1,列名2,... from 被復(fù)制表表名; //可以通過(guò)在select查詢中指定字段來(lái)限制出現(xiàn)在新表中的字段
mysql>create table 新表表名 select * from 被復(fù)制表表名 where 0=1; //通過(guò)使用select語(yǔ)句創(chuàng)建已存在表的空副本(即創(chuàng)建相同表結(jié)構(gòu),但不復(fù)制原表數(shù)據(jù)過(guò)來(lái)),并且返回一個(gè)空結(jié)果集鞍帝。
12诫睬、聚合函數(shù)
a)返回指定列非空值的個(gè)數(shù)
mysql>select count(列名) from 表名;
如:mysql>select count(sno) from student; //查詢學(xué)生表(student)中學(xué)生的總?cè)藬?shù):根據(jù)學(xué)生學(xué)號(hào)計(jì)算學(xué)生個(gè)數(shù),學(xué)號(hào)不為空且唯一
b)返回指定列的最值
mysql>select max(列名) from 表名; //返回指定列的最大值
如:mysql>select sname,max(sage) from student; //查詢學(xué)生表(student)中年齡(sage)最大的學(xué)生姓名(sname)和年齡
mysql>select min(列名) from 表名; //返回指定列的最小值
如:mysql>select sno,min(chinese) from sc; //查詢學(xué)生成績(jī)表(sc)中語(yǔ)文成績(jī)(chinese) 最低的學(xué)生的學(xué)號(hào)(sno)和語(yǔ)文成績(jī)
c)返回指定列的平均值
mysql>select avg(列名) from 表名;
d)返回指定列的所有值之和
mysql>select sum(列名) from 表名;
13、UNION規(guī)則——可以執(zhí)行兩個(gè)語(yǔ)句(可以去除重復(fù)行)
[可以參考W3CSchool說(shuō)明:http://www.w3school.com.cn/sql/sql_union.asp]
UNION 操作符用于合并兩個(gè)或多個(gè)SELECT 語(yǔ)句的結(jié)果集帕涌。
PS:SELECT 語(yǔ)句必須擁有相同數(shù)量的列摄凡,且列也必須擁有相似的數(shù)據(jù)類型。同時(shí)蚓曼,每條 SELECT 語(yǔ)句中的列的順序必須相同亲澡。
UNION是去除重復(fù)的列,而UNION ALL是列出所有的列
14纫版、MySQL的正則表達(dá)式:
1床绪、Mysql支持REGEXP的正則表達(dá)式:
mysql>SELECT * FROM tb_name WHERE name REGEXP '^[A-D]' //找出以A-D 為開頭的name
2、特殊字符需要轉(zhuǎn)義
附:MySQL常見(jiàn)函數(shù):
1、字符串鏈接——CONCAT()
mysql>SELECT CONCAT(name,'=>',score) FROM tb_name
2癞己、數(shù)學(xué)函數(shù):
AVG裹匙、SUM、MAX末秃、MIN、COUNT籽御;
3练慕、文本處理函數(shù):
TRIM、LOCATE技掏、UPPER铃将、LOWER、SUBSTRING
4哑梳、條件控制符:
=劲阎、>、<鸠真、<>悯仙、IN(1,2,3......)、BETWEEN a AND b吠卷、NOT AND 锡垄、OR Linke()用法中
% 為匹配任意、
_ 匹配一個(gè)字符(可以是漢字)
IS NULL 空值檢測(cè)
5祭隔、時(shí)間函數(shù):
DATE()货岭、CURTIME()、DAY()疾渴、YEAR()千贯、NOW().....
四、DCL:數(shù)據(jù)控制語(yǔ)言
GRANT - 授權(quán)
REVOKE - 撤銷授權(quán)
DENY - 拒絕授權(quán)
五搞坝、TCL:事物控制語(yǔ)言
SAVEPOINT - 設(shè)置保存點(diǎn)
ROLLBACK - 回滾
COMMIT - 提交
SET TRANSACTION – 改變事務(wù)選項(xiàng)
如有不妥搔谴,歡迎指正。