内容正文:
举一反三考点练
《数据库原理与应用技术-MySQL》数据表操作-课后自测
知识点一 创建数据库
外键约束中,子表的外键列可以引用主表中不是主键的列。( )
AUTO_INCREMENT列的起始值默认是 1,且每次插入时自动加 1。( )
创建表时,若未指定存储引擎,MySQL 5.7 会默认使用MyISAM。( )
NOT NULL约束和DEFAULT约束可以同时用于同一列。( )
创建teacher表时,若tid列为主键且自增,其列定义应为:tid INT ______ ______;
为student表的email列添加 “值唯一” 约束,列定义为:email VARCHAR(50) ______;
MySQL 中,存储 “2023-10-01 15:30:00” 这类日期时间数据,适合使用的数据类型是______。
创建表时,指定表的存储引擎为InnoDB的表选项是:______ InnoDB
在company数据库中创建employee表,结构如下:
列名
数据类型
约束条件
eid
整数
主键,自增
ename
可变长度字符串(20)
非空
dept
固定长度字符串(10)
默认值为 “研发部”
hire_date
日期时间
非空,默认值为当前日期时间
要求:表不存在时创建,字符集为utf8。
创建order表,结构如下:
列名
数据类型
约束条件
oid
整数
主键
pid
整数
外键,关联product表的pid列
quantity
整数
非空,默认值为 1
要求:表不存在时创建。
以下语句创建book表,isbn为唯一标识(主键),pub_date为出版日期(默认当前日期),请补全:
CREATE TABLE IF NOT EXISTS book (
isbn CHAR(13) ______,
bname VARCHAR(50) NOT NULL,
pub_date DATE ______ ______
);
以下语句创建student_course关联表,sid和cid为联合主键,且分别关联student表和course表的主键,请补全:
CREATE TABLE student_course (
sid INT,
cid INT,
score INT,
______ ______ (sid, cid),
______ ______ (sid) ______ student(id),
______ ______ (cid) ______ course(id)
);
知识点二 数据类型
FLOAT和DOUBLE的区别是DOUBLE的精度更高,存储范围更大。( )
VARCHAR(5)可以存储 5 个汉字。( )
BIGINT类型可以存储所有 18 位身份证号。( )
DATE类型可以存储 “2023-13-01”这样的无效日期。( )
同一表中,CHAR类型列的查询速度通常比VARCHAR类型快。( )
存储 “员工入职时间”(需包含年月日时分秒,且不受时区影响),适合的数据类型是______。
TINYINT UNSIGNED的取值范围是______。
创建user表,包含以下列,需指定合适的数据类型:
列名
说明
数据类型要求
uid
用户 ID(1~10000)
最小整数类型
username
用户名(最长 15 个字符)
可变长度
reg_time
注册时间(含时分秒,默认当前时间)
受时区影响
balance
账户余额(精确到分,最大 99999.99)
精确存储
创建event表,包含以下列,需指定合适的数据类型:
列名
说明
数据类型要求
eid
活动 ID(1~1000000)
合适整数类型
title
活动标题(固定 20 个字符)
固定长度
start_date
开始日期(仅年月日)
日期类型
duration
持续时间(小时,可负数,如 - 2 表示提前 2 小时)
小范围整数
以下语句创建order表,amount存储订单总金额(精确到分,最大 999999.99),pay_time存储支付时间(含时分秒,不受时区影响),请补全数据类型:
CREATE TABLE `order` (
oid INT PRIMARY KEY,
amount ______, -- 订单金额(999999.99)
pay_time ______ -- 支付时间(2023-11-01 10:30:00)
);
以下语句创建message表,content存储消息内容(最长 1000 字符),send_time存储发送时间(默认当前时间,受时区影响),请补全数据类型:
CREATE TABLE message (
mid INT PRIMARY KEY,
content ______, -- 消息内容(1000字符)
send_time ______ DEFAULT CURRENT_TIMESTAMP -- 发送时间
);
原创精品资源学科网独家享有版权,侵权必究!2
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
举一反三考点练
《数据库原理与应用技术-MySQL》数据表操作-课后自测
知识点一 创建数据库
外键约束中,子表的外键列可以引用主表中不是主键的列。( )
【答案】×
【解析】外键必须引用主表的主键或唯一键,否则无法创建外键约束。
AUTO_INCREMENT列的起始值默认是 1,且每次插入时自动加 1。( )
【答案】√
【解析】AUTO_INCREMENT默认从 1 开始,插入新记录时若未指定值,自动在上一条最大记录值基础上加 1。
创建表时,若未指定存储引擎,MySQL 5.7 会默认使用MyISAM。( )
【答案】×
【解析】MySQL 5.7 的默认存储引擎是InnoDB,MyISAM是早期版本的默认引擎。
NOT NULL约束和DEFAULT约束可以同时用于同一列。( )
【答案】√
【解析】NOT NULL确保列有值,DEFAULT在未手动赋值时提供默认值,两者可同时使用。
创建teacher表时,若tid列为主键且自增,其列定义应为:tid INT ______ ______;
【答案】PRIMARY KEY AUTO_INCREMENT
为student表的email列添加 “值唯一” 约束,列定义为:email VARCHAR(50) ______;
【答案】UNIQUE
MySQL 中,存储 “2023-10-01 15:30:00” 这类日期时间数据,适合使用的数据类型是______。
【答案】DATETIME
创建表时,指定表的存储引擎为InnoDB的表选项是:______ InnoDB
【答案】ENGINE
在company数据库中创建employee表,结构如下:
列名
数据类型
约束条件
eid
整数
主键,自增
ename
可变长度字符串(20)
非空
dept
固定长度字符串(10)
默认值为 “研发部”
hire_date
日期时间
非空,默认值为当前日期时间
要求:表不存在时创建,字符集为utf8。
【答案】
USE company;
CREATE TABLE IF NOT EXISTS employee (
eid INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(20) NOT NULL,
dept CHAR(10) DEFAULT '研发部',
hire_date DATETIME NOT NULL DEFAULT NOW()
) CHARACTER SET utf8;
创建order表,结构如下:
列名
数据类型
约束条件
oid
整数
主键
pid
整数
外键,关联product表的pid列
quantity
整数
非空,默认值为 1
要求:表不存在时创建。
【答案】
CREATE TABLE IF NOT EXISTS `order` (
oid INT PRIMARY KEY,
pid INT,
quantity INT NOT NULL DEFAULT 1,
FOREIGN KEY (pid) REFERENCES product(pid)
);
以下语句创建book表,isbn为唯一标识(主键),pub_date为出版日期(默认当前日期),请补全:
CREATE TABLE IF NOT EXISTS book (
isbn CHAR(13) ______,
bname VARCHAR(50) NOT NULL,
pub_date DATE ______ ______
);
【答案】PRIMARY KEY;DEFAULT CURRENT_DATE()
以下语句创建student_course关联表,sid和cid为联合主键,且分别关联student表和course表的主键,请补全:
CREATE TABLE student_course (
sid INT,
cid INT,
score INT,
______ ______ (sid, cid),
______ ______ (sid) ______ student(id),
______ ______ (cid) ______ course(id)
);
【答案】PRIMARY KEY;FOREIGN KEY;REFERENCES;FOREIGN KEY;REFERENCES
知识点二 数据类型
FLOAT和DOUBLE的区别是DOUBLE的精度更高,存储范围更大。( )
【答案】√
【解析】FLOAT是 4 字节单精度,DOUBLE是 8 字节双精度,后者精度和范围均优于前者,但均为近似值。
VARCHAR(5)可以存储 5 个汉字。( )
【答案】√
【解析】VARCHAR(N)中的N表示字符数,utf8编码下 1 个汉字占 3 字节,但N=5允许存储 5 个字符。
BIGINT类型可以存储所有 18 位身份证号。( )
【答案】×
【解析】身份证号可能含字母 “X”,故需用字符串类型存储。
DATE类型可以存储 “2023-13-01”这样的无效日期。( )
【答案】×
【解析】MySQL 对日期类型有合法性校验,无效日期会被拒绝存储。
同一表中,CHAR类型列的查询速度通常比VARCHAR类型快。( )
【答案】√
【解析】CHAR是固定长度,存储时无需记录长度信息,查询时定位更快;VARCHAR需额外存储长度,查询效率略低。
存储 “员工入职时间”(需包含年月日时分秒,且不受时区影响),适合的数据类型是______。
【答案】DATETIME
TINYINT UNSIGNED的取值范围是______。
【答案】0~255
创建user表,包含以下列,需指定合适的数据类型:
列名
说明
数据类型要求
uid
用户 ID(1~10000)
最小整数类型
username
用户名(最长 15 个字符)
可变长度
reg_time
注册时间(含时分秒,默认当前时间)
受时区影响
balance
账户余额(精确到分,最大 99999.99)
精确存储
【答案】
CREATE TABLE user (
uid SMALLINT, -- SMALLINT范围-32768~32767,足够覆盖1~10000
username VARCHAR(15), -- 可变长度,适合用户名
reg_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 受时区影响,默认当前时间
balance DECIMAL(7,2) -- 总7位(5位整数+2位小数),覆盖99999.99
);
创建event表,包含以下列,需指定合适的数据类型:
列名
说明
数据类型要求
eid
活动 ID(1~1000000)
合适整数类型
title
活动标题(固定 20 个字符)
固定长度
start_date
开始日期(仅年月日)
日期类型
duration
持续时间(小时,可负数,如 - 2 表示提前 2 小时)
小范围整数
【答案】
CREATE TABLE event (
eid INT, -- INT范围足够覆盖1~1000000
title CHAR(20), -- 固定20字符,用CHAR
start_date DATE, -- 仅年月日,用DATE
duration TINYINT -- 小范围整数(含负数),TINYINT足够
);
以下语句创建order表,amount存储订单总金额(精确到分,最大 999999.99),pay_time存储支付时间(含时分秒,不受时区影响),请补全数据类型:
CREATE TABLE `order` (
oid INT PRIMARY KEY,
amount ______, -- 订单金额(999999.99)
pay_time ______ -- 支付时间(2023-11-01 10:30:00)
);
【答案】DECIMAL(8,2);DATETIME
【解析】amount总长度 8 位(6 位整数 + 2 位小数),用DECIMAL(8,2);pay_time需日期时间且不受时区影响,用DATETIME。
以下语句创建message表,content存储消息内容(最长 1000 字符),send_time存储发送时间(默认当前时间,受时区影响),请补全数据类型:
CREATE TABLE message (
mid INT PRIMARY KEY,
content ______, -- 消息内容(1000字符)
send_time ______ DEFAULT CURRENT_TIMESTAMP -- 发送时间
);
【答案】VARCHAR(1000);TIMESTAMP
【解析】content长度 1000 字符且可变,用VARCHAR(1000);send_time受时区影响且默认当前时间,用TIMESTAMP。
原创精品资源学科网独家享有版权,侵权必究!2
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$