MySQL数据库基础小测试
第一题
(1)在DOS窗口下连接MySQL 数据库。
// 连接数据库。
mysql -h localhost -u root -p
(2)创建数据库,数据库名称为:xxx_game_db(xxx为姓名首字母)。
// 创建名为 lhk_game_db 的数据库。
CREATE DATABASE lhk_game_db;
(3)选择连接你刚刚创建的数据库。
// 连接名为 lhk_game_db 的数据库
USE lhk_game_db;
第二题:
根据以下提供的表格,完成操作并截图
用户数据表(xxx_user)表结构:
字段名 | 数据类型 | 主键 | 外键 | 非空 | 唯一 | 自增 |
u_id | INT | 是 | 否 | 是 | 是 | 是 |
u_name | VARCHAR(20) | 否 | 否 | 是 | 是 | 否 |
sex | VARCHAR(10) | 否 | 否 | 是 | 否 | 否 |
cellphone | VARCHAR(20) | 否 | 否 | 是 | 是 | 否 |
nickname | VARCHAR(20) | 否 | 否 | 是 | 是 | 否 |
r_id | INT | 否 | 是 | 是 | 否 | 否 |
角色表(xxx_role)表结构:
字段名 | 数据类型 | 主键 | 外键 | 非空 | 唯一 | 自增 |
r_id | INT | 是 | 否 | 是 | 是 | 是 |
r_name | VARCHAR(20) | 否 | 否 | 是 | 是 | 否 |
用户数据表(xxx_user)
u_id | u_name | password | sex | cellphone | nickname | r_id |
1 | Luffy | 123456 | 男 | 13533766888 | 路飞 | 1 |
2 | Sauron | 654321 | 男 | 13141587777 | 索隆 | 4 |
3 | Nami | 456789 | 女 | 15867817888 | 娜美 | 3 |
4 | Sanji | 582346 | 男 | 13533678678 | 香吉士 | 5 |
5 | Jobba | 567824 | 男 | 15766654788 | 乔巴 | 2 |
角色数据表(xxx_role)
r_id | r_name |
1 | 船长 |
2 | 医生 |
3 | 航海士 |
4 | 剑士 |
5 | 厨师 |
(1)根据角色表结构创建数据表(创建语句执行截图,以及查看表结构截图)
// 创建角色表
-- 角色表
CREATE TABLE lhk_role
(
r_id INT PRIMARY KEY AUTO_INCREMENT,
r_name VARCHAR(20) NOT NULL UNIQUE
)ENGINE=INNODB DEFAULT CHARSET=UTF8;
//使用 desc 查看表结构
DESC lhk_role;
(2)根据用户表结构创建数据表(创建语句执行截图,以及查看表结构截图)
// 创建用户表并外键连接到角色表的 r_id。
-- 用户表
CREATE TABLE lhk_user
(
u_id INT PRIMARY KEY AUTO_INCREMENT,
u_name VARCHAR(20) NOT NULL UNIQUE,
password VARCHAR(32) NOT NULL,
sex VARCHAR(10) NOT NULL,
cellphone VARCHAR(20) NOT NULL UNIQUE,
nickname VARCHAR(20) NOT NULL UNIQUE,
r_id INT NOT NULL,
CONSTRAINT fk_u_r FOREIGN KEY (r_id) REFERENCES lhk_role (r_id)
)ENGINE=INNODB DEFAULT CHARSET=UTF8;
//desc 查看表结构
(3)根据角色数据表插入数据(插入语句执行截图,以及查看角色表截图)
// 给角色数据表插入数据
INSERT INTO lhk_role VALUES(1,'船长');
INSERT INTO lhk_role VALUES(null,'医生');
INSERT INTO lhk_role VALUES(null,'航海士');
INSERT INTO lhk_role VALUES(null,'剑士');
INSERT INTO lhk_role VALUES(null,'厨师');
// 查看角色表 lhk_role
SELECT * FROM lhk_role;
(4)根据用户数据表批量插入数据,密码这个字段请加密。
(插入语句执行截图,以及查看用户表截图)
// 给用户数据表批量插入数据,使用MD5加密密码字段
-- 用户数据表批量插入数据
INSERT INTO lhk_user VALUES(1,'Luffy',MD5('123456'),'男','13533766888','路飞',1),
(2,'Sauron',MD5('654321'),'男','13141587777','索隆',4),
(3,'Nami',MD5('456789'),'女','15867817888','娜美',3),
(4,'Sanji',MD5('582346'),'男','13533687678','香吉士',5),
(5,'Jobba',MD5('567824'),'男','15766654788','乔巴',2);
// 查看用户表
SELECT * FROM lhk_user;
(5)由于路飞的密码太简单,所以要把密码修改为“541_hzw”,并加密。(插入语句执行截图,以及查看用户表截图)
// 修改路飞的密码为“541_hzw”并加密
UPDATE lhk_user SET password=MD5('541_hzw') WHERE nickname='路飞';
//查看用户表
SELECT * FROM lhk_user;
(6)使用连接查询,显示如下效果
-- 连接查询
SELECT u_id,nickname,sex,r_name FROM lhk_user INNER JOIN lhk_role ON lhk_user.r_id=lhk_role.r_id;
第三题:
(1)在实际案例中,昵称是经常被其他用户所搜索的,当数据非常庞大的时候,就需要建立索引,请对用户表中的nickname字段添加索引,提高查询效率。并查看用户表中创建的索引
// 给用户表的nickname字段添加索引
-- 添加索引
CREATE INDEX idx_user_nickname ON lhk_user(nickname);
// 使用SHOW CREATE TABLE语句查看用户表中创建的索引(\G是为了整理,更好的查看)
SHOW CREATE TABLE lhk_user \G;
(2)通过用户表和角色表查询出,查出哪些角色还没有用户(提示:子查询)
//子查询
-- 子查询
SELECT * FROM lhk_role WHERE r_id NOT IN (SELECT r_id FROM lhk_user);
(所有角色都已经有了用户,所以显示结果为空)
(3)通过模糊搜索,查询到昵称里带有“吉”的记录。
// 模糊查询
-- 模糊查询
SELECT * FROM lhk_user WHERE nickname like '%吉%';