博主昵称:跳楼梯企鹅
博主主页面链接:主页传送门
博主专栏页面连接:网络安全专栏传送么门
创作初心:本博客的初心为与技术朋友们相互交流,每个人的技术都存在短板,博主也是一样,虚心求教,希望各位技术友给予指导。
博主座右铭:发现光,追随光,成为光,散发光;
博主研究方向:渗透测试、机器学习 ;
博主寄语:感谢各位技术友的支持,您的支持就是我前进的动力 ;牛客刷题:网站传送门
目录
一、SQL表与索引
SQL 索引(Index)用于提高数据表的查询速度。一个表可以创建多个索引,一个索引可以包含一个或者多个字段。
语法:
CREATE INDEX index_name ON table_name ( column1, column2.....);
二、刷题
1.题目一
(1)题目
题目:创建一张新表
描述:现有一张用户信息表,其中包含多年来在平台注册过的用户信息,随着牛客平台的不断壮大,用户量飞速增长,为了高效地为高活跃用户提供服务,现需要将部分用户拆分出一张新表。
(2)题目难度
本题难易程度:中等
(3)示例
输入: drop table if EXISTS user_info_vip; 输出: id|int|None|NO|PRI|None|auto_increment|select,insert,update,references|自增ID uid|int|None|NO|UNI|None||select,insert,update,references|用户ID nick_name|varchar(64)|utf8_general_ci|YES||None||select,insert,update,references|昵称 achievement|int|None|YES||0||select,insert,update,references|成就值 level|int|None|YES||None||select,insert,update,references|用户等级 job|varchar(32)|utf8_general_ci|YES||None||select,insert,update,references|职业方向 register_time|datetime|None|YES||CURRENT_TIMESTAMP|DEFAULT_GENERATED|select,insert,update,references|注册时间
(4)代码
CREATE TABLE user_info_vip( id int(11) primary key auto_increment comment "自增ID", uid int(11) unique not null comment "用户ID", nick_name varchar(64) comment "昵称", achievement int(11) default 0 comment "成就值", level int(11) comment "用户等级", job varchar(32) comment "职业方向", register_time datetime default current_timestamp comment "注册时间" )DEFAULT CHARSET=UTF8;
(5)运行截图
2.题目二
(1)题目
题目:修改表
描述:现有一张用户信息表user_info,其中包含多年来在平台注册过的用户信息。
(2)题目难度
本题难易程度:中等
(3)示例
输入: drop table if exists user_info; CREATE TABLE IF NOT EXISTS user_info ( id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID', uid int UNIQUE NOT NULL COMMENT '用户ID', `nick_name` varchar(64) COMMENT '昵称', achievement int COMMENT '成就值', level int COMMENT '用户等级', job varchar(10) COMMENT '职业方向', register_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间' )CHARACTER SET utf8 COLLATE utf8_general_ci; 输出: id|int|None|NO|PRI|None|auto_increment|select,insert,update,references|自增ID uid|int|None|NO|UNI|None||select,insert,update,references|用户ID nick_name|varchar(64)|utf8_general_ci|YES||None||select,insert,update,references|昵称 achievement|int|None|YES||0||select,insert,update,references| level|int|None|YES||None||select,insert,update,references|用户等级 school|varchar(15)|utf8_general_ci|YES||None||select,insert,update,references| profession|varchar(10)|utf8_general_ci|YES||None||select,insert,update,references| register_time|datetime|None|YES||CURRENT_TIMESTAMP|DEFAULT_GENERATED|select,insert,update,references|注册时间
(4)代码
ALTER TABLE user_info add school VARCHAR(15) after level; ALTER TABLE user_info CHANGE job profession varchar(10); ALTER TABLE user_info MODIFY achievement int(11) DEFAULT 0;
(5)运行截图
3.题目三
(1)题目
题目:删除表
描述:现有一张试卷作答记录表exam_record,其中包含多年来的用户作答试卷记录。一般每年都会为exam_record表建立一张备份表exam_record_{YEAR},{YEAR}为对应年份。
现在随着数据越来越多,存储告急,请你把很久前的(2011到2014年)备份表都删掉(如果存在的话)。
备注:后台会通过SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME LIKE \'exam\_record\_201_\' 来对比输出结果。
(2)题目难度
本题难易程度:简单
(3)示例
输入: drop table if EXISTS exam_record; CREATE TABLE IF NOT EXISTS exam_record ( id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID', uid int NOT NULL COMMENT '用户ID', exam_id int NOT NULL COMMENT '试卷ID', start_time datetime NOT NULL COMMENT '开始时间', submit_time datetime COMMENT '提交时间', score tinyint COMMENT '得分' )CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE TABLE IF NOT EXISTS exam_record_2010 (LIKE exam_record); CREATE TABLE IF NOT EXISTS exam_record_2012 (LIKE exam_record); CREATE TABLE IF NOT EXISTS exam_record_2013 (LIKE exam_record); CREATE TABLE IF NOT EXISTS exam_record_2014 (LIKE exam_record); CREATE TABLE IF NOT EXISTS exam_record_2015 (LIKE exam_record); 输出: exam_record_2010 exam_record_2015
(4)代码
drop table if exists exam_record_2011; drop table if exists exam_record_2012; drop table if exists exam_record_2013; drop table if exists exam_record_2014;
(5)运行截图
4.题目四
(1)题目
题目:创建索引
描述:现有一张试卷信息表examination_info,其中包含各种类型试卷的信息。为了对表更方便快捷地查询,需要在examination_info表创建以下索引,规则如下:
在duration列创建普通索引idx_duration、在exam_id列创建唯一性索引uniq_idx_exam_id、在tag列创建全文索引full_idx_tag。
(2)题目难度
本题难易程度:中等
(3)示例
输入: drop table if exists examination_info; CREATE TABLE IF NOT EXISTS examination_info ( id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID', exam_id int UNIQUE NOT NULL COMMENT '试卷ID', tag varchar(32) COMMENT '类别标签', difficulty varchar(8) COMMENT '难度', duration int NOT NULL COMMENT '时长', release_time datetime COMMENT '发布时间' )CHARACTER SET utf8 COLLATE utf8_bin; 输出: examination_info|0|PRIMARY|1|id|A|0|None|None||BTREE|||YES|None examination_info|0|exam_id|1|exam_id|A|0|None|None||BTREE|||YES|None examination_info|0|uniq_idx_exam_id|1|exam_id|A|0|None|None||BTREE|||YES|None examination_info|1|idx_duration|1|duration|A|0|None|None||BTREE|||YES|None examination_info|1|full_idx_tag|1|tag|None|0|None|None|YES|FULLTEXT|||YES|None
(4)代码
create index idx_duration on examination_info(duration); create unique index uniq_idx_exam_id on examination_info(exam_id); create fulltext index full_idx_tag on examination_info(tag);
(5)运行截图
5.题目五
(1)题目
题目:删除索引
描述:请删除examination_info表上的唯一索引uniq_idx_exam_id和全文索引full_idx_tag。
后台会通过 SHOW INDEX FROM examination_info 来对比输出结果。
(2)题目难度
本题难易程度:简单
(3)示例
输入: drop table if exists examination_info; CREATE TABLE IF NOT EXISTS examination_info ( id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID', exam_id int COMMENT '试卷ID', tag varchar(32) COMMENT '类别标签', difficulty varchar(8) COMMENT '难度', duration int NOT NULL COMMENT '时长(分钟数)', release_time datetime COMMENT '发布时间' )CHARACTER SET utf8 COLLATE utf8_bin; CREATE INDEX idx_duration ON examination_info(duration); CREATE UNIQUE INDEX uniq_idx_exam_id ON examination_info(exam_id); ALTER TABLE examination_info ADD FULLTEXT full_idx_tag(tag); 输出: examination_info|0|PRIMARY|1|id|A|0|None|None||BTREE|||YES|None examination_info|1|idx_duration|1|duration|A|0|None|None||BTREE|||YES|None
(4)代码
drop index uniq_idx_exam_id on examination_info; drop index full_idx_tag on examination_info;
(5)运行截图
三、小结
本篇文章为SQL刷题第17天
欢迎大家一起和博主来刷题SQL刷题点击开始学习