SQL语句中不区分大小写,下面都以小写为主,下面的SQL语句第一行是最简便的,第二行是具体的,包含可选的内容,[ ] 中代表的是可选项。
一、数据库操作
创建一个新的数据库:
create database 库名;
create database [if not exists] 库名 [charset=字符集] [collate=校验规则];
charset:用于指定数据库所采用的编码格式,字符集
collate:用于指定数据库所采用的校验规则
如果创建数据库时未指明数据库的编码格式或校验规则,则默认使用MySQL配置文件中对应的编码格式和校验规则,默认的编码格式是utf8,默认的校验规则是utf8_general_ci。
可以查看系统中所有的数据库:
show databases;
查看对应数据库的创建语句:
show create database 数据库名;
删除一个现有的数据库:
drop database 库名;
drop database [if exists] 库名;
删除数据库后该数据库对应的文件夹就被删除了,并且删除数据库后,该数据库下的所有表也都会被级联删除,因此不要随意删除数据库。
数据库的备份 :
mysqldump -P 端口号 -u 用户名 -p 密码 -B 数据库名1 数据库名2 ... > 数据库备份存储的文件路径
数据库恢复:
source 数据库备份的文件路径;
二、表的操作
创建表:
create table 表名(
);[charset=字符集] [collate=校验规则] [engine=存储引擎];
创建表 comment表示对指定列添加注释信息,建表时没有指定使用哪种存储引擎,那么就会默认使用InnoDB存储引擎 。
删除表:
delete from 表名;
表的增删查改:
表的增删查改简称CRUD:Create(新增),Retrieve(查找),Update(修改),Delete(删除),CRUD的操作对象是对表当中的数据,是典型的DML(Data Manipulation Language)数据操作语言。
新增数据:
insert into 表名 [列名] values [数据];
不加列名,需要全列插入
insert into students values (100,10000,'唐三藏');
指定列名,正常写
insert into students (id, sn,name) values (102,20001,'曹孟德'),(103,20002,'孙仲谋');
查询数据:
select {*/列名/表达式} from 表名 [where] [order by] [limit];
select后面是*就表示全列查询,后面的where、order by、limit都是可选项。
全列查询:
select * from students;
指定列查询:
select id, name from students;
结果去重:
select distinct 列名 from 表名;
条件查询:
举几个使用 where 字句的样例,方便大家学习理解;
1、查询语文成绩在80到100分的同学及其语文成绩,两种方式都可以
select name, chinese from students where chinese between 80 and 100;
select name, chinese from students where chinese >= 80 and chinese <= 100;
2、查询英语成绩是59或99分的同学及其英语成绩
select name, english from students where english=59 or english=99;
select name, english from students where english in (59,99);
3、查询姓王的同学/查询王某同学
select name from students where name like '王_';
4、NULL的查询
select name, qq from students where qq <=> null;
在与 null 值作比较的时候应该使用 <=> 运算符,使用 = 运算符无法得到正确的查询结果。
5、查询语文和数学总分大于180分的同学
select name, chinese + math from students where chinese + math > 180;
结果排序:
select {*/列名} from 表名 where order by 列名 [asc/desc];
asc和desc分别代表的是排升序和排降序,不特殊指明就默认为 asc 排升序。order by子句中可以指明按照多个字段进行排序,每个字段都可以指明按照升序或降序进行排序,各个字段之间使用逗号隔开,排序优先级与书写顺序相同。
1、查询同学的各门成绩,依次按数学降序、英语升序显示
select name, math, english from students order by math desc, english asc;
2、查询同学及其总分,按总分降序显示
select name, chinese + math AS 总分 from students order by 总分 desc;
此处AS是给两个相加的字段起别名,也可以省略AS不写。
筛选分页结果:
从第0条记录开始,向后筛选出n条记录:
select {*/列名} from 表名 [where...] [order by] limit n;
从第s条记录开始,向后筛选出n条记录:
select {*/列名} from 表名 [where...] [order by] limit n offset s;
聚合函数查询:
统计个数
select count(*) from students;
在select语句中使用count函数,并将表达式作为参数传递给count函数,这时也可以统计出表中的记录条数,例如以下几种写法:
select count(1) from students;
select count(qq) from students;
去重统计math个数
select count(distinct math) from students;
统计平均总分:
select avg(chinese + math) 平均总分 from students;
分组查询:
select 列名 from 表名 [where...] group by 列名 [order by...] [limit...];
group by后面的列名,表示按照指定列进行分组查询。
修改数据:
update 表名 set 列名=数值 [...] [where...] [order by...] [limit...];
下面举例说明:
1、将孙悟空同学的数学成绩修改为80分
update students set math=80 where name='孙悟空';
2、将总成绩倒数前三的3位同学的数学成绩加上30分
update students set math=math+30 order by chinese+math asc limit 3;
3、将所有同学的语文成绩修改为原来的2倍
update students set chinese=chinese*2;
删除数据:
delete from 表名 [where...];
在删除数据之前需要先找到待删除的记录,delete语句中的where、order by和limit就是用来定位数据的。
下面举例说明:
1、删除孙悟空同学的考试成绩
delete from students where name='孙悟空';
2、删除整张表数据
delete from students;