多表间的关系
添加外键
alter table 表 add [CONSTRAINT] [外键名称] foreign key(字段) references 表(字段);
或者
alter table 表 add foreign key(列) references 表(列);
eg:给商品表添加外键
alter table t_product add foreign key(cno) references t_category(cid);
删除外键
ALTER TABLE 表 drop foreign key 外键名称;
外键的级联
在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作
ON UPDATE CASCADE – 级联更新,主键发生更新时,外键也会更新
ON DELETE CASCADE – 级联删除,主键发生删除时,外键也会删除
交叉查询
select a.列,a.列,b.列,b.列 from a,b ;
select a.,b. from a,b ;
–或者
select * from a,b;
- 交叉查询其实是一种错误.数据大部分是无用数据,叫笛卡尔积.
- 假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。可以扩展到多个集合的情况。
内连接查询
隐式内连接
隐式里面是没有inner关键字的
select [字段,字段,字段][*] from a,b where 连接条件 (a表里面的主键 = b表里面的外键)
显示内连接
显示里面是有inner关键字的
select [字段,字段,字段][*] from a [inner] join b on 连接条件 [ where 其它条件]
外连接
左外连接
以join左边的表为主表,展示主表的所有数据,根据条件查询连接右边表的数据,若满足条件则展示,若不满足则以null显示.
可以理解为:在内连接的基础上保证左边表的数据全部显示
select 字段 from a left [outer] join b on 条件
右外连接
以join右边的表为主表,展示右边表的所有数据,根据条件查询join左边表的数据,若满足则展示,若不满足则以null显示
可以理解为:在内连接的基础上保证右边表的数据全部显示
select 字段 from a right [outer] join b on 条件
子查询
SELECT 查询字段 FROM 表 WHERE 列 =(子查询);
子查询结果是单例多行,结果集类似于一个数组,父查询使用IN运算符
SELECT 查询字段 FROM 表 WHERE 列 in (子查询);
子查询的结果是多行多列的情况
SELECT 查询字段 FROM (子查询) 表别名 WHERE 条件;
事务
事务的作用
保证一组操作全部成功或者失败
手动开启一个事务
- 方式一: 手动开启事务的方式 【掌握】
start transaction;开启事务
commit;提交
rollback;回滚
- 方式二: 设置MYSQL中的自动提交的参数【了解】
查看MYSQL中事务是否自动提交
show variables like '%commit%';
设置自动提交的参数为OFF
set autocommit = 0;-- 0:OFF 1:ON
数据的备份和还原
备份格式
mysqldump -u用户名 -p密码 数据库 > 文件的路径
还原格式
SOURCE 导入文件的路径;
注意:还原的时候需要先登录MySQL,并选中对应的数据库