本文目录一览:
- 1、mysql 中字段不允许有重复值 怎么设
- 2、MYSQL 字段内容不要同时相同
- 3、mysql查询数据 某个字段不重复
- 4、mysql如何去除两个字段数据相同的记录
- 5、求解: 数据库限制两字段不允许任何重复值.MSSQL或MYSQL或其他都行
mysql 中字段不允许有重复值 怎么设
可以用UNIQUE索引
语法如下:
ALTER TABLE `TableName`
ADD UNIQUE INDEX IndexName(`FieldName`);
MYSQL 字段内容不要同时相同
--创建两个列的唯一索引:
CREATE UNIQUE INDEX TEST_INDEX
ON TEST(date,biao);
mysql查询数据 某个字段不重复
//查询表中的数据 同时某个字段不重复 并且排序
首先做一下查询某个字段不重复(使用group by);
select * from 表名 where group by 不重复的字段名;
在做一下排序,我之前有发过一次排序,这次就做一个简单排序
order by 字段a=0 desc, 字段a desc,字段b desc (a字段等于0在最前面,a字段除了0之外的都为倒叙,b字段倒叙);
这样组合起来就好了
select * from 表名 where group by 不重复的字段名 order by 字段a=0 desc, 字段a desc,字段b desc;
mysql如何去除两个字段数据相同的记录
MySQL查询重复字段,及删除重复记录的方法
数据库中有个大表,需要查找其中的名字有重复的记录id,以便比较。如果仅仅是查找数据库中name不重复的字段,很容易:
SELECT min(`id`),`name` FROM `table` GROUP BY `name`;
但是这样并不能得到说有重复字段的id值。(只得到了最小的一个id值)查询哪些字段是重复的也容易:
SELECT `name`,count(`name`) as count FROM `table` GROUP BY `name` HAVING count(`name`) 1 ORDER BY count DESC;
但是要一次查询到重复字段的id值,就必须使用子查询了,于是使用下面的语句。
SELECT `id`,`name` FROM `table` WHERE `name` in (
SELECT `name`
FROM `table`
GROUP BY `name` HAVING count(`name`) 1);
但是这条语句在mysql中效率太差,感觉mysql并没有为子查询生成零时表。于是使用先建立零时表:
create table `tmptable` as (
SELECT `name`
FROM `table`
GROUP BY `name` HAVING count(`name`) 1);
然后使用多表连接查询:
SELECT a.`id`, a.`name` FROM `table` a, `tmptable` t WHERE a.`name` = t.`name`;
结果这次结果很快就出来了。
========================
查询及删除重复记录的方法
(一)
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
select * from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) 1)
2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
delete from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) 1)
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )1)
3、查找表中多余的重复记录(多个字段)
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) 1)
4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
delete from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)1)
5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)1)
求解: 数据库限制两字段不允许任何重复值.MSSQL或MYSQL或其他都行
你要求每插入一条记录,三个字段值都要和数据库现有的所有记录字段值不同,如果已经存在,就不能插入,用代码或者函数实现(例如:select count(*) from 表 where a not in('当前要插入 的a值','当前要插入 的b值','当前要插入 的c值') and b not in('当前要插入 的a值','当前要插入 的b值','当前要插入 的c值') and c not in ....),sql需要优化(考虑使用exist )
其实我再想是不是你理解错需求了?这个实现不管怎样,性能都不太好,实际项目中,一般不会这么设计的