多表约束作用 ;用来保证数据的完整性的。
单表约束 ---- 主键约束 / 唯一约束 / 非空约束
多表约束 ----- 外键约束 : 用来保证数据完整性(多表之间);
【创建两个表 进行外键演示】在表上添加外键 -- alter table 表名 add foreign key (dno) references dept(did);
设置外键为非空 -- alter table employee modify dno int not null;
表与表的关系“一对多的关系 --- 一对多 -- 一个部门下有多个员工 一个员工只属于一个部门
多对多的关系 --- 一个学生可以选择多门课程 一门课程可以被多个学生选择
一对一的关系 --- 一个公司有一个注册地址 一个注册地址只能对一个公司
一对多的关系介绍: ** 建表原则: 在多的一方创建外键 指向一的一方的主键;**
多对多的建表原则:需要创建中间表 中间表中至少两个字段 分别作为外键指向多对方的主键;
多表查询分类---1. 链接查询 ---- - cross join 交叉链接 : 查询到的是两个表的笛卡尔积; 语法: select * from 表1 cross join 表二 ;select * from 表一 , 表二;
2. **内连接 --- inner join 显示内连接: 在SQL中显示的调用inner join 关键字;** 语法: select * from 表1 inner join 表2 on 关联条件; 隐式内连接: 在SQL中没有调用 inner join 关键字; 语法: selec t * from 表1,表2 where 关联条件;
3. 外链接 --- outer join (outer 可以省略)左外链接:--- 语法: select * from 表1 left outer join 表2 关联条件;右外链接: ---- 语法: select * from 表1 right outer join 表2 on 关联条件;
一对一的关系建表原则: 建表原则: 1 唯一外键对应 : 假设是一对多 在多地一方创建外键指向一的一方的主键 将外键设置为 unique 2 主键对应 将连个表的主键建立对应关系即可;
将一个表外键指向另一个表的主键 ---- ** alter table employee add foreign key (dno) references dep (did);**
在实际开发中 ---- 删除部门前 先将其下属员工进行手动删除 清除干净后 再 将部门进行删除;数据库的设计 永远在开发前;多表访问 ------------重点、
建表前 先分析 表之间的联系和类型 依据分析建表;多对多 需要建一个中间表 来完成联系 --- 外键指向 目标主键
==================================================
多表查询======================================内连接 表达的是 两个表的交集的部分 根据关联条件 去两个表中匹配 有对应关系的 记录 有则返回 没有则不返回;语法: select * from 表1 inner join 表2 on 关联条件;---不常用 ** select * from 表一 , 表二 where 关联条件 **
左连接 ---- leftleft outer jion ----- 以左边表格为基准进行查询 匹配到 则返回 匹配不到则返回 null
右连接 ----- rightright outer jion --- 以 右边表格为基准; 匹配到 则返回 匹配不到则返回 null
内外连接的区别:子查询**1. 带 in 的子查询: ---- 常用select * from where cid IN(select cno from sudent where birthday > '1991-01-01');
查询=============================
事务事务的特性: ----- ACID特性【】【】原子性 ---- 事务不可分割一致性 ---- 执行前后 数据完整保持一致隔离性 ----- 事务的执行 不能受到其他干扰 --- 讲的是并发持久性 ------ 事务结束 数据持久化到数据库;
安全性问题:脏读 ---- 数据未提交 交易已完成不可重复读 ---- 读取到了其他事务的 update 虚读 ------ 读取到了
隔离级别设置隔离级别 ------ set session transaction isolation level 隔离语句;查看隔离级别 ---- select @@x_isolation;read uncommittedread committedrepeatable readser
重置MySQL密码:停止MySQL服务 --- 在cmd下启动MySql服务【mysql --skip-grant-tables 】 ---- 重开cmd的命令行 (不需要密码 )[mysql -u root -p]--- 修改root密码【use mysql; -- update user set password = password('123') where user = 'root';】---- 结束进程 ---- 重启服务;
数据库的备份和还原数据库的还原1.** 第一种还原方式: 1 -- 在数据库服务器内部创建数据库【create database web_test1;】----2 在命令行窗口【mysql -u root -p web_test1 < C:/web_test1.sql 】**2.第二种还原方式 : 1 -- 在数据库服务器内部创建数据库 【create database web_test1;】 ---- 2 切换到该数据库使用 source命令还原 【 use web_test1; source C:/web_test1.sql 】
可视化数据库的操作在运行窗口进行 服务器的关闭/重启;net stop ---关闭net start---开启
SQL语句**DDL -- create drop alter... --定义语言DCL -- grant if... 控制语言DML -- insert update delete... 操纵语言DQL -- select ..... 查询语言**
语法:查看数据库 --- show databases; 查看数据库定义信息 : show create database 数据库名;
修改数据库 --- alter database 数据库名称 character set 字符集 collate 校对规则 ;
删除数据库 --- drop database 数据库名称;
切换数据库 --- use 数据库名称
查看当前正在使用数据库 ---- select database();
File ---- BLOB / TEXT约束:作用 - 保证数据的完整性
主键约束 --- primary key ---主键约束默认就是 唯一 非空
唯一约束 --- unique
非空约束 ---- not null
创建表 -- create table 表名称(字段名 字段类型(长度) 约束.....)
查看表 -- show tables; 查看表结构 --- desc 表名;
删除表 --- drop table 表名;
修改表 {**1.** 添加列: alter teble 表名 add 列名 类型(长度)约束;
修改列类型 长度和约束: alter table 表名 modify 列名 类型(长度)约束;
}【
删除列 : alter table 表名 drop 列名;
修改列名称 : alter table 表名 change 旧列名 新列名 类型(长度)约束
修改表名 : rename table 表名 to 新的表名;
修改表的字符集 : alter table 表名 character set 字符集; 】
benutils
重点表记录
添加表记录 【
向表中插入某些列 : insert into 表名 (列名1,列名2...)values(值1,值2...);
向表中插入所有列 : insert into 表名 values(值1,值2...); 】 *注意: 值类型 要和 数据库中表列类型一致 顺序要一致 最大长度要符合设置值 值类型是字符串 或 日期类型 使用 单引号引起来;** 添加中文记录 -- 将MySQL数据库服务器中的客户端部分的字符集 改为gbk; 然后重启 MySQL的服务器 ; services.msc
修改表的记录 : update 表名 set 列名= 值 , 列名 = 值 【where 条件】;注意事项 同上;
删除表的记录: delete 表名 【where 条件】;注意: 删除表的记录 指得是删除表中的一行记录; 删除如果没有条件 默认是删除表中的所有记录;
【两种做法: 1. delete from user ; 删除所有 属于DML语句 依次删除 可以作用在DML语句上的 2. truncate table user; 删除所有记录 属于DDL 将表删除 然后创建一个结构一样的表 事物不能控制DDL的 ;】
查看表的记录(重点重点重点)(distinct)--- 去除重复的值;基本查询 --- select * |列名 from 表名 【条件】(select * from 表名)
条件查询 --- where > < <= >= <> = ; like -- 模糊查询[_或%] in--范围查询, 条件关联 -- and or not ;
排序查询---- order by 字段名称 asc / desc -- 倒序 ;
分组查询 ---- group by 字段名称
聚合函数 ---- sum() count() min() max() avg();
where 的子句后面不能 跟着聚合函数 如果现在使用带有聚合函数的条件过滤 (分组条件过滤) 需要使用一个关键字 having;总结 ;S(select)...F(from)...W(where)...G(group by)...H(having)...O(order by);