1.行列互换select 配合着group by 使用到了分组函数if()函数
2.分页查询limit a,b
select *from xxx where xxx group by xxx order by xxx limit a,b;
a起始行索引 0 开始 包含着当前行
b一共查询多少记录
3.DCL数据控制语言
控制用户的权限
1.创建一个新用户 管理员身份
create user ‘用户名’@’IP’ idfentified by ‘密码’;
update mysql.user set authentication_string = password(‘新密码) where user = ‘用户名’;
2.创建的用户默认只有一个权限usage 只能登陆
给用户赋予权限
grant 权限 on 数据库名.表名 to ‘用户’@’IP’; show grants for ‘用户名’@’IP’;
强烈建议 flush privileges;
3.可以利用新的账号密码去登陆数据库 window提供的cmd命令窗口 提前配置环境变量
mysql -u root -p password:xxxxx
4.回收用户所拥有的的权限
revoke 权限 on 数据库名.表名 from ‘用户名’@’IP;
5.删除用户
drop user ‘用户名’@’IP’;
delete from mysql.user where user = ‘wyh’ and host = ‘localhost’;
数据库设计的范式(Java设计模式)
设计数据库时, 遵循的不同规范,这些规范统称为范式
范式的目的是为了减少数据库中的冗余
管理表格的时候变的容易(修改 删除)
查询的时候可能就设计到表格联合的问题(性能)
Normal Form(标准化形式—普通范式)
创建一张表格
用来记录学校里面不同楼宇项目的一些信息
工程表格Project
项目编号 项目名称
A 教学楼
B 餐饮楼
C 宿舍楼
[我们发现项目是由工程师来做的, 所以他俩是多对多关系]
项目_工程师中间表
项目编号 工程师编号
A 1
A 2
A 3
A 4
B 5
B 6
C 7
工程师表格Engineer
工程师编号 工程师名字 职称编号
1 赵一一 1
2 钱二二 1
3 孙三三 2
4 李思思 3
5 周武武 1
6 吴六六 2
7 郑七七 3
职称表格Rank
职称编号 职称名称 小时工资
1 高工 300
2 普工 200
3 助工 50
[这个表已经不遵循1NF 原子性可以保证 表格内没有主键]
设定联合主键(项目编号—工程师编号)
[产生了非主键列受到主键或主键的部分影响]
—-将数据拆开存储在两张表格里
[产生了非主键列受到非主键列的影响]
1.数据有大量的冗余
2.修改起来比较麻烦
1NF
数据的原子性
(每一个表格的每一个列都是不可分割—行列交叉点的单元格内只存储一个数据)
数据库中的每一张表格 设计每一个列都是不可分割的
每一个表格必须有主键约束(快速查询某一行记录)
2NF
在满足第一范式的前提下
不允许出现部分依赖性
不允许出现部分依赖性(非主键列不能收到主键列或主键的一部分影响)
3NF
在满足前两个范式的前提下
不允许出现传递依赖性
(非主键列不能受到非主键列或非主键的一部分影响)
