本文目錄一覽:
- 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 )
其實我再想是不是你理解錯需求了?這個實現不管怎樣,性能都不太好,實際項目中,一般不會這麼設計的
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/219591.html