内容正文:
举一反三考点练
《数据库原理与应用技术-MySQL》数据表操作-讲义
1.掌握MySQL常用的数据类型;
2.掌握MySQL的常用数据类型:数字类型、字符串类型、日期和时间类型等;
3.掌握建立数据表的命令:CREATE TABLE;
知识点一 建立数据表
数据表是存储数据的基本单位,CREATE TABLE命令用于在指定数据库中创建新表。
1. 基本语法
CREATE TABLE [IF NOT EXISTS] 表名 (
列名1 数据类型 [约束条件],
列名2 数据类型 [约束条件],
...
[表级约束条件]
) [表选项];
2. 关键参数说明
IF NOT EXISTS:可选参数,若表已存在则不报错。
表名与列名:需遵循命名规则,列名需唯一且有明确含义。
数据类型:指定列存储的数据类型,常用类型如下:
数值型:INT、FLOAT、DOUBLE、DECIMAL(M,D)。
字符串型:CHAR(N)、VARCHAR(N)、TEXT。
日期时间型:DATE、TIME、DATETIME。
约束条件:限制列的取值,确保数据完整性,分为列级约束和表级约束:
列级约束(针对单个列):
NOT NULL:列值不可为NULL,必须赋值。
PRIMARY KEY:主键(唯一标识记录,值唯一且非NULL,一个表只能有一个主键)。
UNIQUE:列值唯一(可含NULL,但NULL只允许出现一次)。
DEFAULT:默认值(未赋值时自动使用默认值)。
AUTO_INCREMENT:自增(仅用于整数型主键,插入时自动 + 1,需配合PRIMARY KEY使用)。
表级约束(针对多个列,通常用于多列联合主键或外键):
PRIMARY KEY (列名1, 列名2):多列联合主键(组合值唯一)。
FOREIGN KEY (列名) REFERENCES 主表名(主表列名):外键(关联另一表的主键,确保数据一致性)。
表选项:指定表的全局设置,常用:
ENGINE:存储引擎(MySQL 5.7 默认InnoDB,支持事务和外键;MyISAM不支持事务)。
CHARACTER SET:表的默认字符集。
3. 注意事项
创建表前需先使用USE 数据库名;。
主键与AUTO_INCREMENT:自增列必须是主键或唯一键,且通常为INT类型。
外键关联:子表外键的类型必须与主表主键完全一致,主表需先存在。
1.在school数据库中创建名为student的数据表,结构如下:
列名
数据类型
约束条件
id
整数
主键,自增
name
可变长度字符串(最长 20)
非空
gender
固定长度字符串(1)
默认值为 “男”
birth
日期
允许为 NULL
要求:若表已存在则不创建,存储引擎为InnoDB。
【答案】
USE school; -- 切换到目标数据库
CREATE TABLE IF NOT EXISTS student (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
gender CHAR(1) DEFAULT '男',
birth DATE
) ENGINE=InnoDB;
1.(填空题)CREATE TABLE语句中,用于指定列值不可为空的约束是______。
【答案】NOT NULL
【解析】NOT NULL是列级约束,强制列必须有值,插入或更新时若为空则报错。
2.(判断题)一个数据表可以有多个主键。( )
【答案】×
【解析】一个表只能有一个主键,PRIMARY KEY约束唯一标识表中的记录,多列联合主键需用表级约束定义,但仍视为一个主键。
3.(单项选择题)下列数据类型中,适合存储 “学生姓名”(长度不确定,最长不超过 10 个汉字)的是( )
A. CHAR(10) B. VARCHAR(20) C. INT D. DATE
【答案】B
【解析】1 个汉字在utf8字符集下占 3 字节,10 个汉字需至少 30 字节,但VARCHAR(20)表示最大 20 字符,适合存储可变长度的字符串;A 为固定长度,浪费空间;C、D 不适合存储字符串。
4.(读程序填空题)以下语句创建score表,id为主键且自增,stu_id关联student表的id,请补全外键约束:
CREATE TABLE score (
id INT PRIMARY KEY AUTO_INCREMENT,
stu_id INT,
score DECIMAL(5,2),
______ ______ (stu_id) ______ student(id)
);
【答案】FOREIGN KEY;REFERENCES
【解析】外键约束语法为FOREIGN KEY (子表列) REFERENCES 主表名(主表列),确保stu_id的值必须是student表中id已存在的值。
1.(单项选择题)下列关于AUTO_INCREMENT的说法,正确的是( )
A. 可用于VARCHAR类型列
B. 必须配合PRIMARY KEY或UNIQUE使用
C. 自增起始值不能修改
D. 插入时必须手动指定值
【答案】B
【解析】AUTO_INCREMENT仅适用于整数型列,需为主键或唯一键;A 错误(不支持字符串),C 错误(可通过ALTER TABLE修改起始值),D 错误(插入时可省略,自动增长)。
2.(判断题)DEFAULT '2000-01-01'表示当列未赋值时,自动填入默认日期 “2000-01-01”,该约束可用于DATE类型列。( )
【答案】√
【解析】DEFAULT约束可指定默认值,日期型列的默认值需符合DATE类型格式(YYYY-MM-DD),因此正确。
3.(填空题)创建表时,若需指定表的默认字符集为utf8,应在表选项中添加:______ utf8。
【答案】CHARACTER SET(或 CHARSET)
【解析】CHARACTER SET(简写CHARSET)用于指定表的字符集,确保中文等字符正常存储。
4.(SQL 语句题)创建名为course的数据表,结构如下:
列名
数据类型
约束条件
cid
整数
主键
cname
可变长度字符串(30)
非空,值唯一
credit
整数
默认值为 3
要求:表不存在时创建。
【答案】
CREATE TABLE IF NOT EXISTS course (
cid INT PRIMARY KEY,
cname VARCHAR(30) NOT NULL UNIQUE,
credit INT DEFAULT 3
);
CREATE TABLE [IF NOT EXISTS] 表名 (
列名1 数据类型 [约束条件],
列名2 数据类型 [约束条件],
...
[表级约束条件]
) [表选项];
知识点二 数据类型
1. 数值型
用于存储数字,根据精度和范围分为整数型、浮点型和定点型。
类型分类
具体类型
说明(范围 / 特点)
整数型
TINYINT
1 字节,范围:-128~127(有符号)或 0~255(无符号,需加UNSIGNED)
SMALLINT
2 字节,范围:-32768~32767(有符号)
存储较小整数(如年龄)
INT(INTEGER)
4 字节,范围:-2147483648~2147483647(有符号)
存储普通整数(如 ID、数量)
BIGINT
8 字节,范围更大(适用于超大数据,如身份证号需用字符串存储,因其超过 INT 范围)
存储极大整数(如记录数)
浮点型(近似值)
FLOAT(M,D)
4 字节,单精度浮点数,M总位数,D小数位(精度有限,可能有误差)
DOUBLE(M,D)
8 字节,双精度浮点数,精度高于FLOAT,但仍可能有误差
较高精度的近似计算
定点型(精确值)
DECIMAL(M,D)
M总位数(1~65),D小数位(0~30),存储精确值(无误差)
2. 字符串型
用于存储文本数据,根据长度和存储方式分为固定长度、可变长度和大文本型。
类型
说明(长度 / 特点)
适用场景
CHAR(N)
固定长度字符串,N为字符数(1~255),不足补空格,查询快但可能浪费空间
长度固定的数据(如手机号 11 位、性别)
VARCHAR(N)
可变长度字符串,N为最大字符数(1~65535),按实际长度存储,节省空间
长度不固定的文本(如姓名、地址)
TEXT
长文本(最大 65535 字节),不适合作为主键或索引
长文本内容(如文章、备注)
LONGTEXT
极大文本(最大 4GB),存储超长篇内容
超长文本(如日志、文档)
3. 日期时间型
用于存储日期和时间,格式固定,便于时间计算和排序。
类型
格式
范围
特点
DATE
YYYY-MM-DD
1000-01-01 ~ 9999-12-31
仅存储日期(年 - 月 - 日)
TIME
HH:MM:SS
-838:59:59 ~ 838:59:59
仅存储时间(时:分: 秒),可表示负数(如时间间隔)
DATETIME
YYYY-MM-DD HH:MM:SS
1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
存储日期 + 时间,不受时区影响,默认值需手动指定
TIMESTAMP
YYYY-MM-DD HH:MM:SS
1970-01-01 00:00:01 ~ 2038-01-19 03:14:07
存储日期 + 时间,受时区影响,默认值为当前时间(CURRENT_TIMESTAMP)
4. 注意事项
字符型的N表示 “字符数”(非字节数),如VARCHAR(20)可存储 20 个汉字(utf8编码下占 60 字节)。
浮点型(FLOAT/DOUBLE)适合非精确场景,定点型(DECIMAL)适合需精确计算的场景。
TIMESTAMP范围较小,仅到 2038 年,长期数据建议用DATETIME。
某电商平台需存储商品价格(精确到分, “99.99 元”),下列数据类型中最适合的是( )
A. FLOAT(5,2) B. DOUBLE(5,2) C. DECIMAL(5,2) D. INT
【答案】C
1.(判断题)CHAR(10)和VARCHAR(10)都能存储最多 10 个字符,因此在任何场景下使用效果相同。( )
【答案】×
【解析】CHAR(10)是固定长度,无论实际存储多少字符,均占用 10 个字符的空间,查询速度快;VARCHAR(10)是可变长度,按实际字符数 + 1 字节存储,节省空间。适合长度固定的数据用CHAR,长度不固定的用VARCHAR,场景不同效果不同。
2.(填空题)存储 “用户注册时间”(需包含年月日时分秒,且随时区自动调整),适合使用的数据类型是______。
【答案】TIMESTAMP
【解析】TIMESTAMP存储日期时间,受时区影响,可自动根据时区调整显示值,适合记录事件发生时间;DATETIME不受时区影响,适合固定时间。
3.(单项选择题)下列数据类型中,适合存储 “身份证号”的是( )
A. INT B. BIGINT C. CHAR(18) D. VARCHAR(18)
【答案】C
【解析】身份证号是 18 位数字,但本质是字符串。CHAR(18)为固定长度,适合存储长度固定的身份证号;INT和BIGINT无法存储超过自身范围的数字;VARCHAR(18)虽可存储,但身份证号长度固定,CHAR查询效率更高。
4.(读程序填空题)以下语句创建student表,age存储学生年龄(范围 0~120),birth存储出生日期(年月日),请补全数据类型:
CREATE TABLE student (
id INT PRIMARY KEY,
age ______, -- 存储年龄
birth ______ -- 存储出生日期
);
【答案】TINYINT UNSIGNED;DATE
【解析】年龄 0~120 是小范围正整数,TINYINT UNSIGNED(无符号)范围 0~255,足够存储;出生日期仅需年月日,DATE类型格式为YYYY-MM-DD,适合存储。
1.(单项选择题)TEXT类型与VARCHAR(65535)的主要区别是( )
A. TEXT存储更长的文本 B. TEXT不能用于WHERE条件查询
C. TEXT不支持默认值 D. TEXT占用空间更小
【答案】C
【解析】TEXT和VARCHAR(65535)最大存储长度相近,但TEXT不支持DEFAULT约束,而VARCHAR可以;A 错误(长度相近),B 错误(TEXT可用于查询),D 错误(TEXT存储效率略低)。
2.(判断题)DATETIME和TIMESTAMP都能存储日期和时间,且两者的取值范围相同。( )
【答案】×
【解析】DATETIME范围是 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59,TIMESTAMP范围是 1970-01-01 00:00:01 ~ 2038-01-19 03:14:07,范围不同。
3.(填空题)DECIMAL(8,2)表示该列最多可存储______位数字,其中小数部分占______位。
【答案】8;2
【解析】DECIMAL(M,D)中,M是总位数(整数 + 小数),D是小数位数,因此DECIMAL(8,2)可存储如 123456.78(6 位整数 + 2 位小数,共 8 位)。
4.(SQL 语句题)创建product表,包含以下列,需指定合适的数据类型:
列名
说明
数据类型选择要求
pid
商品 ID(整数,范围 1~100000)
选择最小合适的整数类型
pname
商品名称(最长 50 个字符)
可变长度,节省空间
price
商品价格(精确到分,最大 9999.99)
精确存储,无误差
stock
库存数量(0~1000)
无符号整数,范围足够
【答案】
CREATE TABLE product (
pid INT, -- INT范围足够覆盖1~100000
pname VARCHAR(50), -- 可变长度,适合名称
price DECIMAL(6,2), -- 总6位(4位整数+2位小数),覆盖9999.99
stock SMALLINT UNSIGNED -- 无符号SMALLINT范围0~65535,足够存储1000
);
数值型:用于存储数字,根据精度和范围分为整数型、浮点型和定点型。
字符串型:用于存储文本数据,根据长度和存储方式分为固定长度、可变长度和大文本型。
日期时间型:用于存储日期和时间,格式固定,便于时间计算和排序。
原创精品资源学科网独家享有版权,侵权必究!2
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$