三大范式
第 1 范式 原子性,每列不可再拆分
存在的问题:数据冗余,数据添加存在问题,数据删除存在问题
第 2 范式 不产生局部依赖,表中每一列都完全依赖于主键。
存在的问题:数据添加存在问题,数据删除存在问题
第 3 范式 不产生传递,表中每一列都直接依赖于主键
多表查询
笛卡尔积
有两个集合A ,B,取这两个集合所有的组合情况
多表查询:
内连接:
隐式内连接,
Select 字段列表 from 表1,表2 where 关联条件 and 条件;
显式内连接
Select 字段列表 from 表名1 inner join 表名2 on 关联条件 where 条件;
左外连接:
Select 字段列表 from 表名1
Left join 表名2 On 关联条件
Where 条件
右外连接:
Select 字段列表 from 表名1
right join 表名2 On 关联条件
Where 条件
子查询:
SELECT 查询字段 FROM 表 WHERE 字段=(子查询);
事务
事务:
如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败
操作:
1.开启事务:start transaction;
2.回滚:rollback;
3. 提交:commit
事务的提交方式:手动和自动
开发中一般是手动关闭自动提交
四大特性:
原子,隔离,持久,一致性
修改事务的默认提交方式:
set @@autocommit=0;
事务的隔离级别:
概念:多个事务之间隔离的,互相独立的,但是如果多个事务操作同一批数据,则会引发一些问题,
设置不同的隔离级别就可以解决这些问题
隔离级别:
1.read uncommitted
2.read committed
3.repeatable read
4.serializable
* 数据库查询隔离级别
select @@tx_isolation
设置隔离级别
set global transaction isolation level 级别字符串;
DCL
* DCL:管理用户,授权
1. 管理用户
1. 添加用户:
* 语法:CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
2. 删除用户:
* 语法:DROP USER '用户名'@'主机名';
3. 修改用户密码:
UPDATE USER SET PASSWORD = PASSWORD('新密码') WHERE USER = '用户名';
UPDATE USER SET PASSWORD = PASSWORD('abc') WHERE USER = 'lisi';
SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123');
* mysql中忘记了root用户的密码?
1. cmd -- > net stop mysql 停止mysql服务
* 需要管理员运行该cmd
2. 使用无验证方式启动mysql服务: mysqld --skip-grant-tables
3. 打开新的cmd窗口,直接输入mysql命令,敲回车。就可以登录成功
4. use mysql;
5. update user set password = password('你的新密码') where user = 'root';
6. 关闭两个窗口
7. 打开任务管理器,手动结束mysqld.exe 的进程
8. 启动mysql服务
9. 使用新密码登录。
4. 查询用户:
-- 1. 切换到mysql数据库
USE myql;
-- 2. 查询user表
SELECT * FROM USER;
* 通配符: % 表示可以在任意主机使用用户登录数据库
2. 权限管理:
1. 查询权限:
-- 查询权限
SHOW GRANTS FOR '用户名'@'主机名';
SHOW GRANTS FOR 'lisi'@'%';
2. 授予权限:
-- 授予权限
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
-- 给张三用户授予所有权限,在任意数据库任意表上
GRANT ALL ON *.* TO 'zhangsan'@'localhost';
3. 撤销权限:
-- 撤销权限:
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
REVOKE UPDATE ON db3.`account` FROM 'lisi'@'%';
|