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