数据库——MySql(分类、变量、语法、常用语句、事务)

简述

零、数据库分为关系型数据库、非关系型数据库。MySQL就是典型的关系型数据库(表格)
一、SQL:Structured Query Language,结构化查询语言。MySQL关系型数据库。
二、MySQL

1、数据定义语言:Data Definition Language,简称DDL(操作数据库、表)
      1、用于定义数据库中的数据对象,例如,数据库、数据表、列等
      2、使用关键字:create、alter、drop、show(desc查看表)
2、数据操作语言:Data Manipulation Language,简称DML(操作表中的数据)
      1、用于修改、删除、增加数据的语言,例如,增加一行、更新一个字段、删除一行
      2、使用关键字:insert、delete、update等
3、数据控制语言:Data Control Language,简称DCL(权限)
      1、用于定义数据的访问权限、设定安全级别、设定事务级别、创建用户
4、数据查询语言:Data QueryLanguage,简称DQL(查询语言)
      1、用于查询数据的语言
      2、使用关键字:select、from、where、inner
5、事务控制语言(TCL)
      1、通过COMMIT、SAVEPOINT、ROLLBACK命令确保被DML影响的表的所以行及时得以更新
6、指针控制语言(CCL)
      1、通过DECLARE CURSIR、FETCH INTO、UPADATE WHEWE CUR-RENT 语句对一个或者多个表单独行经行操作

Ⅰ、变量

在这里插入图片描述
注意:
1、char、varchar是都是字符串。
引用——
区别一,定长和变长
char 表示定长,长度固定,varchar表示变长,即长度可变。char如果插入的长度小于定义长度时,则用空格填充;varchar小于定义长度时,还是按实际长度存储,插入多长就存多长。

因为其长度固定,char的存取速度还是要比varchar要快得多,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以会占据多余的空间,可谓是以空间换取时间效率。varchar则刚好相反,以时间换空间。

区别之二,存储的容量不同
对 char 来说,最多能存放的字符个数 255,和编码无关。
而 varchar 呢,最多能存放 65532 个字符。varchar的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是 65,532字节。

Ⅱ、👉MySQL常用语句👈

下文顺序:增、删、改、查(查参照上文链接中的内容)

  • 操作数据库 database(DDL)
        create database 名字
        drop database 名字
        alter database 名字
        show
  • 操作表 table(DDL)(更改表结构也是对表进行操作,而不是对表中数据)
        creat table 名字
        drop table 名字
        alter table 名字(可用于重命名、增加列、删除列、修改列)
        show(desc)
  • 操作表中数据value(DML)
        insert into 名字(列名1,列名2,……) values(……),(……)……【每列的数值都不为空时,可以省略列名1……】
        delete from 名字 where……
        update 名字 set 列名 = 新值,列名…… where = …… / truncate table 表名(直接把表删除,再创建一个一摸一样的表)

Ⅲ、注意事项0

其他查询见上文 【Ⅱ、MySQL‘’】语句

1、不等于:!=、<>

2、为列名取别名时,AS关键字可以省略

3、“or”关键字可以使用“||”代替。”and“关键字可以使用”&&“代替

4、desc降序;asc升序

#查询每种工作的最高薪资并升序显示
SELECT dname,MAX(sal) AS 高薪 FROM emp e,dept d WHERE e.deptno=d.deptno  GROUP BY e.deptno ORDER BY 高薪 DESC;

5、如果某列的值(sal)要与有null值的列(comm)相加:sal + IFNULL(comm,0)

6、分页查询

第一页:select * from emp limit 0,5;
第二页:select * from emp limit 5,5;
第n 页:select * from emp limit (页数-1)*5,5;

7、去重distinct

#通过员工表查询公司有哪几个部门
SELECT DISTINCT dname FROM emp AS e ,dept AS d WHERE e.deptno = d.deptno ;

8、多次查询

#找出薪水比公司平均薪水高的员工,要求显示员工的名字和薪水
SELECT ename,sal FROM emp WHERE sal>(SELECT AVG(sal) FROM emp);

9、算数运算

1、想要做加法运算,结果被当作字符串相加
	sal*1 + comm*1
2、非空列,与有空值的列相加
	sal + IFNULL(comm,0)
	sal + nvl(comm,0)

10、一些关键字的优先顺序

执行循序:where——》group by——》select——》having——》order by … [desc/asc]

11、where与having的区别

1、having对分组后的内容进行筛选(所以,有group by才能使用having;反之,不然。),而where是先赛选再分组
2、having能使用聚合函数;where不能使用聚合函数
3、where先执行,再执行having

12、格式化日期数据

SQL>SELECT DATE_FORMAT(start_time,"%Y-%m-%d") as “时间”;

13、删除查询的结果

报错:不能同时操作同一张表
如果要删除a表中的数据,可以将查询的结果当作另一张表b,再次查询b表,将其当作where条件来删除a表中数据
delete from a, (select max(age) as m from a) as b where a.age = b.m;

14、unsigned不能为负数

Ⅳ、备份与恢复

一、可视化工具

备份

选择要备份的数据库,右键选择:备份/导出——设置路径——导出

恢复

空白区域鼠标右键——执行SQL脚本…——选择备份时生成的SQL——执行

二、控制台

在没有登录mysql服务器的情况下直接进行备份/恢复

备份

mysqldump -u名字 -p密码 要备份的数据库名>存储路径

恢复

mysql -u名字 -p密码 恢复后的数据库名<备份文件的路径

Ⅴ、事务

解释
完成某些功能时,需要成功执行一系列sql语句,但是不好判断是否都能成功执行,故将这系列sql语句绑成一个逻辑单元,称为事务。其中有一条sql执行失败,那么已经执行的sql将被撤回(回滚)。

案例分析
”我“ 给 ”你“ 转账。其中涉及我的钱变少,你的钱变多,且总的金钱数目不变。如果其中一项操作失败,那么转账操作就是失败的。所以需要把转账的一系列操作看成一个整体,事务。

事务语句
开启事务start transaction
提交事务commit
回滚事务rollback

步骤
start transaction
sql语句
commit或者rollback

怎么判断这段sql语句成功还是失败?
就需要涉及逻辑判断,一般在Java中操作,见JDBC(下)
👉点击👈



简单练习

在这里插入图片描述

#通过员工表查询公司有哪几个部门
SELECT DISTINCT dname FROM emp AS e ,dept AS d WHERE e.deptno = d.deptno ;
#查询每种工作的最高薪资
SELECT dname,MAX(sal) FROM empGROUP BY job;
#查询每种工作的最高薪资并升序显示
SELECT job,MAX(sal) AS 高薪 FROM emp GROUP BY job ORDER BY 高薪 ASC;
#查询每个部门的平均薪资
SELECT deptno,AVG(sal) FROM emp GROUP BY deptno;
#查询平均工资大于2000的岗位的平均工资
SELECT job,AVG(sal) FROM emp  GROUP BY job HAVING AVG(sal)>2000;
#查询当前员工中工资排在前三位的人的信息
SELECT * FROM emp ORDER BY sal DESC  LIMIT 3;
#查询员工表数据并进行分页,每页显示5条数据,查看第五页的数据
SELECT * FROM emp LIMIT (5-1)*5,5;
#找出薪水比公司平均薪水高的员工,要求显示员工的名字和薪水
SELECT ename,sal FROM emp WHERE sal>(SELECT AVG(sal) FROM emp);
SELECT ename,sal FROM emp AS e,(SELECT AVG(sal) AS a FROM emp) AS s WHERE e.sal>s.a;
#找到每个部门薪水最高的员工的信息
SELECT * FROM emp WHERE sal IN(SELECT MAX(sal) FROM emp GROUP BY deptno);


PS:
1、目录带0字符,表示有需要注意的点
2、【】,表示重要
3、删除线,表示问题已经解决
4、纯学习记录使用,如有错误,还望指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

陈年_H

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

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

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

打赏作者

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

抵扣说明:

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

余额充值