赞
踩
博主昵称:跳楼梯企鹅
博主主页面链接:主页传送门
博主专栏页面连接:网络安全专栏传送么门
创作初心:本博客的初心为与技术朋友们相互交流,每个人的技术都存在短板,博主也是一样,虚心求教,希望各位技术友给予指导。
博主座右铭:发现光,追随光,成为光,散发光;
博主研究方向:渗透测试、机器学习 ;
博主寄语:感谢各位技术友的支持,您的支持就是我前进的动力 ;牛客刷题:网站传送门
目录
SQL 索引(Index)用于提高数据表的查询速度。一个表可以创建多个索引,一个索引可以包含一个或者多个字段。
语法:
- CREATE INDEX index_name
- ON table_name ( column1, column2.....);
题目:创建一张新表
描述:现有一张用户信息表,其中包含多年来在平台注册过的用户信息,随着牛客平台的不断壮大,用户量飞速增长,为了高效地为高活跃用户提供服务,现需要将部分用户拆分出一张新表。
本题难易程度:中等
- 输入:
-
- 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|注册时间
- 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;
题目:修改表
描述:现有一张用户信息表user_info,其中包含多年来在平台注册过的用户信息。
本题难易程度:中等
- 输入:
-
- 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|注册时间
- 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;
题目:删除表
描述:现有一张试卷作答记录表exam_record,其中包含多年来的用户作答试卷记录。一般每年都会为exam_record表建立一张备份表exam_record_{YEAR},{YEAR}为对应年份。
现在随着数据越来越多,存储告急,请你把很久前的(2011到2014年)备份表都删掉(如果存在的话)。
备注:后台会通过SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME LIKE \'exam\_record\_201_\' 来对比输出结果。
本题难易程度:简单
- 输入:
-
- 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
- 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;
题目:创建索引
描述:现有一张试卷信息表examination_info,其中包含各种类型试卷的信息。为了对表更方便快捷地查询,需要在examination_info表创建以下索引,规则如下:
在duration列创建普通索引idx_duration、在exam_id列创建唯一性索引uniq_idx_exam_id、在tag列创建全文索引full_idx_tag。
本题难易程度:中等
- 输入:
-
- 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
- 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);
题目:删除索引
描述:请删除examination_info表上的唯一索引uniq_idx_exam_id和全文索引full_idx_tag。
后台会通过 SHOW INDEX FROM examination_info 来对比输出结果。
本题难易程度:简单
- 输入:
-
- 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
- drop index uniq_idx_exam_id on examination_info;
- drop index full_idx_tag on examination_info;
本篇文章为SQL刷题第17天
欢迎大家一起和博主来刷题SQL刷题点击开始学习
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。