来源:MySQL专项练习选择题
1.有一个User用户表,要删除整张表(指完全删除表数据和结构),下面正确的MySQL语句是:
A.DELETE TABLE User;
B.DROP TABLE User;
C.TRUNCATE TABLE User;
D.DELETE FROM User ;
解析:选B。A选项错在DELETE后面应该是接FROM+表格名,而不是TABLE...;
B选项是完全删除表数据和表结构。
C和D选项仅可以删除表里的数据,但是无法删除表结构。
2.下列操作在视图上无法完成的是?
A.视图数据查询
B.更新视图数据
C.在视图中定义新的基本表
D.在视图中定义新视图
解析:选C。在视图中也可以定义新的视图,却无法创建表,因为视图是个虚表,视图在数据库中没有原本的物理存储,只是相当于临时表。
3.下面哪些字符最可能会导致sql注入?
A.'(单引号)
B./
C."(双引号)
D.$
解析:选A。单引号作为MySQL中的字段值封装方式,最容易被用作注入攻击。SQL注入的关键是单引号的闭合,双引号里不能再放双引号,但单引号里可以放双引号。
4.学生、书店和图书三个实体集之间的联系属于()
A.二元联系
B.多元联系
C.自反联系
D.一对一联系
解析:选B。参与联系的实体集个数大于2个时,为多元联系;A选项,二元联系指只有两个实体集参与的联系;C选项,自反联系描述了同一实体集内两部分实体之间的联系,是一种特殊的二元联系;D选项,是二元联系下的一种细分。
5.假设有一份绝密文件存于某台机器的secretData数据库中的某个表里面,现在出于数据安全的考虑,对于新创建的用户都只能拥有该机器的登录权限,而不能拥有数据库的其他权限,那么新创建tqhf用户满足这一要求的语句是()
A.grant usage on *.* with 'tqhf'@'%';
B.grant usage on secretData.* to 'tqhf'@'%';
C.grant usage on secretData.* with 'tqhf'@'%';
D.grant usage on *.* to 'tqhf'@'%';
解析:选D。数据库赋予登录权限的语句是grant usage on ... to。因此答案A、C都不正确。题目中只说secretData数据库中的某个表有绝密文件,但是对新创建的用户可拥有登录权限,而没有其他权限。并没有说只对secretData数据库,因此题目引入该数据库只是一个干扰信息,所以答案B错误。
6.在STUDENT表中按class_type统计数据行数分组情况后,筛选出数据行数为大于10行的组
A.SELECT class_type,COUNT(*) FROM STUDENT GROUP BY class_type HAVING COUNT(*)>10
B.SELECT class_type,COUNT(*) FROM STUDENT GROUP BY class_type WHERE COUNT(*)=10
C.SELECT class_type,COUNT(*) FROM STUDENT HAVING COUNT(*)>10 GROUP BY class_type
D.SELECT class_type,COUNT(*) FROM STUDENT WHERE COUNT(*) >10 GROUP BY class_type
解析:选A。由题意得,若要筛选出数据行数大于10的,第一时间肯定会想到WHERE子句,但是由于使用GROUP BY后COUNT应该写在HAVING后,因此选A,BCD均属于用法错误,故排除。WHERE不能接聚合函数(MAX、MIN、COUNT、SUM、AVG等)。HAVING后可以接聚合函数。WHERE用在GROUP BY前,先过滤后分组;HAVING用在GROUP BY之后,先分组后过滤。且使用HAVING一定要用到GRUOP BY,但用到GROUP BY不一定有HAVING。顺序:FROM->WHERE->GROUP BY->HAVING->SELECT->ORDER BY。
7.决定不再使用一张备份数据表waterinfo001表,需永久删除。选出符合要求的语句。
A.DELETE TABLE waterinfo001
B.DELETE FROM TABLE waterinfo001
C.DROP TABLE waterinfo001
D.DROP FROM TABLE waterinfo001
解析:选C。
1. drop是完全删除表,包括表结构
2. delete是删除表数据,保留表的结构,而且可以加where,只删除一行或者多行
3. truncate 只能删除表数据,会保留表结构,而且不能加where
8.在创建完一张数据表后,发现少创建了一列,此时需要修改表结构,应该用哪个语句进行操作?
A.MODIFY TABLE
B.INSERT TABLE
C.ALTER TABLE
D.UPDATE TABLE
解析:选C。由题意得,通过ALTER TABLE进行表结构修改;INSERT是插入语句;MODIFY只是ALTER功能下的一个功能模块,只能修改字段属性;UPDATE是更新语句故不符合题意
9.现在有一个学生表student,需要回收所有机器的tqhf用户对学生表student所在数据库user的update和insert权限,则下列语句中能够实现这一功能的语句是()
A.revoke update,insert on user.* to 'tqhf'@'%';
B.revoke update,insert on *.* to 'tqhf'@'%';
C.revoke update,insert on user.* from 'tqhf'@'%';
D.revoke update,insert on *.* from 'tqhf'@'%';
解析:选C。回收表的操作功能语句revoke ... on ... from。因此答案A、B不正确。由于题目要求是回收所有机器的tqhf用户对user表的update和insert权限,而答案D是回收所有数据库的update和insert权限,因此答案D不正确。@'%' 是表示任何主机的通配符,@:划分用户名和主机,%:代表"任何"。
10.在MySql中进行数据查询时,如果要对查询结果的列名重新命名,将sno列重新命名为学号,则下列语句正确的是( )
A.select sno as 学号 from T
B.select 学号= sno from T
C.select sno 学号 from T
D.select sno=学号 from T
解析:选AC。as可以做重命名,不过也可以省略as,空格隔开新名称即可。
11.快件信息表waybillinfo(id, waybillno, zonecode, optype, update_time)中存储了快件的所有操作信息,请找出在'中山公园'网点,异常派送(optype='异常派件')次数超过3次的快件(waybillno),正确的sql为()
A.select waybillno, count(*) from waybillinfo where zonecode='中山公园' and optype='异常派件'
and count(waybillno) >3
B.select waybillno, count(*) from waybillinfo where zonecode='中山公园' and optype='异常派件'
order by waybillno having count(*) > 3
C.select waybillno, count(*) from waybillinfo where zonecode='中山公园' and optype='异常派件'
having count(*) > 3
D.select waybillno from waybillinfo where zonecode='中山公园' and optype='异常派件'
group by waybillno having count(*) > 3
解析:选D。
1.having只用来在group by之后,对group by的结果进行筛选,不能单独用
2.分组结果统计需要用group by,每个快件整体作为一组3.where之后不能以函数作为条件
12.请取出 BORROW表中日期(RDATE字段)为当天的所有记录?(RDATE字段为datetime型,包含日期与时间)。SQL语句实现正确的是:()
A.select * from BORROW where datediff(dd,RDATE,getdate())=0
B.select * from BORROW where RDATE=getdate()
C.select * from BORROW where RDATE-getdate()=0
D.select * from BORROW where RDATE > getdate()
解析:选A。DATEDIFF(datepart, startdate, enddate) 函数返回两个日期之间的时间。
题目说RDDATE包括日期和时间,而只需要比较日期,因此需要用datediff检查日期(dd)差,为0 则为当天。
MySQL语法:DATEDIFF(date1,date2),返回两个日期之间的天数
结果:select * from BORROW where datediff(RDATE,curdate())=0;
第一个参数是起始时间,第二个参数是结束时间
13.子查询中,父查询中一般使用IN运算符的是()
A.单列单值嵌套查询
B.单列多值嵌套查询
C.多列多值嵌套查询
D.集合查询
解析:选B。A选项,结果集为一个值,一般使用=、<、>等运算符;C选项,结果类似于一张虚拟表,父查询中只能使用EXISTS或NOT EXISTS;D选项,通常是利用UNION、EXCEPT、INTERSECT集合运算符实现两个表之间的数据查询。IN子查询:内层查询语句仅返回一个数据列,这个数据列的值将供外层查询语句进行比较。子查询:单列多行。
14.已知员工表如下图所示,员工编号依次递增,现需改变相邻员工的编号,当员工总人数为奇数是,不需要改变最后一个员工的编号。下列SQL语句不正确的是()
表employee:
+-----+-----------+
| eno | ename |
+-----+-----------+
| 1 | 小李 |
| 2 | 小王 |
| 3 | 小刚 |
| 4 | 小虎 |
+----+------------+
A.SELECT
ROW_NUMBER() OVER(ORDER BY(eno+1-2*POWER(0,eno%2))) AS eno,ename
FROM employee
B.SELECT
ROW_NUMBER() OVER(ORDER BY(eno-1+2*MOD(0,eno%2))) AS eno,ename
FROM employee
C.SELECT
IF(eno%2=0,eno-1,
IF(eno=(SELECT COUNT(DISTINCT eno) FROM employee),eno,eno+1))
AS eno,ename
FROM employee
ORDER BY eno
D.SELECT
IF(eno%2=0,eno+1,
IF(eno=(SELECT COUNT(DISTINCT eno) FROM employee),eno,eno-1))
AS eno,ename
FROM employee
ORDER BY eno
解析:选C。D选项,运行后所得结果错误,若eno为偶数,应减1而非加1;若eno为奇数,且不为最后一个,应加1而非减1。改变相邻员工编号:| 1 | 小李 | | 2 | 小王 | | 3 | 小刚 | | 4 | 小虎 |更改后就是 | 2 | 小李 | | 1 | 小王 | | 4 | 小刚 | | 3 | 小虎 |。所以如果原来的eno是偶数,应该减1;(如果原来的eno是奇数,而且不是最后一个员工的话,应该加1;如果原来的eno是奇数而且是最后一个,eno不改变)。
15.表结构如下:
CREATE TABLE `score` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sno` int(11) NOT NULL,
`cno` tinyint(4) NOT NULL,
`score` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`id`)
) ;
以下查询语句结果一定相等的是()
A.SELECT sum(score) / count(*) FROM score WHERE cno = 2;
B.SELECT sum(score) / count(id) FROM score WHERE cno = 2;
C.SELECT sum(score) / count(sno) FROM score WHERE cno = 2;
D.SELECT sum(score) / count(score) FROM score WHERE cno = 2;
E.SELECT sum(score) / count(1) FROM score WHERE cno = 2;
F.SELECT avg(score) FROM score WHERE cno = 2;
解析:DF相等,ABCE相等。
1. count(*)包括所有列,相当于行数。统计结果时不会忽略某些列值为NULL的行。
2. count(1)用1代表代码行,忽略所有列值。统计结果时统计所有行,效果同count(*)。
3. count(列名)只包括列名对应一列,统计结果时会忽略列值为空的行。
本题中只有score列可能为空,其他列均设置了NOT NULL,因此只有count(score)和avg(score)会忽略score为空的列。
16.某打车公司要将驾驶里程(drivedistanced)超过5000里的司机信息转存到一张称为seniordrivers的表中,他们的详细情况被记录在表drivers中,正确的sql语句为()
A.insert into seniordrivers where drivedistanced>=5000 from drivers
B.insert into seniordrivers(drivedistanced) values from drivers where drivedistanced>=5000
C.insert into seniordrivers(drivedistanced) where values>=5000 from drivers
D.select * into seniordrivers from drivers where drivedistanced >=5000
解析:选D。
INSERT INTO语句用于向一张表中插入新的行。
INSERT-SELECT-FROM将表的列插入其他表的列
SELECT-INTO-FROM语句从一张表中选取数据插入到另一张表中。常用于创建表的备份复件或者用于对记录进行存档。
INSERT-SELECT-UNION语句合并数据进行多行插入
17.关于解决事务的脏读的最简单的方法,下列选项正确的是()
A.修改时加排他锁,直到事务提交后释放,读取时加共享锁
B.读取数据时加共享锁,写数据时加排他锁,都是事务提交才释放锁
C.修改时加共享锁,直到事务提交后释放,读取时加排他锁
D.读取数据时加排他锁,写数据时加共享锁,都是事务提交才释放锁
解析:选A。B选项,是对不可重复读或幻读的解决方法;CD选项,各过程添加了错误锁。
18.写一段SQL,已知衬衫表SHIRTABLE,请你实现通过窗口函数实现,根据不同的衬衫种类shirt_type,按照销售单价shirt_price从低到高的顺序创建排序表()
A.SELECT shirt_name, shirt_type, shirt_price,
RANK() OVER (PARTITION BY shirt _type ORDER BY shirt_price) AS ranking
FROM SHIRTABLE
B.SELECT shirt _name, shirt_type, shirt _price,
PARTITION BY shirt _type ORDER BY shirt _price AS ranking
FROM SHIRTABLE
C.SELECT shirt _name, shirt_type, shirt _price,
RANK (PARTITION BY shirt _type ORDER BY shirt _price) AS ranking
FROM SHIRTABLE
D.SELECT shirt _name, shirt_type, shirt _price,
RANK() OVER (PARTITION BY shirt_type) AS ranking
FROM SHIRTABLE
解析:选A。窗口函数over()函数中包括三个函数:分区partition by 列名、排序order by 列名、指定窗口范围rows between开始位置 and 结束位置(可用\可以不用)。rank() 按照值排序时产生一个自增编号,值相等时会重复。dense_rank() 按照值排序时产生一个自增编号,值相等时会重复,不会产生空位。row_number() 按照值排序时产生一个自增编号,不会重复
19.在SQL中语法规范中,having子句的使用下面描述正确的是:()
A.having子句即可包含聚合函数作用的字段也可包括普通的标量字段
B.使用having的同时不能使用where子句
C.having子句必须于group by 子句同时使用,不能单独使用
D.使用having子句的作用是限定分组条件
解析:选AC。Group by才用来分组,作用是限定分组条件。而Having则是对Group by中分出来的组进行条件筛选。
20.“确保事务可以多次从一个字段中读取相同的值,在此事务持续期间,禁止其他事务对此字段的更新”是对下列选项哪一个事务隔离级别的描述()
A.Read uncommitted
B.Read committed
C.Repeatable Read
D.Serializable
解析:选C。A选项,读未提交是事务隔离级别的最低级别;B选项,读已提交,可避免脏读情况发生;D选项,最严格的事务隔离级别,要求所有事物被串行执行,不能并发执行,可避免脏读、不可重复读,幻读情况的发生。
21.Mysql中表student_info(id,name,birth,sex),字段类型都是varchar,插入如下记录:('1014' , '张三' , '2002-01-06' , '男');SQL错误的是()
A.insert into student_info values('1014' , '张三' , '2002-01-06' , '男');
B.insert into table student_info values('1014' , '张三' , '2002-01-06' , '男');
C.insert into student_info(id,name,birth,sex) values('1014' , '张三' , '2002-01-06' , '男');
D.insert into student_info(id,name,sex,birth) values('1014' , '张三' , '男','2002-01-06' );
解析:选B。A插入全部字段时可以省略字段名;B插入时,如果`table`不是表名,不能带table关键字,会报错;如果table就是表名,需要用`table`才行。CD可以指定插入哪些字段,同时字段顺序与字段值顺序一致即可。所以B错误。
多条一次性插入:INSERT INTO table_name (column1, column2, ...) VALUES (value1_1, value1_2, ...), (value2_1, value2_2, ...), ...
22.修改表test_tbl字段i的缺省值为1000,可以使用SQL语句()
A.ALTER TABLE test_tbl ALTER i SET DEFAULT 1000;
B.ALTER TABLE test_tbl i SET DEFAULT 1000;
C.ALTER TABLE test_tbl MODIFY i SET DEFAULT 1000;
D.ALTER TABLE test_tbl CHANGE i SET DEFAULT 1000;
解析:选A。修改表:ALTER TABLE 表名 修改选项。修改选项如下:
{ ADD COLUMN <列名> <类型> -- 增加列
| CHANGE [COLUMN] <旧列名> <新列名> <新列类型> -- 修改列名或类型
| ALTER [COLUMN] <列名> { SET DEFAULT <默认值> | DROP DEFAULT } -- 修改/删除 列的默认值
| MODIFY [COLUMN] <列名> <类型> -- 修改列类型,修改字段类型
| DROP [COLUMN] <列名> -- 删除列
| RENAME TO <新表名> -- 修改表名
| CHARACTER SET <字符集名> -- 修改字符集
| COLLATE <校对规则名> } -- 修改校对规则(比较和排序时用到)
23.下列选项中关于数据库事务的特性描述正确的是()
A.事务允许继续分割
B.多个事务在执行事务前后对同一个数据读取的结果是不同的
C.一个事务对数据库中数据的改变是暂时的
D.并发访问数据库时,各并发事务之间数据库是独立的
解析:选D。此题考查数据库事务的原子性、一致性、隔离性和持久性。A选项,事务是最小的执行单位,不允许分割;B选项,执行事务前后,数据保持一致,对同一数据读取的结果相同;C选项,一个事务被提交后对数据库中数据的改变是持久的。D选项满足隔离性。
24.SQL中,下面对于数据定义语言DDL描述正确的是()
A.DDL关心的是数据库中的数据
B.联盟链
C.控制对数据库的访问
D.定义数据库的结构
解析:选D。(1)数据定义(SQL DDL)用于定义SQL模式、基本表、视图和索引的创建和撤消操作。(2)数据操纵(SQL DML)数据操纵分成数据查询和数据更新两类。数据更新又分成插入、删除、和修改三种操作。(3)数据控制(DCL)包括对基本表和视图的授权,完整性规则的描述,事务控制等内容。(4)嵌入式SQL的使用规定(TCL)涉及到SQL语句嵌入在宿主语言程序中使用的规则。
25.下列说法错误的是?
A.模糊查询中,*表示全部信息
B.可以用统计函数avg()计算平均值
C.在使用insert语句插入数据时,表达式的数据类型和表格中对应各列的数据类型不一定需要一致
D.视图是数据库对象,可以使用SELECT等语句
解析:选C。由题意得,在使用insert语句插入数据时,表达式的数据类型和表格中对应各列的数据类型必须一一对应,故C错误。
26.关于返回受上一个SQL语句影响的行数,下列SQL语句正确的是()
A.SELECT @@ERROR
B.SELECT @@IDENTITY
C.SELECT @@ROWCOUNT
D.SELECT @@MAX_CONNECTIONS
解析:A选项,是返回最后一个T_SQL错误的错误号;B选项,返回最后一个插入的标识值;D选项,显示可以创建的同时链接的最大数目。
27.下列函数语句得不到相同数值结果的选项是()
A.SELECT ROUND(2.35)
B.SELECT ROUND(1.96,1)
C.SELECT TRUNCATE(1.99,1)
D.SELECT TRUNCATE(2.83,0)
解析:选C。A选项,对参数四舍五入保留整数,结果为2;选项B对前面参数进行四舍五入操作并保留至小数点后1位,结果为2.0;C选项,对前面参数进行截取操作,截至小数点后一位,结果为1.9;D选项,对前面参数进行截取操作,截至小数点,结果为2;只有C选项的结果数值不为2。
ROUND()函数用于把数值字段舍入为指定的小数位数;
TRUNCATE()函数是按照小数位数进行数值截取,没有四舍五入。
28.运动会比赛信息的数据库,有如下三个表:
运动员ATHLETE(运动员编号 Ano,姓名Aname,性别Asex,所属系名 Adep), 项目 ITEM (项目编号Ino,名称Iname,比赛地点Ilocation), 成绩SCORE (运动员编号Ano,项目编号Ino,积分Score)。写出目前总积分最高的系名及其积分,SQL语句实现正确的是:()
A.SELECT Adep,SUM(Score)FROM ATHLETE,SCORE
WHERE ATHLETE.Ano=SCORE.Ano GROUP BY Adep HAVING SUM(Score)>=ANY
(SELECT SUM(Score) FROM ATHLETE,SCORE WHERE ATHLETE.Ano=SCORE.Ano GROUP BY Adep)
B.SELECT Adep,SUM(Score)FROM ATHLETE,SCORE WHERE ATHLETE.Ano=SCORE.Ano GROUP BY Adep HAVING SUM(Score)>=SOME
(SELECT SUM(Score) FROM ATHLETE,SCORE WHERE ATHLETE.Ano=SCORE.Ano GROUP BY Adep)
C.SELECT Adep,SUM(Score)FROM ATHLETE,SCORE WHERE ATHLETE.Ano=SCORE.Ano GROUP BY Adep HAVING SUM(Score) IN
(SELECT SUM(Score) FROM ATHLETE,SCORE WHERE ATHLETE.Ano=SCORE.Ano GROUP BY Adep)
D.SELECT Adep,SUM(Score)FROM ATHLETE,SCORE WHERE ATHLETE.Ano=SCORE.Ano GROUP BY Adep HAVING SUM(Score)>=ALL
(SELECT SUM(Score) FROM ATHLETE,SCORE WHERE ATHLETE.Ano=SCORE.Ano GROUP BY Adep)
解析:选D。
All():对所有数据都满足条件,整个条件才成立,>=all()等价于max,<=all()等价于min;
Any:只要有一条数据满足条件,整个条件成立,>any()等价于>min,<any()等价于<max;
some的作用和Any一样
29.关于MySQL常见索引的描述正确是()
A.创建UNIQUE索引,索引列的值必须唯一,不允许有空值
B.一个表中可以创建多个全文索引
C.为提高效率可建立组合索引,遵循“最左前缀”原则
D.使用非聚集索引需要将物理数据页中的数据按列重新排序
解析:选C。A选项,唯一索引不允许两行具有相同的索引值,包括NULL值,允许有空值;B选项,每个表只允许有一个全文索引;D选项,非聚集索引具有完全独立于数据行的结构,所以不需要将物理数据页中的数据按列重新排序。
30.下面哪一个是MySQL查询语句的正确执行顺序:
A.SELECT ---> FROM(including JOINs) ---> WHERE ---> GROUP BY ---> HAVING ---> DISTINCT ---> ORDER BY ---> LIMIT/OFFSET
B.SELECT ---> DISTINCT ---> FROM(including JOINs) ---> WHERE ---> GROUP BY ---> HAVING ---> ORDER BY ---> LIMIT/OFFSET
C.FROM(including JOINs) ---> WHERE ---> GROUP BY ---> HAVING ---> SELECT ---> DISTINCT ---> ORDER BY ---> LIMIT/OFFSET
D.FROM(including JOINs) ---> WHERE ---> GROUP BY ---> HAVING ---> DISTINCT ---> SELECT ---> ORDER BY ---> LIMIT/OFFSET
解析:选C。
31.有一张Person表包含如下信息:现要选取居住地址Address不以'C'或'O'开头的人员信息,下列MySQL查询语句正确的是:
A.SELECT * FROM Person Address REGEXP '^[^CO]';
B.SELECT * FROM Person Address LIKE '[!CO]%';
C.SELECT * FROM Person Address LIKE '[^CO]%';
D.SELECT * FROM Person Address REGEXP '^[CO]';
解析:选A。MySQL 中使用 REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。
[^charlist] 通配符表示 不在字符列中的任一单一字符。
MySQL中选取不以charlist中任一字符开头的语法为:
SELECT * FROM tab_name WHERE col_name REGEXP '^[charlist]';
同理,不以某、或另一某字符开头的语法为:
SELECT * FROM tab_name WHERE col_name REGEXP '^[^charlist]';
SELECT * FROM tab_name WHERE col_name NOT REGEXP '^[charlist]';
所以本题选不以'C'或'O'开头的人员信息,只有A选项是正确的;
B和C错在LIKE的误用;
D错在该语句表示的是选取以'C'或'O‘开头的人员信息,刚好和题意相反!
正则表达式 选项 说明 例子 示例 ^ 匹配文本的开始字符 '^b' 匹配以字母 b 开头 的字符串 bike [^] 匹配不在括号中的任何字符 '[^abc]’ 匹配任何不包 含 a、b 或 c 的字符串 egg
32. 声明游标语法中的INSENSITIVE参数,表示声明一个静态游标。当发生下列选项中的哪一项时,游标将会自动设定INSENSITIVE选项()
A.在SELECT语句中使用WHERE语句
B.使用INNER JOIN
C.所选取的任意表存在索引
D.将实数值当作选取的列
解析:选D。A选项,当SELECT语句中使用DISTINCT、GROUP BY、HAVING UNION语句时游标将会自动设定INSENSITIVE选项;B选项,应为使用OUTER JOIN;C选项,应为所选取的任意表没有索引。
33.批处理是指包含一条或多条T-SQL语句的语句组,下列选项中,关于批处理的规则描述正确的是()
A.定义一个check约束后,可以在同一个批处理中使用
B.修改一个表中的字段名后,不可以在同一个批处理中引用这个新字段
C.Create default,Create rule等语句同一个批处理中可以同时提交多个
D.把规则和默认值绑定到表字段或自定义字段上之后,可以在同一个批处理中使用
解析:选B。 A选项,不能定义一个check约束后,立即在同一个批处理中使用;C选项,Create default,Create rule,Create trigger,Create procedure,Create view等语句同一个批处理中只能提交一个;D选项,不能把规则和默认值绑定到表字段或自定义字段上之后,立即在同一个批处理中使用。
34.关于维护参照完整性约束的策略,下列选项描述不正确的是()
A.对于任何违反了参照完整性约束的数据更新,系统一概拒绝执行
B.当删除被参照表的一个元组造成了与参照表的不一致,则删除参照表中的所有造成不一致的元组
C.当修改被参照表的一个元组造成了与参照表的不一致,则修改被参照表中的所有造成不一致的元组
D.当删除或修改被参照表的一个元组造成了不一致,则将参照表中的所有造成和不一致的元组的对应属性设置为空值
解析:选C。参照完整性共分四种模式:不执行操作、级联、置空、设置默认值。
B选项对应级联操作,即主键列(被参照表)删除同时外键列(参照列)对应列也被删除;
C选项也对应级联操作,但应为修改外键列(参照表)中的数据;
D选项对应置空,即主键列数据删除或者修改时外键列对应数据被置为空值;设置默认值模式为主键列的修改和删除使对应外键列数据被置为设定的默认值