1:创建数据库
create database mydb1;
create database mydb2 character set utf8;
2:查看所有数据库
show databases;
3:创建数据表
create table user(
Id int,
name varchar(20),
password char(20),
birthday date,
salary float,
resume text(200) );
4:查看所有数据表
show tables;
5:显示表的结构
desc table_name
6:删除表语句
drop table table_name
7:启动数据库服务
service mysqld start
8:登录MySQL
mysql –u root -p
9:备份与恢复
备份数据:
mysqldump –u 用户名 –p 数据库名>文件名.sql
mysqldump –u root -p db_hr>db_hr.sql
恢复数据:
mysql –u 用户名 –p 数据库名<文件名.sql
mysql – u root -p db_hr1 <db_hr.sql
或Source /TEST/文件名.sql
source /test/db_hr.sql
10:Insert插入语句
Insert into account (id,name,password) value (1,’tom’,’123456’);
insert into account (id,name,password) values (1,’tom’,’123456’),(2,’jeck’,’654321’);
11:Update修改语句
格式:Update tableA set columnA=新值A,columnB=新值B where 条件
例子:Update account set name=’mike’ where id =2;(只更新id=2对应的信息的name值为mike )
Update employee set salary=salary+500;(更新所有工资都加500)
12:Delete删除语句
格式1:Delete from 表名;删除表中所有数据
例子1:Delete from test;
格式2:Delete from 表名 where 字段条件
例子2:Delete from test where id =1;
例子2:Delete from test where name=‘tester’;
13:select查询语句
Select * from tableA;查询tableA表中所有字段对应的数据
Select name,math from student;查询student表中name,math2个字段对应的数据
查询英语分数在85-95之间的同学相关信息。
select * from student where english>=85 and english<=95;
select * from student where english between 85 and 95;
查询数学分数为84,90,91的同学。
select * from student where math in(84,90,91);
查询所有姓何的学生成绩。
select * from student where name like ‘何%’;
查询数学分>85,语文分>90的同学。
select * from student where math>85 and chinese>90;
14:合计函数
函数-count(Count(列名)返回行的总数)
统计总分大于260的人数有多少
select count(*) from student where math+chinese+english>260;
函数-SUM(求和)
统计一个班级总成绩?
select sum(math+chinese+english)from student;
统计一个班级语文、英语、数学各科的总成绩
select sum(math),sum(chinese),sum(english) from student;
函数-AVG(求平均值)
求一个班级总分平均分
select avg (math+chinese+english) from student;
函数-MAX/MIN(列的最大/最小值)
求数学最高分
Select max(math)from student;
求数学最低分
Select min(math)from student;
Group by 分组函数
按班分组查出总分,最高分
select class_id,sum(math+chinese+english),max(math+chinese+english) from student group by class_id;
查询出student中学员姓名,班级以及班级数学最高分;

select name,class,math FROM (SELECT * FROM student ORDER BY math DESC) AS a GROUP BY class;
备注:因为查询分组group by 的特性是分组 并取各组第一条查询到的数据信息
(a和b是第一组,如果a排前面,那么就分组就拿a的那条信息,如果是b则拿b的信息),
我们单纯进行分组能查到各分组的最高分,但是不一定能相应查询到对应的最高分的姓名、班级等信息。
所以,先将全部数据进行降序排列,然后班级分组(group by class)确保mysql查询中各班的最高分那条记录是首先查到的(这点很重要)!
原则1:聚合函数可以跟分组字段一起出现在select语句后面;
举例: SELECT class,MAX(math) FROM student GROUP BY class ;
原则2:使用分组函数group by,则select语句后面的字段只能是聚合函数+分组字段;
举例: SELECT class,name, MAX(math) FROM student GROUP BY class ,name;
原则3:group by 分组后的数据过滤,只能使用having;
举例: SELECT grade,MAX(age) FROM student GROUP BY grade HAVING MAX(age)>60;
where和having的区别:
where 子句的作用是对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚合函数,使用where条件过滤出特定的行。
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件过滤出特定的组,也可以使用多个分组标准进行分组。
order by 排序函数 –Asc升序、Desc降序
按数学成绩从低到高排序
Select * from student order by math asc;
按数学成绩从高到低排序
Select * from student order by math desc;
Distinct剔除重复数据
select DISTINCT english from student;
Select DISTINCT english,math from student;
(distinct对其后面的全部列都有效,也就是只有全部列都重复才会去除
其中只要有一列不重复都不会去除)
15:多表联合查询(内连接和外连接)
内连接:inner join
把两个表中对应的数据查出来(即把2个表中的交集部分查询出来,或是说把2个表中有相对应部分的数据查询出来)
语法一:select * from biao1 inner join biao2 on biao1.aa=biao2.bb;
语法二:select * from biao1 , biao2 where biao1.aa=biao2.bb;
备注:aa,bb字段分别为biao1与biao2中存储的相同字段内容,即aa,bb字段存储的内容相同,代表同一属性值
三张表或是更多表的连接语句
select * from biao1 inner join biao2 on biao1.aa=biao2.bb inner join biao3 on biao2.cc=biao3.dd;
select * from biao1,biao2,biao3 where biao1.aa=biao2.bb and biao2.cc=biao3.dd;
外连接:left join/right join
以某个表为基础把另外表中对应数据查出来。
比如说:
左外连接(left join):即是以左边表为基础,同时把右边的表中和左边表中有相对应的部分数据一起展示出来;select * from biao1 left join biao2 on biao1.aa=biao2.bb;
右外连接(right join):即是以右边表为基础,同时把左边的表中和右边表中有相对应的部分的数据一起展示出来;select * from biao1 right join biao2 on biao1.aa=biao2.bb;
16:子查询
子查询是将一个查询语句嵌套在另一个查询语句中,把一个查询语句的查询结果,作为外层查询语句的条件。
select * from score where score.CN in (select ID from SC where KC=‘软件测试’);
查询出在课程表中有选过‘软件测试’课程的学员的考试成绩信息。
思路:先从课程表SC中查询出选修过‘软件测试’课程的学员编号信息,然后当做学员成绩表score中的子条件进行查询。
备注:SC为课程表(ID:为学员编号,KC:选课课程);score为学员成绩表(CN:学员编号)。
———————————————————————————————————————————————————
更新和查询同时使用原则:
不能在同一语句中更新select出的同一张表元组的属性值
解决方法:将select出的结果通过中间表再select一遍即可。
即对同一张表查的同时更新会引起数据不一致,但是将查询结果事先放到临时表中就不会有这个问题了。
通俗点说:对同一个表数据进行查询的时候,又对这个表数据进行更新操作会有问题
例如:删除stu_2表中数学成绩相同的学员相关信息
DELETE FROM stu_2 WHERE math IN (SELECT math FROM (SELECT math ,COUNT(math) FROM stu_2 GROUP BY math HAVING COUNT(math)>1) AS stu_3)
思路:首先得查出stu_2表中有哪些人的数学成绩是重复的,先按照数学成绩进行分组,count(math)>1求出每个组中有多少个分数相同的组员,大于1表示数学成绩重复。
然后使用子查询,查出出数学成绩在分组中重复组中的数学成绩信息。然后按照条件过滤进行删除。
备注:对同一个表进行数据查询又进行数据删除,语法上执行不通过,需要把查询的数据临时生存一个新表,这样就有效回避了对同一表进行查询和更新操作引起的数据不同步
17:快速删除表数据方法
Delete from table (删除表数据可以回滚)
Truncate table tablename (最高效,删除表数据不能回滚)
18:MySQL查询版本号的方式
Select version();
Mysql -V
19:mysql 退出方式
\q , exit, quit
一:数据库编码类型与设置编码的方式
设置编码的几种方式:设置数据表编码类型、设置数据库编码类型、设置数据库全局编码类型。查看系统可用的编码类型:SHOW VARIABLES LIKE ‘%char%’;
展示结果可以可看到character_set_database 与 character_set_server 不同,且分别为utf8 与latin1,这是出现乱码的原因。

解决方法:
1:修改/etc/my.cnf文件文件,添加如下内容:

[mysql]
default-character-set=utf8
[mysqld]
character_set_server =utf8
[client]
default-character-set =utf8
2:重新加载配置文件:source /etc/my.cnf
3:重启MySQL服务:service mysqld restart
二:修改客户端表的编码格式:sqlyog, navicat等
alter table tablename convert to character set utf8
后续补充: