Mysql学习第四天
1、跟用户相关的命令 (了解). DCL语句
1.1、 创建一个新的用户
CREATE USER 用户名@地址 IDENTIFIED BY '密码';
CREATE USER jerry@localhost IDENTIFIED BY '1234';
1.2、为用户添加权限
语法:GRANT 权限1, … , 权限n ON 数据库.* TO 用户名@IP
例子:GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON day15.* TO jerry@localhost;
1.3、撤销授权
REVOKE权限1, … , 权限n ON 数据库.* FORM 用户名
REVOKE CREATE,ALTER,DROP ON day15.* FROM jerry@localhost;
1.4、查看用户的权限 SHOW GRANTS FOR 用户名@主机;
SHOW GRANTS FOR jerry@localhost;
1.5、修改用户密码UPDATE
UPDATE USER SET PASSWORD=PASSWORD(‘密码’) WHERE User=’用户名’ FLUSH PRIVILEGES;
例子: UPDATE USER SET PASSWORD=PASSWORD('1234') WHERE User='jerry' FLUSH PRIVILEGES;
2、备份数据库 (不属于sql语句)
mysqldump -u root -p 1234 day15 > d:/day15.sql
恢复数据库
2.1、需要登录到数据库中
source d:/day15.sql;
2. 2、mysql命令恢复,不需要登录
mysql -u root -p day15 < d:/day15.sql
3、多表
我们现在使用的数据库叫做关系型数据库.
3.1、表关系
一对多/多对一: 在多的一方加入1的一方的外键
多对多: 使用中间表,分别引用两方的ID
一对一:
1> 主键同步 两个表中有关系的记录id一致.
2> 在1方加入 另一方的外键
3> 在另一方加入外键.
3.2、多表数据完整性约束
外键约束
增加一个外键约束
ALTER TABLE `day16`.`emp` ADD CONSTRAINT `fk_emp_dept` FOREIGN KEY (`DEPTNO`) REFERENCES `day16`.`dept`(`DEPTNO`);
删除一个外键约束
ALTER TABLE `day16`.`emp` DROP FOREIGN KEY `emp_ibfk_1`;
外键约束保证了数据的完整性.加入外键约束后, 如果主键被任何一个外键所引用.那么无法删除这条记录.只要在所有引用都删除的情况下,才可以删除这条记录.
非空约束 not null
唯一约束 unique
主键约束 primary key
4、多表查询
笛卡尔积
select * from emp,dept;
这种查询会将两个表的记录 分别逐个连接. 得到的记录数 是两个表记录数相乘的结果.
这种查询往往是没有意义的. 因为会产生很大一部分无效数据.
开发中应避免出现笛卡尔积的情况.
内连接
*查询所有有部门的员工以及员工的部门信息
select * from emp,dept where emp.deptno = dept.deptno;
这种查询就是内连接查询.
展示内连接的完整写法.
select * from emp inner join dept on emp.deptno = dept.deptno;
外连接
左外连接
*查询所有员工信息(包括没有部门的员工),以及部门信息.
select * from emp left join dept on emp.deptno= dept.deptno;
右外连接
*查询所有部门信息(包括没有员工的部门),以及员工信息.
=====================================================================================
5、子查询
概念: 就是一个查询的条件需要用到另一个查询的结果.使用子查询就是将两个sql语句嵌套一步完成.
-- 查询出 所有员工中 工资高于名叫 SMITH 的员工信息
-- 子查询的结果是 1行1列 => 当作一个值
-- 传统方式 2步
-- 1> 查询SMITH
SELECT sal FROM emp WHERE ename='SMITH';
-- 2> 工资高于名叫 SMITH 的员工信息
SELECT * FROM emp WHERE sal > 800;
-- 子查询
SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE ename='SMITH');
-- 问题: 相比传统查询,子查询会提高查询效率吗? 不会
-- 查询出 所有员工中 比 20号部门 所有员工工资都高的员工信息
-- 子查询的结果是 多行1列 => 当作一个集合
-- 传统
SELECT MAX(sal) FROM emp WHERE deptno=20;
SELECT * FROM emp WHERE sal > 3000;
-- 子查询
-- SELECT * FROM emp WHERE sal > (SELECT MAX(sal) FROM emp WHERE deptno=20);
SELECT * FROM emp WHERE sal > ALL (SELECT sal FROM emp WHERE deptno=20);
-- 查询出 所有员工中 比 20 号部门最低的工资高的员工信息
-- 子查询的结果是 多行1列
-- 子查询
SELECT * FROM emp WHERE sal > (SELECT MIN(sal) FROM emp WHERE deptno=20);
SELECT * FROM emp WHERE sal > ANY (SELECT sal FROM emp WHERE deptno=20);
-- 查询出 员工信息 以及 员工领导的名字
-- 子查询的结果是 多行多列 => 当作一张表
SELECT e1.`ENAME` AS 员工名称 , e2.`ENAME` AS 领导名称 FROM emp e1,emp e2 WHERE e1.`MGR` = e2.`EMPNO`;
SELECT e1.`ENAME` AS 员工名称 , e2.`ENAME` AS 领导名称 FROM emp e1,(SELECT * FROM emp) e2 WHERE e1.`MGR` = e2.`EMPNO`;
子查询分类:
一行一列,将子查询的结果当做单个值.
多行一列,将子查询结果当做一个集合.
多行多列,将子查询结果当做一张表.
子查询关键字:
all
条件 > all(子查询) --> 大于子查询中最大值
条件 >= all(子查询) --> 大于等于子查询中最大值
条件 < all(子查询) --> 小于子查询中最小值
条件 <= all(子查询) --> 小于等于子查询中最小值
any
条件 > any(子查询) --> 大于子查询中最小值
条件 >= any(子查询) --> 大于等于子查询中最小值
条件 < any(子查询) --> 小于子查询中最大值
条件 <= any(子查询) --> 小于等于子查询中最大值
子查询比较普通查询会不会提高效率?
子查询不会提高效率.
Mysql学习第四天的更多相关文章
- MySql学习笔记四
MySql学习笔记四 5.3.数据类型 数值型 整型 小数 定点数 浮点数 字符型 较短的文本:char, varchar 较长的文本:text, blob(较长的二进制数据) 日期型 原则:所选择类 ...
- 转MYSQL学习(四) 查询
MySQL中select的基本语法形式: select 属性列表 from 表名和视图列表 [where 条件表达式] [group by 属性名[having 条件表达式]] [order by 属 ...
- MySQL学习(四) SQL连接查询
更多情况下,我们查询的数据来源于多张表,所有有必要了解一下MySQL中的连接查询. SQL中将连接查询分成四类:交叉连接,内连接,外连接和自然连接. 数据准备 student表 -- -------- ...
- MySQL学习(四)深入理解乐观锁与悲观锁
转载自:http://www.hollischuang.com/archives/934 在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据 ...
- MySQL学习笔记四:字符集
1.字符集就是字符和其编码的集合,查看数据库支持的字符集 show character set 2.查看服务端启动时默认的字符集 mysql> show variables like 'char ...
- mysql学习(四)-字段类型
mysql数据类型: 数值型: 整形:int 浮点型:float double decimal:定点型 日期: date '2012-01-02' time '10:01:01' datetime ...
- MySQL学习笔记(四)—存储过程
一.概述 存储过程是数据库定义的一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句.存储过程可以避免开发人员重复的编写相同的SQL语句,而且存储过程是在MySq ...
- MySQL学习笔记(四):存储引擎的选择
一:几种常用存储引擎汇总表 二:如何选择 一句话:除非需要InnoDB 不具备的特性,并且没有其他办法替代,否则都应该优先考虑InnoDB:或者,不需要InnoDB的特性,并且其他的引擎更加合适当前情 ...
- MySQL学习(四)Join 等开发常用的操作 --- 2019年2月
1.查数据太多不会把内存用光 InnoDB 的数据是保存在主键索引上,然后索引树分割保存在数据页上,数据页存在内存中/磁盘.change buffer 就是先把修改操作记录,然后读数据的时候,内存没有 ...
- mysql学习笔记四 —— AB复制
要点:ab复制 mysql集群架构流程: ABB(主从复制)-->MHA(实现mysql高可用.读写分离.脚本控制vip飘逸)-->haproxy(对slave集群实现分发,负载均衡)-- ...
随机推荐
- 2016 Multi-University Training Contest 10 [HDU 5861] Road (线段树:区间覆盖+单点最大小)
HDU 5861 题意 在n个村庄之间存在n-1段路,令某段路开放一天需要交纳wi的费用,但是每段路只能开放一次,一旦关闭将不再开放.现在给你接下来m天内的计划,在第i天,需要对村庄ai到村庄bi的道 ...
- redis初识及基本操作
一.redis介绍: 1.Redis是什么: REmote DIctionary Server(远程字典服务器) 是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(Key-Value) ...
- linux学习四x系统指令
一.任务调度 任务调度:系统在某个时间执行特定的命令或者程序 如: 1.对于一些需要周期性执行的一些系统指令 2.定期的病毒扫描 3.定期数据库备份等 命令:crontab 设置任务调度文件: / ...
- 1.Ioc&DI和Spring
1.面向对象回顾和案例 面向对象程序设计:1 2 3 4 案例分析: 需求分析: 报表功能: 报表服务类,检索数据,并生成图标 报表生成器类,生成不同格式的报表文件,例如PDF格式.H ...
- vue(4)hello world
在前一章基础上开发. 1.下载vue.js.(https://cn.vuejs.org/v2/guide/installation.html) 在hello-vue根目录下创建js文件夹,并将该vue ...
- ajax 工作原理以及其优缺点
1.什么是AJAX?AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术.它使用:使用XHTML ...
- forEach与map
一.原生js forEach()和map()遍历 共同点: 1.都是循环遍历数组中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前 ...
- 转 python 随机走动的模拟
https://blog.csdn.net/python2014/article/details/21231971 麻省理工的随机走动模块,还不错,三天搞懂了,不过懂得不彻底. 记录下修改的代码 ...
- C# 连接 Exchange 发送邮件
C#连接Exchange 发送邮件代码如下 /// <summary> /// exchange群发邮件 /// </summary> /// <param name=& ...
- 【3dsMax安装失败,如何卸载、安装3dMax 2018?】
AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...