数据库避免了一切数据的重复(关于数据库的问题)
本篇文章给大家谈谈数据库避免了一切数据的重复,以及关于数据库的问题对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。
如何避免向数据库插入重复记录
MySql避免重复插入记录的几种方法
本文章来给大家提供三种在mysql中避免重复插入记录方法,主要是讲到了ignore,Replace,ON DUPLICATE KEY UPDATE三种方法,有需要的朋友可以参考一下
方案一:使用ignore关键字
如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用:
复制代码代码如下:
INSERT IGNORE INTO `table_name`(`email`, `phone`, `user_id`) VALUES('test9@163.com','99999','9999');
这样当有重复记录就会忽略,执行后返回数字0
还有个应用就是复制表,避免重复记录:
复制代码代码如下:
INSERT IGNORE INTO `table_1`(`name`) SELECT `name` FROM `table_2`;
方案二:使用Replace
语法格式:
复制代码代码如下:
REPLACE INTO `table_name`(`col_name`,...) VALUES(...);
REPLACE INTO `table_name`(`col_name`,...) SELECT...;
REPLACE INTO `table_name` SET `col_name`='value',
...算法说明:
REPLACE的运行与INSERT很相像,但是如果旧记录与新记录有相同的值,则在新记录被插入之前,旧记录被删除,即:
尝试把新行插入到表中
当因为对于主键或唯一关键字出现重复关键字错误而造成插入失败时:
从表中删除含有重复关键字值的冲突行
再次尝试把新行插入到表中
旧记录与新记录有相同的值的判断标准就是:
表有一个PRIMARY KEY或UNIQUE索引,否则,使用一个REPLACE语句没有意义。该语句会与INSERT相同,因为没有索引被用于确定是否新行复制了其它的行。
返回值:
REPLACE语句会返回一个数,来指示受影响的行的数目。该数是被删除和被插入的行数的和
受影响的行数可以容易地确定是否REPLACE只添加了一行,或者是否REPLACE也替换了其它行:检查该数是否为1(添加)或更大(替换)。
示例:
# eg:(phone字段为唯一索引)
复制代码代码如下:
REPLACE INTO `table_name`(`email`, `phone`, `user_id`) VALUES('test569','99999','123');
另外,在 SQL Server中可以这样处理:
复制代码代码如下:
if not exists(select phone from t where phone='1') insert into t(phone, update_time) values('1', getdate()) else update t set update_time= getdate() where phone='1'
更多信息请看:http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#replace
方案三:ON DUPLICATE KEY UPDATE
如上所写,你也可以在INSERT INTO…..后面加上 ON DUPLICATE KEY UPDATE方法来实现。如果您指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行UPDATE。
例如,如果列a被定义为UNIQUE,并且包含值1,则以下两个语句具有相同的效果:
复制代码代码如下:
INSERT INTO `table`(`a`, `b`, `c`) VALUES(1, 2, 3) ON DUPLICATE KEY UPDATE `c`=`c`+1;
UPDATE `table` SET `c`=`c`+1 WHERE `a`=1;
如果行作为新记录被插入,则受影响行的值为1;如果原有的记录被更新,则受影响行的值为2。
注释:如果列b也是唯一列,则INSERT与此UPDATE语句相当:
复制代码代码如下:
UPDATE `table` SET `c`=`c`+1 WHERE `a`=1 OR `b`=2 LIMIT 1;
如果a=1 OR b=2与多个行向匹配,则只有一个行被更新。通常,您应该尽量避免对带有多个唯一关键字的表使用ON DUPLICATE KEY子句。
您可以在UPDATE子句中使用VALUES(col_name)函数从INSERT…UPDATE语句的INSERT部分引用列值。换句话说,如果没有发生重复关键字冲突,则UPDATE子句中的VALUES(col_name)可以引用被插入的col_name的值。本函数特别适用于多行插入。VALUES()函数只在INSERT…UPDATE语句中有意义,其它时候会返回NULL。
复制代码代码如下:
INSERT INTO `table`(`a`, `b`, `c`) VALUES(1, 2, 3),(4, 5, 6) ON DUPLICATE KEY UPDATE `c`=VALUES(`a`)+VALUES(`b`);
本语句与以下两个语句作用相同:
复制代码代码如下:
INSERT INTO `table`(`a`, `b`, `c`) VALUES(1, 2, 3) ON DUPLICATE KEY UPDATE `c`=3;
INSERT INTO `table`(`a`, `b`, `c`) VALUES(4, 5, 6) ON DUPLICATE KEY UPDATE c=9;
注释:当您使用ON DUPLICATE KEY UPDATE时,DELAYED选项被忽略。
示例:
这个例子是我在实际项目中用到的:是将一个表的数据导入到另外一个表中,数据的重复性就得考虑(如下),唯一索引为:email:
复制代码代码如下:
INSERT INTO `table_name1`(`title`, `first_name`, `last_name`, `email`, `phone`, `user_id`, `role_id`, `status`, `campaign_id`)
SELECT'','','', `table_name2`.`email`, `table_name2`.`phone`, NULL, NULL,'pending', 29 FROM `table_name2`
WHERE `table_name2`.`status`= 1
ON DUPLICATE KEY UPDATE `table_name1`.`status`='pending'
再贴一个例子:
复制代码代码如下:
INSERT INTO `class` SELECT* FROM `class1` ON DUPLICATE KEY UPDATE `class`.`course`=`class1`.`course`
其它关键:DELAYED做为快速插入,并不是很关心失效性,提高插入性能。
IGNORE只关注主键对应记录是不存在,无则添加,有则忽略。
特别说明:在MYSQL中UNIQUE索引将会对null字段失效,也就是说(a字段上建立唯一索引):
复制代码代码如下:
INSERT INTO `test`(`a`) VALUES(NULL);
是可以重复插入的(联合唯一索引也一样)。
关于数据库的问题
下列软件不属于数据库管理系统的是(UNIX)。
UNIX
ORACLE
FOXPRO
SQL SERVER
DBS是采用了数据库技术的计算机系统。DBS是一个集合体,包含数据库、计算机硬件、软件和(数据库管理员)。
系统分析员
程序员
数据库管理员
操作员
对某个具体的数据库应用来说,下列说法中正确的是(以上三个都不是唯一的)。
E-R图是唯一的
数据模型是唯一的
数据库文件是唯一的
以上三个都不是唯一的
以下不属于数据库系统组成的是(文件系统)。
硬件系统
数据库管理系统及相关软件
数据库管理员(DBA)
文件系统
下列四项中说法不正确的是(数据库避免了一切数据的重复)。
数据库减少了数据冗余
数据库中的数据可以共享
数据库避免了一切数据的重复
数据库具有较高的数据独立性
与文件管理系统相比,(访问速度快)不是数据库系统的优点。
数据结构化(数据结构化是数据库与文件系统的根本区别。)
访问速度快(文件管理系统速度要比把文件内容放在数据库中快)
数据独立性
冗余度可控
下列四项中,不属于关系数据库特点的是(数据冗余小)。
数据冗余小
数据独立性高
数据共享性好
多用户访问
根据关系数据基于的数据模型-关系模型的特征判断下列正确的一项:(以二维表格结构来保存数据,在关系表中不允许有重复行存在)。
只存在一对多的实体关系,以图形方式来表示
以二维表格结构来保存数据,在关系表中不允许有重复行存在
能体现一对多、多对多的关系,但不能体现一对一的关系
关系模型数据库是数据库发展的最初阶段
用树型结构表示实体间联系的模型是(层次模型)。
关系模型
网状模型
层次模型
以上三个都是
(层次模型:用树型结构表示实体间联系的数据模型)
关系数据库用(二维表)来表示实体之间的联系。
树结构
网结构
二维表
线性表
(关系模型:使用最广泛的一种数据库模型。方法:用若干个二维表来表示实体以及实体之间的联系。)
数据库的基本特点是什么
数据库的基本特点是:数据结构化,数据之间具有联系,面向整个系统;数据的共享性高,冗余度低,易扩充;数据独立性高。
数据实现集中控制,文件管理方式中,数据处于一种分散的状态,不同的用户或同一用户在不同处理中其文件之间毫无关系。利用数据库可对数据进行集中控制和管理,并通过数据模型表示各种数据的组织以及数据间的联系。
扩展资料:
数据库管理系统是数据库系统的核心组成部分,主要完成对数据库的操纵与管理功能,实现数据库对象的创建、数据库存储数据的查询、添加、修改与删除操作和数据库的用户管理、权限管理等。它的安全直接关系到整个数据库系统的安全,其防护手段主要有:
1、使用正版数据库管理系统并及时安装相关补丁。
2、做好用户账户管理,禁用默认超级管理员账户或者为超级管理员账户设置复杂密码;为应用程序分别分配专用账户进行访问;设置用户登录时间及登录失败次数限制,防止暴力破解用户密码。
3、分配用户访问权限时,坚持最小权限分配原则,并限制用户只能访问特定数据库,不能同时访问其他数据库。
4、修改数据库默认访问端口,使用防火墙屏蔽掉对外开放的其他端口,禁止一切外部的端口探测行为。
5、对数据库内存储的重要数据、敏感数据进行加密存储,防止数据库备份或数据文件被盗而造成数据泄露。
6、设置好数据库的备份策略,保证数据库被破坏后能迅速恢复。
7、对数据库内的系统存储过程进行合理管理,禁用掉不必要的存储过程,防止利用存储过程进行数据库探测与攻击。
8、启用数据库审核功能,对数据库进行全面的事件跟踪和日志记录。
关于数据库避免了一切数据的重复的内容到此结束,希望对大家有所帮助。