一象泵、MySQL基礎(chǔ)語句
1. 進(jìn)入MySQL
>> mysql -u root -p (有密碼時(shí))
>> mysql -u root ? ? (無密碼時(shí))
2. 查看當(dāng)前所有數(shù)據(jù)庫
>>?show databases寞秃;
3. 創(chuàng)建一個(gè)新的數(shù)據(jù)庫
>> create database 新數(shù)據(jù)庫名;
4. 進(jìn)行表的增刪改查操作之前偶惠,需要先選擇數(shù)據(jù)庫
>> use 數(shù)據(jù)庫名春寿;
5.?查看當(dāng)前數(shù)據(jù)庫下的所有表
>> show tables;
6.?創(chuàng)建一個(gè)新的表
>> create table 新表名(字段1 屬性1 屬性2 ...,字段2 屬性1 屬性2 ...);
# eg
>> create table Student(Sno varchar(20) primary key, Sname varchar(20) not null, ...);
7. 向表中插入數(shù)據(jù)
# 插入單條數(shù)據(jù)
>>?insert into 表名 values(字段1值忽孽,字段2值绑改,...);
# eg
>>?insert into Student values("001","張三"兄一,...);
# 插入多條數(shù)據(jù)
# eg? ?
>> insert into Student values("001"厘线,"張三",...),("002"出革,"李四"皆的,...),...,("009","王二"蹋盆,...);
8.?向表中導(dǎo)入數(shù)據(jù)
>> load data local infile “絕對路徑” into table 表名 fields terminated by “,” lines terminated by “\r”(or?"\n") ;
注:許多時(shí)候,由于各種因素限制(如office版本問題)硝全,會導(dǎo)致導(dǎo)入數(shù)據(jù)不成功栖雾。可以先把xlsx之類的文件存成 .csv(該文件類型是逗號分隔)伟众,再轉(zhuǎn)換為 .txt析藕,再利用該語句導(dǎo)入,成功率非常高凳厢。
9.?查看表中所有的記錄
>> select * from 表名;
10.?獲取指定行
>> select 選擇的字段 from 表名 條件從句;
# eg
>> select * from Student where Sno >"003";
>> select * from Student where name="李四" or ?Sno >"003";
11.?獲取指定列
>> select 選擇的列名 from 表名 條件從句;
# eg
>> select Sno, Sname from Student where Sbirthday > 2000-09-10;
12. 增加字段
>> alter table 表名 add 字段名(字段屬性);
13. 修改字段
>> alter table 表名 change 原字段名 新字段名 新字段屬性;
14. 刪除字段
>> alter table 表名 drop 字段名;
15. 修改一條數(shù)據(jù)的值
>> update 表名 set 字段名=新值 條件從句;
# eg
>> update Student set Sno="010" where Sname="王二";
16. 刪除數(shù)據(jù)
>> delete from 表名 條件從句;
注意:如果不跟條件從句,則將會刪除該表中的所有數(shù)據(jù),請謹(jǐn)慎操作胰锌。
17. 修改表名
>>?alter table 原表名 rename to 新表名;
二暂幼、常見關(guān)鍵字的使用
1. 排序 order by
? ??desc為降序,asc為升序遮精,order by 的字段后不加約束則默認(rèn)升序居夹。如果要按照多個(gè)條件排序,則字段間用英文逗號隔開即可本冲,每個(gè)字段都需要根據(jù)條件來確定加或不加desc准脂,即每個(gè)字段后的desc只決定它所跟的那個(gè)字段的排序。
>> select 選擇的字段 from 表名 條件從句 order by 字段 desc/asc;
# eg
>> select * from Student where Ssex="女" order by Sno desc, Sbirthday;
2. 分組 group by
>> select 選擇的字段 from 表名 條件從句? group by 分組字段 條件從句;
# eg
>> select Sclass, count(*) from Student group by Sclass;
注意:MySQL5.7以上版本中檬洞,默認(rèn)的sql配置模式是ONLY_FULL_GROUP_BY狸膏,該配置啟用的是“嚴(yán)格ANSIsql”規(guī)則,該規(guī)則要求在group by的時(shí)候添怔,沒有聚合的列必須全部包含在group by的字段中湾戳。也就是說贤旷,在語句執(zhí)行的時(shí)候會先分組,根據(jù)查詢的字段(select的字段)從分組的內(nèi)容中取出院塞,所以查詢的字段理論上應(yīng)全部在group by的分組條件內(nèi)遮晚,一種情況例外:查詢字段中如果含有聚合函數(shù)的字段不用包含在group by中。否則拦止,會報(bào)錯县遣。
同理,order by的字段也都要在group by內(nèi)汹族。
解決辦法1:乖乖的按照規(guī)則寫sql語句萧求,select字段必須都在group by分組條件內(nèi)(含有函數(shù)的字段除外)。
解決辦法2:直接去掉配置中的ONLY_FULL_GROUP_BY約束顶瞒。
? ? ? ? ????????????執(zhí)行以下命令夸政,可以看到sql_mode的內(nèi)容:
>> show session variables;
>> show global variables;
>> select @@sql_mode;
????????????????????執(zhí)行以下命令可以將global和session中的sql_mode中的ONLY_FULL_GROUP_BY去掉:
>> set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
>>?set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
3. 去重 destinct
>> select distinct 選擇的字段 from 表名 條件從句;
4. having 和 where
二者都是在條件從句中使用,區(qū)別有以下兩點(diǎn):
(1)位置區(qū)別:having用在group by之后榴徐,where用在group by之前守问。having引導(dǎo)的條件從句可以讓我們篩選成組后的各種數(shù)據(jù);where引導(dǎo)的條件從句則在聚合前先篩選記錄坑资,作用在group by 和having 之前耗帕。
(2)用法區(qū)別:在探討它們的用法區(qū)別之前,我們需要先了解一個(gè)名詞——聚合函數(shù)袱贮,即匯總仿便、統(tǒng)計(jì)函數(shù),常見的有avg, count, sum, min, max等攒巍。having后只能跟聚合函數(shù)嗽仪,where后不能跟聚合函數(shù)。
5. 聯(lián)合查詢 union
用于連接兩個(gè)查詢語句柒莉,并使結(jié)果一同呈現(xiàn)闻坚。只要兩個(gè)結(jié)果集的列數(shù)相同就可以使用,即使字段類型不同常柄,也可以鲤氢。使用時(shí),直接用union寫在兩個(gè)查詢語句之間即可西潘。
>> select語句1 union select語句2;
6.取指定數(shù)量的數(shù)據(jù)?limit?
limit 用于查詢指定行數(shù)的記錄卷玉,在limit語法中,m指記錄開始的index喷市,從0開始計(jì)數(shù)相种; n指從m條開始,取n條。
>> select 選擇的字段 from 表名 條件從句 limit m, n?
# 取Student表的第一條數(shù)據(jù)
>> select * from Student limit 0, 1;
7. 主鍵primary key
#?創(chuàng)建表時(shí)設(shè)置主鍵
>> create table Student(Sno varchar(20), Sname varchar(20), primary key(Sno))
注意寝并,若需要設(shè)置多個(gè)主鍵箫措,直接在primary key后的括號中增加即可。
#? 為已經(jīng)創(chuàng)建好的表添加主鍵
>> alter table 表名 add primary key (主鍵1,?主鍵2,?主鍵3)衬潦;
8.?外鍵 foreign key
# 創(chuàng)建表時(shí)設(shè)置外鍵
>>? create table Score(Sno varchar(20), Cno varchar(20),Degree varchar(20),?foreign key?(Sno)?references?Student(Sno));
# Score表中的Sno指向Student表中的Sno
# 注意:若要刪除Student和Score這兩個(gè)表斤蔓,則必須先刪除Student表,再刪除Score表
#? 為已經(jīng)創(chuàng)建好的表添加外鍵
>> alter table 表名 add constraint foreign key (外鍵名) references 外表表名(外表的主鍵名)
希望能幫助到你~