1.创建表格
create table test(
name varhcar(32),
age Integer,
gender varchar(8)
);
2.插入数据
insert into test(name,age,gender) values("a",20,"m"),
("a",20,"m"),
("a",20,"m"),
("b",20,"m"),
("b",20,"m"),
("c",20,"m"),
("c",20,"m"),
("d",20,"m");
分析:表格中没有主键,数据没有唯一条件。
解决:
1.查询表格中的不重复数据,插入到一个同结构的临时表中;
create table tmp select distinct * from test;
2.删除原来表格或者清空原表格
drop table test;
delete from test;
3.临时表重命名为原表格或者临时表格数据写入原表格
alter table tmp rename to test;
insert into test select * from tmp;
drop table tmp;
4.存储过程
create procedure p1()
begin
create table tmp select distinct * from test;
drop table test;
alter table tmp rename to test;
end
call p1();
_rowid:mysql中存在rowid字段。
伪列:6字节长度的数学类型的字段。自增长。指向主键字段或唯一且非空的数学类型字段。如果表格中的字段不符合要求,_rowid伪列人就存在,但是不能查询。
oracle中有默认的rowid字段。mssql、db2。
rowid一定存在,伪列。不是自增字数,是磁盘的地址。
delect from test
where rowid not in
(select min(rowid) from test group by name,age,gender)