关于数据库的问题?

关于数据库的问题?,第1张

下列软件不属于数据库管理系统的是(UNIX )。

UNIX

ORACLE

FOXPRO

SQL SERVER

DBS是采用了数据库技术的计算机系统。DBS是一个集合体,包含数据库、计算机硬件、软件和(数据库管理员) 。

系统分析员

程序员

数据库管理员

*** 作员

对某个具体的数据库应用来说,下列说法中正确的是(以上三个都不是唯一的) 。

E-R 图是唯一的

数据模型是唯一的

数据库文件是唯一的

以上三个都不是唯一的

以下不属于数据库系统组成的是(文件系统 )。

硬件系统

数据库管理系统及相关软件

数据库管理员(DBA)

文件系统

下列四项中说法不正确的是(数据库避免了一切数据的重复)。

数据库减少了数据冗余

数据库中的数据可以共享

数据库避免了一切数据的重复

数据库具有较高的数据独立性

与文件管理系统相比,(访问速度快)不是数据库系统的优点。

数据结构化 (数据结构化是数据库与文件系统的根本区别。)

访问速度快 (文件管理系统速度要比把文件内容放在数据库中快)

数据独立性

冗余度可控

下列四项中,不属于关系数据库特点的是(数据冗余小)。

数据冗余小

数据独立性高

数据共享性好

多用户访问

根据关系数据基于的数据模型-关系模型的特征判断下列正确的一项: ( 以二维表格结构来保存数据,在关系表中不允许有重复行存在) 。

只存在一对多的实体关系,以图形方式来表示

以二维表格结构来保存数据,在关系表中不允许有重复行存在

能体现一对多、多对多的关系,但不能体现一对一的关系

关系模型数据库是数据库发展的最初阶段

用树型结构表示实体间联系的模型是(层次模型)。

关系模型

网状模型

层次模型

以上三个都是

(层次模型:用树型结构表示实体间联系的数据模型)

关系数据库用(二维表)来表示实体之间的联系。

树结构

网结构

二维表

线性表

(关系模型:使用最广泛的一种数据库模型。方法:用若干个二维表来表示实体以及实体之间的联系。)

1. 在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。在这几个阶段中,数据独立性最高的是__A___阶段。

A.数据库系统B.文件系统C.人工管理D.数据项管理

2. 数据库系统与文件系统的主要区别是___B__。

A.数据库系统复杂,而文件系统简单

B.文件系统不能解决数据冗余和数据独立性问题,而数据库系统可以解诀

C.文件系统只能管理程序文件,而数据库系统能够管理各种类型的文件

D.文件系统管理的数据量较少,而数据库系统可以管理庞大的数据量

3. 数据库的概念模型独立于__A___。

A.具体的机器和DBMSB.E-R图C.信息世界D.现实世界

4. 数据库是在计算机系统中按照一定的数据模型组织、存储和应用的_B____。

A.文件的集合B.数据的集合C.命令的集合D.程序的集合

5. 支持数据库各种 *** 作的软件系统叫__D___。

A.命令系统B.数据库管理系统C数据库系统D. *** 作系统

6. 由计算机、 *** 作系统、DBMS、数据库、应用程序及用户等组成的一个整体叫做_____D。

A.文件系统B.数据库系统C.软件系统D.数据库管理系统

7. 数据库的基本特点是_B____。

A.(1)数据可以共享(或数据结构化)(2)数据独立性

(3)数据冗余大,易移植(4)统一管理和控制

B.(1)数据可以共享(或数据结构化)(2)数据独立性

(3)数据冗余小,易扩充(4)统一管理和控制

C.(1)数据可以共享(或数据结构化)(2)数据互换性

(3)数据冗余小,易扩充(4)统一管理和控制

D.(1)数据非结构化(2)数据独立性

(3)数据冗余小,易扩充(4)统一管理和择制

8. 数据库具有___B__、最小的冗余度和较高的程序与数据独立性。

A.程序结构化B.数据结构化C.程序标准化D.数据模块化

9. 在数据库中,下列说法_____是不正确的。

A.数据库避免了一切数据的重复

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()) elseupdate 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)

是可以重复插入的(联合唯一索引也一样)。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6687669.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-26
下一篇 2023-03-26

发表评论

登录后才能评论

评论列表(0条)

保存