数据库的设计
1.多表之间的关系
1.一对一的关系:
人和身份证之间的关系
2.一对多的关系(多对一的关系)
部门和员工一个部门由多个员工,员工只能对应一个部门
3多对多的关系
学生和课程:
实现这些关系:
一对多:
再多的一方建立外键,设置主键
多对多的关系
实现方式
建立一张中间表
表中必须有其他两个表的主键
联合主键
一对一:
任意一方添加外键即可。
外键的建立 constrains fk foreign key (cid) reference 主标(列名)
2.数据库设计的范式:
1.概念,设计数据库是遵循的规则,范式越高冗余越少,遵循后边范式必须遵循前边范式
三种范式:
第一范式:每一项都是不可分割的原子项,不可分割。最基本要求
存在问题1.冗余多重复多 2.添加新属性不合法,3.删除已有数据存在问题
第二范式:在第一个范式的基础上,非码属性必须完全依赖于候选码消除部分依赖
1.函数依赖:如果属性的值确定出唯一属性的值,则学号依赖于姓名
完全函数依赖:a是一个属性组,b对啊组中的属性缺一不可
部分函数依赖:a是一个函数组,b依赖与a中的某个属性,称b为部分函数依赖a
传递函数依赖:a是一个属性组,b对啊组中的属性缺一不可,c有依赖于b,所以c传递依赖与a
如果在一张表中,一个属性或者属性组被其他属性所依赖,那么称之为码
主属性(码属性组中的所有属性)
非主属性(其他属性)
解决方式:
拆分表 完全依赖放到一块
解决了数据冗余问题
第三范式:在第二个范式的基础上,任何非主属性不依赖于其他非主属性,消除传递依赖
解决方式:继续拆分
解决了,添加数据,删除数据的问题
数据库的备份还原
1.命令行的方式
mysqldump -u用户名 -p密码 数据库名 > 保存的路径
还原:1.登录数据库2.创建数据库3.use 数据库名 4.执行备份文件 source 文件绝对路径
2.图形化的方式
图形化界面
事务处理:
1.事务的基本介绍
概念:如果一个包含多个步骤的业务操作,被事务管理,要么全部成功,要么全部失败:
张三给李四500
1.查询张三账户余额
2.张三账户-500
3.李四账户加500
没有被事务管理,出现异常,500元不翼而飞
被事务管理之后就会回滚
操作:1.开启 start transaction
2.发现出问题,回滚 rollback;
3. 提交 commit;
4.mysql数据库中,事务默认提交,一条dml语句,语句会自动提交一次事务。
事务提交两种方式,一手动提交 oracle 默认手动提交开启事务,二,自动提交 一条dml语句创建一次
@@autocommit 值为1代表自动提交 设置set@@。。。=0;执行语句后不会再提交。
2.事务的四大特征:
1.原子性,不可被分割最小单位,要么同时成功,要么同时失败,
2.持久性,如果事务一旦提交或者回滚,数据库表会被持久更新
3.隔离性,多个事务之间,相互独立。
4.一致性,实务操作前后数据总量不变
3.事务的隔离级别(了解)
多个事务之间相互独立;多个实务操作操作同一批数据,则会引发一些问题,设置不同级别就可以解决
1.脏读 一个事务读取到另一个数据中没有提交的数据
2.不可重复读 同一事务,读取的数据不一样。
3.幻读 一个事务操作数据表中所有记录,另一个表中添加数据,查询不到自己的修改
1.read uncommited;
1,2,,3
2.read committed(oracle)
2,3
3.repeatable read(mysql)
3
4.serializable:(把表锁上)
串行化
安全性越来越高,运行效率越来越低
查询隔离级别: select @@tx_isolation;
设置隔离级别:set global transaction isolation level;
DCL(database control language)
控制权限和添加用户
//ddl 数据库和表 //dml 增删改表数据 //dql 查询操作
DBA 数据库管理员:
1.管理用户:
1.添加 create user ‘用户名’@‘主机名’ identitied by ‘密码’;
2.删除 drop user ‘用户名’;
3.查询 切换到 mysql数据库 use mysql 查询user表 select * from user
4.修改密码 update user set password =password(‘新密码’) where user=“用户名”;
set password for ‘用户名’@‘主机名’=password(‘新密码’);
如果root用户密码怎么办:以管理员身份运行cmd -》net stop mysql-》启动 无用户无密码mysql服务
mysqld–skip-grant-tables->新窗口mysql-》 use mysql --》改密码操作update user set password =password(‘新密码’) where user=“root”;–》打开任务管理器,手动结束mysqld进程