自关联
- 自己与自己连接
外键(foreign key)
- show engines 查看数据库引擎
- myisam引擎 不支持外键
- default-storage-engine = innodb 设置默认引擎为innodb
(通过修改MySQL文件中的my文件可以使得不用每次都设置默认引擎,需要重启MySQL) - 外键目的:多表关联的时候保持数据的完整性一致性
- 外键所在的是从表,主键所在的是主表
- 创建方式
- 创建表时 constraint fk_cid foreign key(cid) references 主表名(主键);
- 修改表字段时添加主键 alter table tbname add fk_cid foreign key(cid) references 主表名(主键);
- 删除外键
- aftet table tbname drop foreign key fk_cid(外键约束名);
- cascade 级联删除
- no action 不做任何操作
- restrict 默认互相约束
MySQL与python交互
- 准备数据
- 把goods表分组后的数据插入到别的表
- 步骤
- 创建表goods_cates
- 给分类表添加分类名称 name
- 给商品表类别字段cate_name进行分组
- 查询出来的结果插入到分类表的分类名称中
(insert into good_cates (name) select cate_name from good_cates group by cate_name; ) - 将goods表里的cate_name 换成对应的id
- update good g inner join goods_cates c on g.
cate_name
=c.name
set g.cate_name
= c.id
;
(通过表连接+数据修改一起使用)
- python充当客户端的角色
- 连接步骤
- 1.导入库
- 2.conn=pymysql.connect(host=“127.0.0.1”,port=3306,user=“root”,passwd=“数据库密码”,db=“mysql”,charset=“utf8”)
(连接数据库) - 3.cs=conn.cursor()
(获取游标对象) - 4.游标对象执行sql语句cs.excute(sql语句) 有返回值且为受影响的行数
- cs.fecthone()
(读取一行) - cs.fetchmany(s)
(读取多行,s是size,默认为1,返回为元组) - cs.fatchall()
(读取全部,按当前游标位置开始读取)
- cs.fecthone()
- 5.cs.close()
(关闭游标 ) - 6.coon.close()
(关闭连接) - 7.关闭连接后 依然可以获取数据是因为有缓存 在游标对象里