简述
零、数据库分为关系型数据库、非关系型数据库。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、纯学习记录使用,如有错误,还望指正