原本的数据陈列
创建分表并更新分表数据
同步表更新思想来更新主表数据
修改表结构
原本的数据陈列
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
);
如图: