mysql与pyhton交互二:由一个整表拆为多个表

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40667484/article/details/87857226

原本的数据陈列
创建分表并更新分表数据
同步表更新思想来更新主表数据
修改表结构

原本的数据陈列

1.显示主表
2.显示主表的字段类型
3.显示主表的数据

1.显示主表

show tables;

在这里插入图片描述


2.显示主表的字段类型

desc goods;

如图
在这里插入图片描述


3.显示主表的数据

select * from goods;

如图
在这里插入图片描述


创建分表并更新分表数据

1.创建分表
2.将主表数据写入到goods_cates数据表

1.创建分表(并查询分表是否创建成功)

create table goods_cates(
id int unsigned primary key auto_increment not null,
name varchar(255) not null
);

如图:在这里插入图片描述


2.将主表数据写入到goods_cates数据表

insert into goods_cates(name) select cate_name from goods group by cate_name;

此处楼主遇到一个问题,纠结了很久。现把问题拿出来分享。

如图
在这里插入图片描述完全相同的代码为何作用一个能成功一个失败呢=


如图,如果你遇上了这个问题,注意代码是对的,这个时候就要看下你数据库的字符集了
在这里插入图片描述
如果遇到了这个报错,百思不得其解的话。
那么就去改一下数据库的字符集吧。
在这里插入图片描述注意了,我第一个goods的字符集编码是utf-8,而我goods_cates的字符集编码是Latin1,所以出现了错误。


解决方法:
下载一个
在这里插入图片描述
这个软件是数据库操作的软件,还有其他功能,可以做到数据库的微调,对于数据库的新手操作不熟悉的人来说非常实用。
在这里插入图片描述


在这里插入图片描述


同步表更新思想来更新主表数据

1.同步表更新思想来更新主表数据

1.同步表更新思想来更新主表数据

update goods as g inner join goods_cates as c on g.cate_name=c.name set g.cate_name=c.id;

如图
在这里插入图片描述


在这里插入图片描述


修改表结构

这里讲一下为啥要修改表结构哈。
原因就是分表要与主表一一对应的关系的话,一个字符串不能等于一个int型,所以要改过来产生对应。如果不改,更新数据时容易发生类型错乱。

1.修改表结构,将vate_name的varchar类型改为int类型
2.设置主表外键

1.修改表结构,将vate_name的varchar类型改为int类型

alter table goods change cate_name cate_id int unsigned not null;

如图:
在这里插入图片描述


2.设置主表外键

为什么要设置外键呢
我们来先插入一个数据

insert into goods values(
0,'黑白照相机',14,'华硕','3000.000',1,0
);

如图:
在这里插入图片描述


如图:
在这里插入图片描述
==所以外键就是用来保证主表输入的数据能够跟分表中一一对应,对数据的有效性进行验证。


现在来设置外键

alter table goods add foreign key(cate_id) references goods_cates(id);

–如果直接添加,会出现1452错误
原因是:已经添加了一个不存在的cate_id=14,因此先要删除那条数据再设置外键

在这里插入图片描述
现在来验证一下,添加一个不符合要求的数据,再次添加之前的数据

insert into goods values(
0,'黑白照相机',14,'华硕','3000.000',1,0
);

如图:
在这里插入图片描述


猜你喜欢

转载自blog.csdn.net/qq_40667484/article/details/87857226
今日推荐