假设有学生表存储数万行记录,结构如下
student(sid char(10) 主键,sname,sex,dob )
执行下面系列查询将原有记录打乱插入回学生表:
-- 创建一个结构与学生表结构相同的中间过渡表
create table s1 (sid char(10) primary key,
sname varchar(50),sex char(1),dob date)
-- 将学生表中的数据插入到s1
insert into s1 select * from student
-- 清空学生表
truncate table student
-- 将中间过渡表s1中的记录打乱插入回学生表
insert into student select * from s1 order by rand()
-- 删除过渡表
drop table s1
在前面在加一列,然后把union all 的结果放到子查询中,用来排序比如:
select * from
(select 0+a ord,t.* from where a is not null
union all
select 1+b ord,t.* from where a is not null
) ta
order by ord
解决方案:首先我们用MySQL自带的可视化管理工具MySQL WorkBench打开数据库及表格,出现此问题的主要原因是主键已经有了名为“XXX”的那项,实际上我写的代码并没有重复也会d出此报错,下面我们看一下我自己的解决方案。
双击红框中选项,填好相应配置,进入后点击如图所示先创建数据库(此 *** 作必须在MySQL已经启动情况下)左下角SCHEMAS底下就是你的数据库名字,先双击拉出TABLE,在TABLE上右键创建新表。
解决方案:将主键设置为自动增长。可以在数据库手动将相关表设置ID为自增长
手动将表设置为自增长有弊端,建议在annotation里边的POJO类使用注解方式设置自增长。mysql的数据库如图所示设置。
保存执行即可解决问题
查看数据库,果然自增了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)