1.登陆数据库:
 cmd–>mysql -uroot -p你自己的密码
 
 服务:系统后台进程
		启动服务: net start mysql
		停止服务: net stop mysql
        删除服务  sc delete mysql 
 
2.修改mysql的密码步骤:
 1) 停止mysql服务 运行输入services.msc 停止mysql服务
  或者 cmd – net stop mysql
  2) 在cmd下 输入 mysqld --skip-grant-tables 启动服务器 光标不动 (不要关闭该窗口)
  3) 新打开cmd 输入mysql -u root -p 旧密码
  use mysql;
  update user set password=password(‘123456’) WHERE User=‘root’;
  4) 关闭两个cmd窗口 在任务管理器结束mysqld 进程
  5) 在服务管理页面 重启mysql 服务
3.操作数据库:
 * 创建:create database 数据库名称;
 * 删除:drop database 数据库名称;
 * 修改:ALTER DATABASE mydb1 CHARACTER SET ‘utf8’;要修改的字符集名称
 * 查询:show databases; – 查询所有数据库的名称
 show create database 数据库名称; – 查询创建数据库语句
4.操作表:
 创建:
 列的数据类型:
 int:整型 id int,
 double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
 money double(5,2)
 char:固定长度字符串类型;
 name char(10) “张三”
 varchar:可变长度字符串类型;
 name varchar(10) “张三”
 text:字符串类型;存大格式的文本 比如存个小说 一般不用
 blob:字节类型;存字节类型的数据 比如电影字节 图片字节 但是一般不会把字节数据存到数据库当中
 date:日期类型,格式为:yyyy-MM-dd;
 time:时间类型,格式为:hh:mm:ss
 datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
 timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss
 如果该类型的字段不给赋值,则默认当前时间
5.语法字段的名称,不要使用mysql的关键字
 create table 表名(
 列名1 类型1,
 列名2 类型2,
 …
 列名n 类型n
 );
				create table student(
					sname varchar(20),
					age int,
					gender varchar(6)
				);
				select * from student;
 
6.删除:drop table 表名;
7.修改
			1.	修改之添加列:给stu表添加classname列:
				ALTER TABLE stu ADD (classname varchar(100));
			2.	修改之修改列类型:修改stu表的gender列类型为CHAR(2):
				ALTER TABLE stu MODIFY gender CHAR(2);
			3.	修改之修改列名:修改stu表的gender列名为sex:
				ALTER TABLE stu change gender sex CHAR(2);
			4.	修改之删除列:删除stu表的classname列:
				ALTER TABLE stu DROP classname;
			5.	修改之修改表名称:修改stu表名称为student:
				ALTER TABLE stu RENAME TO student;
 
8.show tables; – 查询该数据库下所有表名称
 desc 表名; – 查询表结构
 注意:操作表之前,应该先选择一个数据库使用:use 数据库名称;
9.DML:操作表中的数据
增:
 往表中插入数据 insert into
 日期类型的值,要用单引号引起来,字符类型也要用单引号引起来。
 简写:如果你要给表中所有的字段,都要插入值,那么前面的字段可以不用写
语法:
 insert into 表名(列名1,列名2,…) values(值1,值2,…);
 注意:如果表的所有列都添加值,则列名可以省略
 insert into stu(sname,age) values(“lisi”,23);
 insert into stu(sname,age,sex) values(“zhangsan”,23,‘1’);
 insert into stu values(“ww”,23,‘2’);
删:
语法:
				delete from 表名 [where 条件];
				truncate table 表名;-- 删除所有记录
					先删除表,再创建表。
				
				delete from stu	where sname = 'lisi';
 
改
			语法:
				update 表名	set 列名1 = 值1 , 列名2 = 值2... [where 条件]
			update stu set sex = "1" where sname = "lisi";
			update stu set sex = "1" where name = "lisi";
			update 
				customer 
			set 
				money = 500000
			where 
				id = xxx;
 
10.mysql在表的某一位置增加一列的命令
如果想在一个已经建好的表中添加一列,可以用诸如:
alter table t1 add column addr varchar(20) not null;
这条语句会向已有的表t1中加入一列addr,这一列在表的最后一列位置。如果我们希望添加在指定的一列,可以用:
alter table t1 add column addr varchar(20) not null after user1;
注意,上面这个命令的意思是说添加addr列到user1这一列后面。如果想添加到第一列的话,可以用:
alter table t1 add column addr varchar(20) not null first;
1、添加
格式:
alter table 表名 add column 列名 列的数据类型;
示例
alter table test4 add column addr text;
 
2、删除
格式:
alter table 表名 drop column 列名;
示例:
alter table test4 drop column addr;
 
11. DQL:查询
表示查询所有字段
 select * from emp; – 不带有条件的查询
 语法
		SELECT 
			selection_list /*要查询的列名称*/
		FROM 
			table_list /*要查询的表名称*/
		WHERE 
			condition /*行条件*/
		GROUP BY 
			grouping_columns /*对结果分组*/
		HAVING 
			condition /*分组后的行条件*/
		ORDER BY 
			sorting_columns /*对结果分组*/
		LIMIT 
			offset_start, row_count /*结果限定*/
 
条件查询
where 子句
 =、!=、<>(不等于)、<、<=、>、>=;
 BETWEEN…AND; 在什么范围之间
 IN(set);
 IS NULL;为空
 IS NOT NULL 不为空
 AND; 并且
 OR; 或者
 NOT;非
 12.模糊查询
 like:
		* 通配符
			* _:匹配单个任意字符
                            % 匹配多个任意字符
		比如: 我要查询姓名是3个任意字符组成的
		select  * from student sname like='___';
		例如:我要查询第二个字符是m的
		select * from student where sanme like '_m%';
	
		* %:匹配多个任意字符
		例如:我要查询名字中包含m的 select * from student where sname like '%m%';
		例如我要查询名字是a开头的 select * from student where sname like 'a%';
		例如我要查询名字是b结尾的 select * from student wher like '%b';
 
13.字段控制
-  
修改字段的别名:AS (可以省略)
 -  
修改列
-  
给字段起别名:
例如: select sname as 姓名, sage 年龄 from student;
*给运算字段起别名:
例如: select sname as 姓名, (工资+奖金) as 总收入 from student;* 给表起别名:给每一张表起一个别名。简化书写` 例如: select stu.sname, stu.sage from student as stu;
字段运算:
* null参与的运算,结果都为null
比如 工资 是100 奖金是null 我们让这两个字段运算 那结果就为null
* 一般会将null替换为0: ifnull(字段名称,如果是null的替换值) ifnull 是mysql的方言所有如果奖金字段为null 一般我们把奖金替换为0 例如: select sname,(工资+ifnull(奖金,0)) as 总收入from student; 
去除重复记录 比如我查询工资是3000的 出现了多条工资为3000 的记录 那我只想展示一条3000的记录 所以可以用 distinct 去除重复记录
DISTINCT例如: select distinct 工资 from student; -  
 
14.排序
order by 默认升序排列 ASC 默认值 DESC 降序排列
 按工资从小到大排
 select * from student order by 工资 asc;
 按工资从大到小排
 select * from student order by 工资 desc
 如果出现多条工资一样的 那我们可以指定第二排序条件
 select * from student order by 工资 desc,奖金desc;
15.聚合函数
聚合函数是用来做纵向运算的函数:
 COUNT():统计指定列不为NULL的记录行数; 统计个数的 比如我统计有多少个学生
 select count(sid) from student; 或者传个星 号 select count(*) from student; 一般不要传有null 值的字段
	 	MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
		例如 查询工资最大值    select max(工资) as 最高工资 from student;
		
	 	MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
		例如 查询 最少工资   select min(工资) as 最小工资 from student;
	 	SUM():计算指定列的数值和,如果指 定列类型不是数值类型,那么计算结果为0;
		 例如 计算总工资  select sun(工资) as 总支出 from student;
	 	AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
		例如:计算平均 工资 select avg(工资) as 平均工资 from student;
 
16.分组查询
group by 一般配合聚合函数使用 查出的数据才有意义
 查询的字段:
 1.分组字段本身
 2.聚合函数
 比如我按部分编号分组 比如有三个部门 然后我求每个部门的平均工资 那展示出来的数据应该有三条
 例如: select 部门编号,AVG(工资) from student group by 部门编号;
	1.例如查询 每个部门的部门编号 已经每个部门工资大于1500的人数
	select 部门编号, count(*) from student where 工资>1500 group by 部门编号;
	注意这里的 where 是对分组前的条件限定 也就是说不满足条件的 不参与分组
 
where和having
 where:在分组之前对条件进行限定。不满足条件,就不会参与分组
 having:在分组之后,对结果集的筛选
	2.例如 我要查询 各个部门平均工资 大于2000 的部门
	select 部门编号,avg(工资) from student group by 部门编号 having avg(工资)>2000;
	3. 例如我要查询 各个部门  员工工资大于1500 的平均工资  并且平均工资 大于2000的部门
	 上面这句话怎么理解呢? 首先查询各个部门 那肯定要按部门编号分组 分组前的条件限定是 员工工资大于1500的才参与分组
	计算出平均工资  然后对结果再进行筛选 筛选出 平均工资 大于2000的部门
	`select 部门编号,avg(工资) from student group by 部门编号 where avg(工资)>1500 having  avg(工资)>2000;`
 
17.分页查询
limit
 * limit 0,5 开始的记录索引, 每一页显示的条数 索引从0开始
 开始的记录索引 = (页码-1)*每一页显示的条数
	例如 我显示第一页  每页5条记录
	select * from student limit 0,5 ;  这是第一页 5 条记录
	select * from student limit 5,5 ; 这是第二页 5条记录
	select * from student limit 10,5 这是第三页 5条记录
	
	oracle:rownum 分页方言
	sqlserver:top 分页方言
 
18.case when then end 语句
给不同职位的员工加不同的工资,使用 case when then end 语句来完成
SELECT ename,job,sal AS 原来的工资,
CASE job
WHEN ‘PRESIDENT’ THEN sal+1000
 WHEN ‘MANAGER’ THEN sal+800
 ELSE sal+300
 END AS 涨后的工资
FROM emp;
– 查询最高工资的员工姓名
SELECT ename,MAX(sal) FROM emp; – 这个查出不对,没有条件
– 用子查查询
SELECT ename,sal FROM emp WHERE sal=(SELECT MAX(sal) FROM emp);
– 使用一个变量,来保存一下这个最高工资, 注意赋值的语法 使用 := 来赋值
 SELECT ename,sal,@gz:=MAX(sal) AS 最高工资 FROM emp;
 – 查看变量的值
 select @gz;










