MySQL——MYSQL的基本使用-增删改查

1.简介

服务器:能够提供某项服务的计算机
服务器:硬件和软件的结合。
数据库服务器:装有数据库软件的计算机,能够提供对数据增删改查的服务。
web服务器:装有web软件(tomcat,nginx,node.js)的计算机,能够上网服务(浏览器网络资源)的服务。
数据库:数据存储的仓库,用于存储和管理数据,能够对数据进行增删改查的软件
关系型数据库:数据存存储在由行和列所构成的这种二维表,类似Excel表,而且表和表之间有关联关系。
非关系型数据库:类似与JSON的这种数据方式来存储数据 redis {s1:{},s2:{}}

2.MYSQL的基本使用

安装

在官网下载MYSQL安装包,双击运行 mysql-installer-community-5.7.28.0.msi,
选择custom自定义安装,. 选择要安装的服务器, 展开 MySQL Servers,选择 MySQL Server 5.7.28-X64 ( 如果是32位操作操作系统,
选 X86)。
选择 Execute 进行安装 , 注意 Status 列会变成 Installing 正在安装.
当 Status 变成 Complete 安装 时,表示安装完成, 点击 Next。
点击 Next
选择 Stadalone MySQL Server .... , 点击 Next
mysql服务端口号记住是 3306
 root 帐号的密码自己设置,点击 Next
 开机启动 Mysql Server , 采用 系统用户启动 Mysql 服务, 服务名 : MySQL57
点击 Execute 执行生效服务配置
其他版本安装过程类似

卸载

1.关闭mysql服务
			1.手动关闭:我的电脑-->右键-->管理
			2.cmd-->services.msc,打开服务面板
			3.cmd-->net stop mysql。(注意获取cmd管理员权限)
2.卸载
3.删除数据存储文件
			找到mysql的安装目录。中my.ini文件
		    datadir目录,删除

使用

登陆数据库:
			cmd-->mysql -uroot -p你自己的密码
			
	 服务:系统后台进程
			启动服务: net start mysql
			停止服务: net stop mysql
            删除服务    sc delete mysql 

配置

修改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.SQL的简单介绍

SQL:结构化查询语言
概念:通过sql语言可以操作所有的关系型数据库。每种数据库之间会存在差异,称为 "方言"
sql分类:
		DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
		DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(增、删、改)
		DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
		DQL(Data Query Language):数据查询语言,用来查询记录(数据)。

4. DDL:操作数据库和表

		* 操作数据库:
			* 创建:create database 数据库名称;
			* 删除:drop database 数据库名称;
			* 修改:ALTER DATABASE mydb1 CHARACTER SET 要修改的字符集名称
			* 查询:show databases; -- 查询所有数据库的名称
					show create database 数据库名称; -- 查询创建数据库语句
操作表:
			创建:
				列的数据类型:
					 	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
							如果该类型的字段不给赋值,则默认当前时间

语法:

注意 字段的名称,不要使用mysql的关键字
       create table 表名(
						列名1 类型1,
						列名2 类型2,
						...
						列名n 类型n
					);
					
					create table student(
						sname varchar(20),
						age int,
						gender varchar(6)
					);

删除:drop table 表名;

修改:


				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;

查询:

show tables; -- 查询该数据库下所有表名称
					desc 表名; -- 查询表结构
				注意:操作表之前,应该先选择一个数据库使用:use 数据库名称;

5.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 
					customer 
				set 
					money = 500000
				where 
					id = xxx;

6. 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;非

7.模糊查询

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';

8.字段控制

* 修改字段的别名: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;

排序:

 order by  默认升序排列  ASC 默认值                DESC 降序排列
		 按工资从小到大排
		select * from student order by 工资 asc;
		按工资从大到小排
		select * from student order by 工资 desc 
		如果出现多条工资一样的 那我们可以指定第二排序条件 
		select * from student order by 工资 desc,奖金desc;

9.聚合函数

聚合函数是用来做纵向运算的函数:
		 	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;

10.分组查询

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;

11.分页查询

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 分页方言

12.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;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Geek Li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值