MySQL自学记录--多表查询/多表关系/事务/约束

一、约束

 1.约束:确保字段的完整性,正确性,有效性

 * not null  ,unique , primary key 非空且唯一 ,foreign key.
 * 唯一约束unique
 *      唯一约束unique限定的值可以有多个null
 * 添加约束
 *      Alter table 表名 MODIFY 字段名 约束
 * 删除约束
 *      Alter table 表名 MODIFY 字段名
 * 删除主键
 *      Alter table 表名 DROP PRIMARY KEY
 * 自动增长:auto_increment
 *          ALTER TABLE stu MODIFY num INT  -- 删除自动增长
 *          ALTER TABLE stu MODIFY num INT AUTO_INCREMENT  -- 添加增长
 * 外键约束:
 *      create table 表名(
 *          ...
 *          外键列
 *          constraint 外键名称 foreign key 外键列名称 references 主表名称(主表列名称)
 *      );
 *
 *      删除外键
 *          Alter Table 表名 drop foreign key 外键名称
 *      添加外键
 *          Alter Table 表名 add   constraint 外键名称 foreign key 外键列名称 references 主表名称(主表列名称)


 2. 级联:

 *      更新:
 *       Alter Table 表名 add   constraint 外键名称 foreign key 外键列名称 references 主表名称(主表列名称)
 *       on update cascade
 *       删除:
 *       Alter Table 表名 add   constraint 外键名称 foreign key 外键列名称 references 主表名称(主表列名称)
 *       on delete cascade

 

二 、多表关系

多表关系:一对一,一对多,多对多
 

 1.操作方式:

 *      一对一:在任意的一方建立唯一外键,指向任意的一方的主键。
 *      一对多,在多的一方建立外键,指向一的一方的主键。
 *      多对多,借助中间表,至少包含两个字段,这两个表作为第三张表的外键,分别指向两张表的主键,联合主键


 2. 范式:

 *      第一范式:每一列是不可分割的 原子数据项
 *               问题:数据冗余;添加新数据不合法;数据删除将删除行所有信息。
 *      第二范式:在第一范式基础上,消除非主属性对主码的 部分函数依赖。
 *               函数依赖:(A-->唯一B,B依赖于A)
 *               完全函数依赖:(如果A是属性组,B的确定需要依赖于A属性组中所有属性值) A(a,b,c)-->B
 *               部分函数依赖:(如果A是属性组,B的确定需要依赖于A属性组中部分属性值) A(a,b,c),    A(a,c)-->B
 *               传递函数依赖: A-->B,B-->C.存在A-->C ,C传递依赖于A
 *               码:表中的属性或者属性组被其他所有属性完全依赖,则该属性或者属性值为该表的码。
 *
 *      第三范式:在第二范式的基础上,任何非主属性不依赖于其他非主属性(消除 传递依赖)
 


 3.数据库备份与还原:

 *    命令行:
 *           备份:mysqldump -u用户名 -p密码  数据库名称 > 保存的路径
 *           还原
 *                  登陆,mysql -u用户名 -p密码
 *                  创建,create database 数据库名称
 *                  使用,use 数据库名称
 *                  执行,source 文件路径

 

三、多表查询

 * 多表查询直接查询,组成笛卡尔积,即两个集合的所有组成情况,需要消除无用的数据
 *
 * 多表查询分类:
 *      1.内连接: 确定表 ,字段,条件
 *          隐式:
 *               select xx1,xx2,xxn from table1 t1, table2 t2 where condition
 *          显式:
 *              select 字段 from table1 (inner) join table2 on condition
 *      2.外连接
 *          左外连接:查询左表所有数据以及其交集部分
 *                   select 字段 from table1 lift (outer) join table2 on condition
 *          右外连接: 查询左表所有数据以及其交集部分
 *                  select 字段 from table1 right (outer) join table2 on condition
 *      3.子查询:查询中嵌套查询,被嵌套的部分为子查询
 *
 *      子查询查询情况不同
 *          单行单列:子查询作为条件,使用运算符判断
 *          多行单列:子查询作为条件,使用in判断,
 *          多行多列:子查询作为虚拟表查询

 

四、事务

 Transaction
 * 基本介绍
 *      事务概念:包含多个步骤的业务处理,被事务管理,则要么同时成功,要么同时失败。异常则回滚。
 *      操作:开启事务start transaction,回滚rollback,提交commit。
 *      MySQL中DML(增删改)默认提交事务,持久化更新;如果开启事务不提交,关闭窗口将自动回滚。
 *      查看默认提交方式 :Select @@autocommit;  1自动,0手动
 *      修改默认提交方式 :Set @@autocommit=1/0;
 * 四大特征
 *      1.原子性,不可分割的最小操作单位。
 *      2.持久性,一旦提交或回滚,数据库会持久化保存数据。
 *      3.隔离性,多个事务之间相互独立。
 *      4.一致性,数据操作前后,数据总量不变。
 * 隔离级别
 *      概念:多个事务之间是隔离,相互独立的,但如果多个事务同时操作同一批数据,会引发问题,可通过设置不同隔离级别解决
 *      存在问题:
 *          1.脏数据:事务读取到另一个事务未提交的数据
 *          2.不可重复读(虚读):同一事务中,两次读取到的数据不同
 *          3.幻读:一个事务操作数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改
 *      隔离级别:
 *          1. read uncommitted 读未提交 : 1,2,3
 *          2. read committed 读已提交: 2,3
 *          3. repeatable read 可重复读: 3
 *          4. serializable 串行化:
 *      隔离级别从小到大,安全性越来越高,但效率越来越低
 *      查询隔离级别: select @@tx_isolation
 *      设置隔离级别:set global transaction isolation level 级别字符串;

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值