2018-4-25mysql数据库基础
2018-4-25mysql數(shù)據(jù)庫(kù)基礎(chǔ)
新建?模板?小書(shū)匠?1. 數(shù)據(jù)庫(kù)分類
RDBMS:關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)
非結(jié)構(gòu)化和半結(jié)構(gòu)化的數(shù)據(jù):NoSQL(Not only SQL)
2. mysql簡(jiǎn)介
1.MYSQL數(shù)據(jù)庫(kù)由服務(wù)器端和客戶端(C/S)組成。服務(wù)器中主要存儲(chǔ)數(shù)據(jù)文件和服務(wù)程序。
2.要訪問(wèn)數(shù)據(jù)庫(kù)服務(wù)器,必須通過(guò)客戶端。
SQL:結(jié)構(gòu)化的查詢語(yǔ)言,以mysql數(shù)據(jù)庫(kù)作為載體。
3.客戶端可以分為兩大類:命令行(自帶),可視化工具。
Mysql的核心是存儲(chǔ)引擎,常用的有InnoDB(事務(wù)性數(shù)據(jù)庫(kù)的首選引擎,支持事務(wù)安全表(ACID)),MyISAM(數(shù)據(jù)倉(cāng)庫(kù),檢索速度快)
4.通過(guò)命令行客戶端訪問(wèn)數(shù)據(jù)庫(kù)服務(wù)器:
1) 配置環(huán)境變量path
path = %path%;+路徑
2) 打開(kāi)命令行窗口
開(kāi)始—輸入”cmd”—回車
3) 啟動(dòng)mysql客戶端程序(mysql.exe),指定帳號(hào)和密碼,連接服務(wù)器
mysql -u root –p —回車—輸入密碼1234—回車
mysql -h +服務(wù)器地址— -u root –p
4) 查看當(dāng)前有哪些數(shù)據(jù)庫(kù):
mysql> show databases;
5) 使用某個(gè)數(shù)據(jù)庫(kù)之前,要先選擇它:
mysql> use world;
6) 看看當(dāng)前這個(gè)數(shù)據(jù)庫(kù)中,有哪些數(shù)據(jù)表:
mysql> show tables;
7) 退出服務(wù)器:mysql>exit
3.常用命令
創(chuàng)建數(shù)據(jù)庫(kù):mysql>create database+數(shù)據(jù)庫(kù)名;
刪除指定的數(shù)據(jù)庫(kù):mysql>drop database+數(shù)據(jù)庫(kù)名;
打開(kāi)要操作的數(shù)據(jù)庫(kù):mysql>use+數(shù)據(jù)庫(kù)名;
查看有哪些數(shù)據(jù)表:mysql>show tables;
創(chuàng)建數(shù)據(jù)表(部門表:depid,depname): mysql>creat table department(depid int,depname varchar(100));
查看數(shù)據(jù)表的結(jié)構(gòu):mysql>desc department;
主鍵約束:行完整性—要求每行記錄不能重復(fù),
主鍵能夠唯一的標(biāo)識(shí)表中的一條記錄。
創(chuàng)建數(shù)據(jù)表,首先設(shè)計(jì)表的結(jié)構(gòu)(有哪些字段/列):
員工信息表
部門信息表
create table department( depid int primary key, depname varchar(50) not null, location varchar(100) );一次性導(dǎo)入多條記錄,只需要在values后面跟多個(gè)括號(hào),括號(hào)之間用逗號(hào)連接,最后一個(gè)跟分號(hào)。括號(hào)內(nèi)依次輸入字段對(duì)應(yīng)的值。
修改表結(jié)構(gòu):
alter table
將數(shù)據(jù)表的名稱department改為depart:
alter table department rename depart;
為department增加一個(gè)新的字段location varchar(200):
alter table department add location varchar(200);
修改已有字段的數(shù)據(jù)類型:
alter table department modify location varchar(100);
修改已有字段的名稱和數(shù)據(jù)類型:
alter table department change location address varchar(100);
在數(shù)據(jù)庫(kù)中已經(jīng)存在的數(shù)據(jù)表的結(jié)構(gòu)上增加表字段:
alter table +表名 add +字段及字段的各種屬性
在數(shù)據(jù)庫(kù)中已經(jīng)存在的數(shù)據(jù)表的結(jié)構(gòu)上刪除表字段:
alter table +表名 drop +字段
刪除表的外鍵約束:
alter table+表名 drop foreign key +外鍵字段
刪除/添加表的主鍵約束:
alter table+表名 drop(add) primary key(字段名)
刪除數(shù)據(jù)表
就是將數(shù)據(jù)庫(kù)中已經(jīng)存在的表從數(shù)據(jù)中刪除,在刪除表的同時(shí),表的定義和表中所有的數(shù)據(jù)均會(huì)被刪除,刪除被其他表關(guān)聯(lián)的主表,分幾種情況:
先刪除與它關(guān)聯(lián)的子表,再刪除父表
如果要保留子表, 則只需將關(guān)聯(lián)的表的外鍵約束條件取消,然后就可以刪除父表
為id=2002的員工分配部門:
update employee set deptid=103 where empid=2002;
將員工2006調(diào)動(dòng)到市場(chǎng)營(yíng)銷部,并且月薪上漲10%:
update employee set deptid=103 ,salary=salary*1.1 where empid=2006;
將所有月薪低于10000的員工薪資上漲10%:
update employee set salary=salary*1.1 where salary<10000;
刪除記錄:
delete from department where deptid=101;
查看數(shù)據(jù)表中已有的數(shù)據(jù):
select * from+表的名稱;
查看基本表結(jié)構(gòu):
desc+表名
刪除表內(nèi)的所有的數(shù)據(jù):
delete/truncate table +表名;
delete與truncate刪除數(shù)據(jù)的區(qū)別:
delete進(jìn)行刪除時(shí)是逐列進(jìn)行檢查,具有約束的列不能被直接刪除,具有數(shù)據(jù)的安全性及引用的完整性;
truncate是直接刪除整張表然后再進(jìn)行表的重建;
單表查詢
查看表內(nèi)滿足條件的信息:select * from+表名 where+條件(*表示所有的字段),若只查詢某些字段的滿足條件的信息,則用:select +字段名 from + 表名 where +條件(字段名之間用逗號(hào)連接)
帶in關(guān)鍵字的查詢:select * from +表名 where + 字段名 in ( , );(括號(hào)內(nèi)為范圍,若要查詢不再范圍內(nèi)的信息,則用not in,用于離散型數(shù)據(jù)或者字段)
帶between 關(guān)鍵字的查詢:select * from +表名 where + 字段名 between+最小值 and +最大值;(用于連續(xù)型數(shù)據(jù),不包含范圍的邊界值)
帶like的字符匹配查詢(模糊查詢)(%匹配任意長(zhǎng)度的字符,_表示精確的單個(gè)字符):select * from +表名 where + 字段名like+’%條件%’;(%標(biāo)識(shí)有字段)
select * from +表名 where + 字段名like+’_條件’;(一個(gè)_標(biāo)識(shí)一個(gè)字符)
在排查過(guò)程中,任何值與null進(jìn)行運(yùn)算,運(yùn)算結(jié)果都是null.要對(duì)其進(jìn)行比較時(shí),要用is null或者is not null.
多條件查詢and: select * from +表名 where +條件 and 條件(!=表示不等于,and表示和,必須滿足所有條件);and的優(yōu)先級(jí)要高于or.
or(表示或者,只要滿足一個(gè)條件即可):select * from +表名 where +條件 or 條件
distinct 去重:select distinct+字段名 from + 表名 where +條件(挑出滿足條件的值,無(wú)重復(fù))
order by排序:select * from +表名 where +表名 order by+條件(默認(rèn)是升序,要降序的話則在最后加上desc)
分組查詢
分組統(tǒng)計(jì)(group by對(duì)數(shù)據(jù)進(jìn)行分組,通常和集合函數(shù)一起使用)
select count(*) from +表名 group by +字段名(count(*)是對(duì)整行進(jìn)行統(tǒng)計(jì)總數(shù))
select+字段名,count(*) from +表名 group by +字段名(分組統(tǒng)計(jì),前后兩個(gè)字段名相同)
分組查詢
(group_countat()函數(shù)將每個(gè)分組中各個(gè)字段的值顯示出來(lái))
select+字段名,count(*) as +種類 group_countat(字段名) as+名稱from +表名 group by +字段名
分組查詢、排序
select+字段名,count(*) as +種類 group_countat(字段名) as+名稱from +表名 group by +字段名+order by numbers.
篩選having與group by一起使用,分組查詢以后對(duì)數(shù)據(jù)進(jìn)行篩選,having后加條件。
在查詢最后添加一個(gè)統(tǒng)計(jì)欄:with rollup
限制查詢:limit(只有MYSQL數(shù)據(jù)庫(kù)支持limit關(guān)鍵字),顯示前幾條記錄:limit+數(shù)字;
從第m條記錄開(kāi)始,顯示n條記錄:limit (m-1),n;
case when語(yǔ)句:用于計(jì)算條件列表并返回多個(gè)可能結(jié)果的表達(dá)式之一。
聚合函數(shù)
avg()求平均,max()最大值,min()最小值,sum()求和count()計(jì)數(shù)
sum()在計(jì)算時(shí)遇到null會(huì)自動(dòng)忽略。
加快查詢速度
使用索引,索引是加快查詢的重要工具
創(chuàng)建索引的方法:create index 索引名 on 表名(列名)
刪除指定索引的命令:drop index 索引名 on 表名(列名)
不適合使用索引的場(chǎng)合:
--索引是加快查詢的最重要的工具
--模糊查詢要求后方一致或者部分一致的場(chǎng)合
--對(duì)方使用了運(yùn)算/函數(shù)的場(chǎng)合
--復(fù)合索引的第一列沒(méi)被包含在where條件語(yǔ)句中的場(chǎng)合。
多表連接查詢
內(nèi)鏈接查詢(inner join):進(jìn)行表間某些列數(shù)據(jù)的比較操作,并列出這些表中與連接條件相匹配的數(shù)據(jù)行,組合成新的紀(jì)錄。(select 字段名 from 表一,表二 where 條件——將表一和表二滿足條件的列連接起來(lái),并顯示某些字段)
內(nèi)鏈接查詢-自連接:如果在一個(gè)連接查詢中,涉及到的兩個(gè)表都是同一個(gè)表,這種查詢稱為自連接查詢,自連接是一種特殊的內(nèi)連接,它是指相互連接的表在物理上為同一張表,但可以在邏輯上分為兩張表
外連接查詢:有時(shí)需要包含沒(méi)有關(guān)聯(lián)到的行數(shù)據(jù),即返回的查詢結(jié)果集合中不僅包含符合連接條件的行,而且還包括左表、右表、或兩個(gè)連接表中的所有數(shù)據(jù)行。left join:左連接返回包括左表中的所有記錄和右表中連接字段相等的記錄。right join:右連接,返回包括左表中的所有記錄和右表中連接字段相等的記錄
注:使用左外連接:左側(cè)的連接表中所有的記錄都會(huì)顯示
也可使用右外連接:右側(cè)的連接表中所有的記錄都會(huì)顯示
復(fù)合條件連接查詢:復(fù)合條件連接查詢是在連接查詢的過(guò)程中,通過(guò)添加過(guò)濾條件,限
制查詢的結(jié)果,使查詢的結(jié)果更加準(zhǔn)確
子查詢:子查詢指一個(gè)查詢語(yǔ)句嵌套在另一個(gè)查詢語(yǔ)句內(nèi)部的查詢
帶any/some關(guān)鍵字的子查詢,這兩個(gè)關(guān)鍵字是同義詞,表示滿足其中任一條件,它們?cè)试S創(chuàng)建一個(gè)表達(dá)式對(duì)子查詢的返回值列表進(jìn)行比較,只要滿足內(nèi)層子查詢中的任何一個(gè)比較條件,就返回一個(gè)結(jié)果作為外層查詢的條件。any關(guān)鍵字接在一個(gè)比較操作符的后面,表示若與子查詢返回的任何值比較為TRUE,則返回TRUE。
帶all關(guān)鍵字的子查詢:帶all關(guān)鍵字與any和some不同,使用all時(shí)需要同時(shí)滿足所有的內(nèi)層查詢的條件。all關(guān)鍵字接在一個(gè)比較操作符的后面,表示若與子查詢返回的任何值比較為TRUE,則返回TRUE。
帶exists關(guān)鍵字的子查詢:exists關(guān)鍵字后面的參數(shù)是任意的子查詢,系統(tǒng)對(duì)子查詢進(jìn)行運(yùn)算以判斷他是否返回行,如果至少返回一行,那么exists返回的結(jié)果是false,此時(shí)外層語(yǔ)句將不進(jìn)行查詢。
帶in關(guān)鍵字的子查詢:in關(guān)鍵字進(jìn)行子查詢時(shí),內(nèi)層查詢語(yǔ)句僅僅返回一個(gè)數(shù)據(jù)列,這個(gè)數(shù)據(jù)列里的值將提供給外層查詢語(yǔ)句進(jìn)行比較操作。Select語(yǔ)句中可以使用not in關(guān)鍵字,其作用與in正好相反。
帶比較運(yùn)算符的子查詢:子查詢時(shí)可以使用其他的比較運(yùn)算符,如“<”、“<=”、“=”、“>=”、“!=”等。
合并查詢結(jié)果:利用union關(guān)鍵字,可以給出多條select語(yǔ)句,并將它們的結(jié)果組合成單個(gè)結(jié)果集。合并時(shí),兩個(gè)表對(duì)應(yīng)的列數(shù)和數(shù)據(jù)類型必須相同,各個(gè)select語(yǔ)句之間使用union或union all關(guān)鍵字分隔。Union不使用關(guān)鍵字all,執(zhí)行的時(shí)候刪除重復(fù)記錄,所有返回的行都是唯一的;使用關(guān)鍵字all的作用是不刪除重復(fù)行也不對(duì)結(jié)果進(jìn)行自動(dòng)排序?;菊Z(yǔ)法格式如下:select column… from table1 union[all] select column…from table2
使用union all包含重復(fù)的行,在前面的例子中,分開(kāi)查詢時(shí),兩個(gè)返回結(jié)果中有相同的記錄,union從查詢結(jié)果集中自動(dòng)去除了重復(fù)的行,如果要返回所有匹配的行,而不進(jìn)行刪除,可以使用union all。
為表/字段取別名:當(dāng)表/字段的名字很長(zhǎng)或執(zhí)行一些特殊查詢是,為了方便操作或者多次使用相同的表/字段時(shí),可以為表/字段指定別名,用這個(gè)別名替代原來(lái)的表/字段名稱,為表/字段取別名的語(yǔ)法格式為:表名/字段名 【as】 表/字段別名。
轉(zhuǎn)載于:https://www.cnblogs.com/shgwater/p/8953519.html
總結(jié)
以上是生活随笔為你收集整理的2018-4-25mysql数据库基础的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Postgres主进程文件—postma
- 下一篇: 多种方式Map集合遍历