MySQL下的SQL语句
SQL語(yǔ)言包含四個(gè)部分:
DDL(數(shù)據(jù)庫(kù)定義語(yǔ)言):用于定義和管理數(shù)據(jù)對(duì)象,包括數(shù)據(jù)庫(kù)、數(shù)據(jù)表等
如:create、drop、alter
DML(數(shù)據(jù)庫(kù)操作語(yǔ)言):用于操作數(shù)據(jù)庫(kù)對(duì)象中所包含的數(shù)據(jù)
如:insert、update、delete
DQL(數(shù)據(jù)庫(kù)查詢語(yǔ)言):用于查詢數(shù)據(jù)庫(kù)對(duì)象中所包含的數(shù)據(jù)
如:select
DCL(數(shù)據(jù)庫(kù)控制語(yǔ)言):管理數(shù)據(jù)庫(kù)的語(yǔ)言,包括管理權(quán)限及數(shù)據(jù)更改
如:grant、revoke、commit、rollback
?【對(duì)數(shù)據(jù)庫(kù)的操作】
創(chuàng)建數(shù)據(jù)庫(kù):create database/schema [if not exists] db_name default character set '字符集';
刪除數(shù)據(jù)庫(kù):drop database if exists db_name;
查看已有的數(shù)據(jù)庫(kù):show databases/schemas;
打開指定數(shù)據(jù)庫(kù):use db_name;
查看當(dāng)前打開的數(shù)據(jù)庫(kù):select database();
查看已創(chuàng)建的指定數(shù)據(jù)庫(kù)的編碼方式:show create database db_name;
修改已有數(shù)據(jù)庫(kù)的編碼方式:alter database db_name default character set '字符集';
臨時(shí)轉(zhuǎn)換客戶端的編碼方式:set names gbk;(臨時(shí)的用來輸入中文,退出后就失效)
將已有的數(shù)據(jù)庫(kù)備份到外部文件中:
mysqldump -u用戶名 -p密碼 db_name >> 文件路徑/text.sql
將外部文件中的數(shù)據(jù)導(dǎo)入到已有數(shù)據(jù)庫(kù)中:
方法一:mysql -u用戶名 -p密碼 db_name < 文件路徑/text.sql
方法二:
use db_name;?
source 文件路徑/text.sql
為數(shù)據(jù)庫(kù)創(chuàng)建新用戶授權(quán):
GRANT 權(quán)限 ON 數(shù)據(jù)庫(kù).數(shù)據(jù)表 TO 用戶名@'登錄的主機(jī)名' IDENTIFIED BY '密碼' WITH GRANT OPTION;
FLUSH PRIVILEGES;(立即生效)
例:
grant all/select,insert,update,delete on *.* to root@'%' identified by '密碼' with grant option;
flush privileges;
(*.*表示所有數(shù)據(jù)庫(kù)的所有數(shù)據(jù)表;'%'表示通過任意主機(jī)進(jìn)行授權(quán),可為'localhost'或已有用戶的'主機(jī)IP')
【對(duì)數(shù)據(jù)表的操作】
創(chuàng)建數(shù)據(jù)表:
create table [if not exists] `table_name`(
`字段名稱` 字段類型 [字段屬性],
... ...
)[engine=myisam default charset=utf8];
例:
create table [if not exists] `users`(
`id` int unsigned auto_increment primary key,? #添加索引的三種方式之一
`username` varchar(30) not null unique comment "字段加注釋",
`password` char(32) not null,
`age` tinyint unsigned,
`sex` enum("男","女","保密") default "男",
`addr` varchar(255),
`face` varchar(40) not null default "01.jpg",
`email` varchar(50) not null default "819508293@qq.com",
`vip` tinyint(1) not null default 0 comment "會(huì)員,0代表不是會(huì)員,其余值為會(huì)員",
`startTime` int unsigned comment "會(huì)員起始時(shí)間",
`endTime` int unsigned comment "會(huì)員到期時(shí)間",
`ip` int not null,? #可利用 ip2long(str) 將IPv4轉(zhuǎn)為int數(shù)值寫入數(shù)據(jù)庫(kù),long2ip() 可將該int數(shù)值轉(zhuǎn)為標(biāo)準(zhǔn)點(diǎn)格式的字符串輸出;
key users_email(`email`),? #添加索引的三種方式之二
key users_ip(`ip`)
)engine=myisam default charset=utf8 [collate utf8_general_ci];
給字段添加注釋:在字段最后加 comment "注釋內(nèi)容"
刪除數(shù)據(jù)表:
drop table table_name1,table_name2...;
修改數(shù)據(jù)表結(jié)構(gòu)項(xiàng):
增加:alter table table_name add `字段名稱` 字段類型;
例:alter table table_name add `email` varchar(50);
刪除:alter table table_name drop `字段名稱`;
例:alter table table_name drop `email`;
修改:
alter table table_name modify `字段名稱` 字段類型 字段屬性;
注:只能修改對(duì)應(yīng)字段名稱的字段類型和屬性
例:alter table table_name modify `name` varchar(30) not null;
alter table table_name change `字段名稱` `新字段名稱` 字段類型 字段屬性;
注:不僅能修改字段類型和屬性,也能修改字段名稱
例:alter table table_name change `name` `username` varchar(30) not null;
用修改表結(jié)構(gòu)方法添加索引:
alter table table_name add primary key(id);
alter table table_name add unique table_name_字段名(字段名);
alter table table_name add index table_name_字段名_index(字段名);
用修改表結(jié)構(gòu)方法刪除索引:
alter table table_name drop primary key;
alter table table_name drop index table_name_字段名;
1.刪除主鍵索引前,必須先將自增長(zhǎng)修改掉;
2.刪除唯一索引 unique,也同樣使用 drop index 而不是drop unique;
查看數(shù)據(jù)表中所有字段的索引:
show indexes from table_name \G
查看當(dāng)前數(shù)據(jù)庫(kù)已有數(shù)據(jù)表:show tables;
查看已創(chuàng)建的指定數(shù)據(jù)表:show create table table_name;
查看數(shù)據(jù)表的結(jié)構(gòu):
desc table_name;
describe table_name;
show columns from table_name;
【對(duì)數(shù)據(jù)表中數(shù)據(jù)的操作】
向數(shù)據(jù)表中添加數(shù)據(jù):
insert [into] table_name(字段名稱1,字段名稱2...) values("值1","值2"...);
例:
①指定字段名稱和字段值一一對(duì)應(yīng),是字符串類型的須使用引號(hào)(" "/ ' ')包含,不是字符串類型的可加可不加:
insert table_name(id,username,password) values(1,"admin1",'password1');
②可為空的自增列在插入字段值時(shí)可使用NULL,會(huì)自動(dòng)轉(zhuǎn)為自增的值:
insert table_name(id,username,password) values(null,"admin1",'password1');
③自增列、非空且有默認(rèn)值的字段可無需插入,仍會(huì)自動(dòng)添加自增值或默認(rèn)值:
insert table_name(username,password) values("admin1",'password1');
④字段名稱的順序可自由排列,但后面字段值的順序也應(yīng)對(duì)應(yīng)排列:
insert table_name(password,username) values('password1',"admin1");
⑤可以省略字段名稱,但在插入字段值的時(shí)候必須按照數(shù)據(jù)表中的字段順序插入:
insert table_name values(null,"admin1",'password1');
insert [into] table_name(字段名稱1,字段名稱2...) values("值1","值2"...),("值1","值2"...),...;
例:insert table_name(username,password) values("admin1","pass1"),("admin2","pass2"),("admin3","pass3");
刪除數(shù)據(jù)表中的數(shù)據(jù):
delete from table_name [條件語(yǔ)句];
例:
delete from table_name where 條件;
delete from table_name order by 字段名稱 asc limit 3;
清空數(shù)據(jù)表中的數(shù)據(jù):truncate [table] table_name;
注:delete后再添加數(shù)據(jù)時(shí),auto_increment(自增長(zhǎng))的值不會(huì)重置而是向后遞加;truncate后auto_increment的值重置為1,重新開始遞增;
修改數(shù)據(jù)表中的數(shù)據(jù):update table_name set 字段名稱="值",字段名稱="值",...;
有條件的定向修改部分?jǐn)?shù)據(jù):
update table_name set 字段名稱="值" 條件語(yǔ)句;
例:
update table_name set 字段名稱=字段名稱+1 where 條件;
uodate table_name set 字段名稱="值" order by 字段名稱 desc limit 3;
select查詢語(yǔ)句:
select [all/distinct] */字段名稱 from table_name [where 條件] [group by 分組] [having 條件過濾(二次過濾)] [order by 排序] [limit 顯示條數(shù)];
查詢表中的所有記錄:select * from table_name;
整齊的格式化顯示數(shù)據(jù):select * from table_name \G (注意此時(shí)結(jié)尾是不加分號(hào)“;”的)
查詢表中的總記錄數(shù):select count(*) from table_name;
為總記錄數(shù)起別名,方便之后直接通過別名取得該值:select count(*) as 別名 from table_name;
給字段添加別名:select 字段 [as] 別名,字段 別名 from table_name;
有條件的定向查詢:select */字段名稱 from table_name 條件語(yǔ)句;
查詢不重復(fù)的字段內(nèi)容:select distinct 字段名稱 from table_name;(distinct為去重復(fù)項(xiàng))
根據(jù)某字段排序:一般應(yīng)用于數(shù)值型字段,order by 字段 asc(升序)/desc(降序)
select * from table_name [where 條件] order by 字段 asc/desc;
select * from table_name order by 字段1 asc/desc,字段2 asc/desc;
查詢限制顯示條數(shù)的記錄:
select * from table_name limit 數(shù)值;(默認(rèn)從頭開始)
select * from table_name limit 0,2;(0-偏移量,跳過前多少條;2-顯示多少條)
可用來做分頁(yè)
例:
1.查詢各個(gè)年齡段的人數(shù)總數(shù)
select age,count(*) from table_name group by age;
2.查詢出年齡大于20的各個(gè)年齡的人數(shù)總數(shù)
select age,count(*) from table_name where age>20 group by age;
3.查詢出年齡大于20的各個(gè)年齡的人數(shù)總數(shù)多于1個(gè)人的
select age,count(*) as c from table_name where age>20 group by age having c>1;
4.以年齡進(jìn)行升序排序,如果年齡相同的,按id降序排列
select * from table_name order by age asc,id desc;
5.隨機(jī)排序
select * from table_name order by rand();
多表關(guān)聯(lián)查詢:
1.普通關(guān)聯(lián)查詢:
select [table1.]字段1,[table1.]字段2,[table1.]字段3,[table2.]字段1,[table2.]字段2? from table1,table2 where table1.id=table2.uid;
table1.id=table2.uid為關(guān)聯(lián)項(xiàng),table1中的數(shù)據(jù)值在table2中無關(guān)聯(lián)項(xiàng),則該數(shù)據(jù)不顯示;
select [別名1.]字段1,[別名1.]字段2,[別名1.]字段3,[別名2.]字段1,[別名2.]字段2? from table1 as 別名1,table2 as 別名2 where 別名1.id=別名2.uid;
可以給數(shù)據(jù)表名稱添加別名,方便簡(jiǎn)寫;
2.連接關(guān)聯(lián)查詢:
左連接:以左表(table1)為主,先輸出左表中的查詢數(shù)據(jù),右表中無關(guān)聯(lián)項(xiàng)的則顯示NULL
select table1.字段1,table1.字段2,table1.字段3,table2.字段1,table2.字段2 from table1 left join table2 on table1.id=table2.uid;
select [別名1.]字段1,[別名1.]字段2,[別名1.]字段3,[別名2.]字段1,[別名2.]字段2? from table1 as 別名1 left join table2 as 別名2 on 別名1.id=別名2.uid;
右連接:以右表(table2)為主,先輸出右表中的查詢數(shù)據(jù),左表中無關(guān)聯(lián)項(xiàng)的則顯示NULL
select table1.字段1,table1.字段2,table1.字段3,table2.字段1,table2.字段2 from table1 right join table2 on table1.id=table2.uid;
select [別名1.]字段1,[別名1.]字段2,[別名1.]字段3,[別名2.]字段1,[別名2.]字段2? from table1 as 別名1 right join table2 as 別名2 on 別名1.id=別名2.uid;
內(nèi)連接:不以任何表為主,直接查詢on后面的關(guān)聯(lián)條件項(xiàng),無對(duì)應(yīng)數(shù)據(jù)的均不顯示
select table1.字段1,table1.字段2,table1.字段3,table2.字段1,table2.字段2 from table1 inner join table2 on table1.id=table2.uid;
select [別名1.]字段1,[別名1.]字段2,[別名1.]字段3,[別名2.]字段1,[別名2.]字段2? from table1 as 別名1 inner join table2 as 別名2 on 別名1.id=別名2.uid;
3.嵌套關(guān)聯(lián)查詢(不推薦使用,效率極低)
select * from table1 where id in(select uid from table2);
當(dāng)使用條件語(yǔ)句時(shí)可用條件:
和:&& / and 或:|| / or 非:!=
值為null/不為null:is null / is not null
在什么范圍之內(nèi):between...and...
不在什么范圍之內(nèi):not between...and...
包含在其內(nèi):in(1,2,3,4...)
不包含在其內(nèi)的:not in(1,2,3,4...) 除了括號(hào)中的匹配外其他都顯示
模糊查詢:like / not like
通配符:%(代表任意多個(gè)字符) _(代表任意一個(gè)字符)
聚合函數(shù):
count(*):統(tǒng)計(jì)總數(shù)
select sum(字段名) from table_name;? 統(tǒng)計(jì)所有該字段的和
select avg(字段名) from table_name;? 統(tǒng)計(jì)該字段的平均值
select max(字段名) from table_name;? 統(tǒng)計(jì)該字段中的最大值
select min(字段名) from table_name;? 統(tǒng)計(jì)該字段中的最小值
?
轉(zhuǎn)載于:https://www.cnblogs.com/zhouwanqiu/p/9084732.html
總結(jié)
以上是生活随笔為你收集整理的MySQL下的SQL语句的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从未后悔认识你,只是不知如何面对分开的结
- 下一篇: 带密匙的php加密解密示例分享