`
85977328
  • 浏览: 1898924 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MySQL基础----数据重复判断

阅读更多
    本人工作中的实际应用.在采集数据的时候,要求数据采集以后,不能重复.同时也要求有多个实例同时运转,保证数据采集的连续性.因此总结了一下,做成了如下的小试验.核心代码如下:
表结构:只有3个字段
id,name,password
CREATE TABLE `tt` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


sql语句
1)推荐
insert ignore into tt(name,password) values('phl','123')

2)不推荐,因为insert的时候select,会锁定select的表
insert into tt(name,password) select 'phl','123' from dual where not exists(select * from tt where name='phl' and password='123')


这个SQL语句的含义是,如果插入的数据 name='phl',password='123'不存在,则执行插入;

补充:
方法1里面,之所以没有过滤。是因为没有建立name与password的联合主建;
3
0
分享到:
评论
14 楼 gonglil 2011-01-20  
但是我执行第一个方法就是insert ignore into tt(name,password) values('phl','123') 时候并未过滤啊,第二个方法是正常的。
13 楼 85977328 2011-01-06  
如果你是在日志方面应用,那可以针对时间字段,进行分区,这样他判断的时候,性能不会降低
12 楼 finallygo 2011-01-06  
85977328 写道
对的。否则没办法根据部分字段进行重复判断

但是这样是不是对效率产生比较大的影响了?因为我现在需要录入大量的日志信息,如果这样将索引,是不是在数据量大之后,插入的速度会受到很大的影响?因为我觉得既然是自己制定了惟一约束,那在插入每条记录的时候都需要检查一下这个记录是否在数据库中存在的吧
11 楼 85977328 2011-01-05  
对的。否则没办法根据部分字段进行重复判断
10 楼 finallygo 2011-01-05  
85977328 写道
finallygo 写道
如果我的语句是insert ignore into tt(name,password,update_dt) values('phl','123',now())
这样的话,它能过滤重复吗?

可以,是根据你的unique索引来决定是否过滤的

如果这样的话
你的建表语句中还需要添加
ALTER TABLE `tt`
ADD UNIQUE INDEX (`name`, `password`);才对吧
9 楼 85977328 2010-12-31  
finallygo 写道
如果我的语句是insert ignore into tt(name,password,update_dt) values('phl','123',now())
这样的话,它能过滤重复吗?

可以,是根据你的unique索引来决定是否过滤的
8 楼 finallygo 2010-12-31  
如果我的语句是insert ignore into tt(name,password,update_dt) values('phl','123',now())
这样的话,它能过滤重复吗?
7 楼 85977328 2010-12-28  
shangtang004 写道
select 'phl','123' from dual

mysql 中有dual吗,
这不是oracle的吗

mysql里当然有dual了
6 楼 85977328 2010-12-28  
show variables like '%char%';
horseroad 写道
再请教个问题,我下载了这两天刚发布的5.5安装了之后,用 show variables like '%char%';查看字符集,结果发现都是拉丁,我本来设置的是utf8,不明白是怎么一回事。
具体结果:
| character_set_client     | latin1
     |
| character_set_connection | latin1
     |
| character_set_database   | latin1
     |
| character_set_filesystem | binary
     |
| character_set_results    | latin1
     |
| character_set_server     | latin1
     |
| character_set_system     | utf8

你用实例设置向导,选择字符编码的时候,选UTF8就可以了
或者在my.ini里面,把上述的相关内容,设置成utf8也可以.
5 楼 horseroad 2010-12-27  
再请教个问题,我下载了这两天刚发布的5.5安装了之后,用 show variables like '%char%';查看字符集,结果发现都是拉丁,我本来设置的是utf8,不明白是怎么一回事。
具体结果:
| character_set_client     | latin1
     |
| character_set_connection | latin1
     |
| character_set_database   | latin1
     |
| character_set_filesystem | binary
     |
| character_set_results    | latin1
     |
| character_set_server     | latin1
     |
| character_set_system     | utf8
4 楼 85977328 2010-12-27  
horseroad 写道
insert ignore into tt(name,password) values('phl','123') 
这句没看太懂,ignore是什么用法?mysql专有的?
mysql菜鸟不好意思

对,MYSQL专有的.效率非常高
3 楼 horseroad 2010-12-27  
insert ignore into tt(name,password) values('phl','123') 
这句没看太懂,ignore是什么用法?mysql专有的?
mysql菜鸟不好意思
2 楼 85977328 2010-08-12  
shangtang004 写道
select 'phl','123' from dual

mysql 中有dual吗,
这不是oracle的吗

有的,这个代码就是我项目中使用的
1 楼 shangtang004 2010-08-12  
select 'phl','123' from dual

mysql 中有dual吗,
这不是oracle的吗

相关推荐

    MySQL 基础 - 流程函数.md

    ### MySQL基础 - 流程函数 #### 概述 MySQL是一种广泛使用的开源关系型数据库管理系统,在数据管理和查询方面提供了强大的支持。为了实现更复杂的逻辑控制和条件判断,MySQL内置了一系列流程控制函数,如IF函数、...

    mysql-connector-java-5.1.39.jar资源下载

    MySQL Connector/J 5.1.39 是 MySQL 官方提供的用于 Java 应用程序连接 MySQL 数据库的驱动程序。这个资源是 MySQL 社区版本的一部分,它允许开发者使用 Java 编程语言来访问和操作 MySQL 数据库。下面将详细介绍这...

    PHP and MySQL 24-Hour Trainer

    重复执行程序步骤(LESSON8)** - **知识点概述:** 介绍如何在PHP中实现循环结构。 - **详细知识点:** - **for循环:** 固定次数循环的实现。 - **while循环:** 不确定次数循环的实现。 **9. 学习作用域...

    MySQL中如何处理重复数据(Duplicate)?

    在使用上述方法处理重复数据时,需要在表中定义相应的唯一键(主键或唯一索引),以便 MySQL 能够判断冲突并执行相应的操作。否则,MySQL 将无法判断冲突,导致数据插入失败。 四、应用场景 处理重复数据的方法在...

    mysql 教程-创建数据库.pdf

    MySQL 是一个关系型数据库管理系统,可以用来存储和管理大量数据。在使用 MySQL 之前,需要首先创建一个数据库。本节将详细介绍如何创建 MySQL 数据库。 为什么需要创建数据库 在使用 MySQL 之前,需要首先创建一...

    mysql--sql

    根据给定文件的信息,我们可以总结出以下MySQL SQL知识点: ### 数据库结构 #### 教学数据库Education - **学生关系S** - SNO (int auto_increment): 学生编号 - SNAME: 学生姓名 - AGE: 年龄 - SEX: 性别 - ...

    Mysql查询重复语句

    通过这种方式,我们可以直观地看到所有匹配的数据行,进而判断是否有重复项存在。 #### 查看重复数据的数量 如果想要知道特定字段下重复记录的具体数量,可以使用以下 SQL 语句: ```sql SELECT Hname, COUNT(*) ...

    mysql数据库基础知识点总结

    ### MySQL数据库基础知识点总结 #### 数据库概念理解 数据库是一种按照特定格式存储数据的仓库,其目的是为了方便数据的存取操作。在IT领域中,数据库是存储与管理大量数据的关键工具之一,它能有效组织数据,使得...

    解析mysql不重复字段值求和

    在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是...

    MYSQL面试题-20230927

    在MySQL中,InnoDB通过MVCC实现了事务的隔离级别,如可重复读和读已提交。 #### 6. Redo Log 和 Undo Log - **Redo Log**:重做日志,用于记录数据修改前后的物理位置信息,确保即使系统崩溃也能恢复数据的一致性...

    MySQL基础操作语句

    ### MySQL基础操作语句知识点详解 #### 一、查询与筛选 **1. 按条件筛选记录** - **语法**: `SELECT name FROM pet WHERE birth < '1980-08-09' AND (csd = 'sx' OR csd = 'bj');` - **解释**: 此SQL语句用于从`...

    mysql 存储过程判断重复的不插入数据

    在MySQL数据库中,存储...它适用于需要检查数据唯一性的场景,例如避免重复的书籍记录。在实际应用中,可以根据具体需求调整存储过程,比如添加更多的条件判断,或者在书名已存在时执行其他操作,如更新书籍的价格等。

    MySql-Learning

    在 MySQL 中,可以通过创建不同的数据库来区分不同业务或项目的数据。 2. **表**: 表是数据库中的基本单元,它由行和列组成。每个表都有自己的结构定义,包括字段名称、数据类型等。 3. **数据 SQL 语句**: SQL ...

    mysql的基础教程

    MySQL提供了不同类型的索引,如主键索引(唯一且非空)、唯一索引(不允许重复值)和普通索引(无限制)。`ALTER TABLE`语句可以用来为现有列添加索引。 5. **视图**:视图是虚拟的表,基于一个或多个表的查询结果...

    浅析MYSQL REPEATABLE-READ隔离级别

    MySQL中的REPEATABLE-READ隔离级别是事务处理中的一种策略,它的主要目的是为了防止脏读和不可重复读问题,但可能会引入幻读现象。在这个隔离级别下,事务内的多次读取操作将始终返回同一份数据,即使其他事务在这...

    mysql基础的面试题

    在面试中,MySQL的基础知识,特别是优化技巧,通常是考察候选人技术能力的重要部分。以下是一些关于MySQL优化和事务处理的关键知识点: 1. **索引优化**: - 索引能够显著提升查询速度,特别是在WHERE子句和ORDER ...

    MySQL数据库考试试题及答案-34页

    在 MySQL 中,聚合函数用于对数据进行汇总和计算。 SUM 函数用于计算数据的总和,MAX 函数用于取得最大值,COUNT 函数用于计算数据的行数,AVG 函数用于计算数据的平均值。 2.游标声明 在 MySQL 中,DECLARE ...

Global site tag (gtag.js) - Google Analytics