📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人稱0年DBA工作經驗
一位上進心十足的【大資料領域部落客】!😜😜😜
中國DBA聯盟(ACDU)成員,目前從事DBA及程式程式設計
擅長主流資料Oracle、MySQL、PG 運維開發,備份恢複,安裝遷移,性能優化、故障應急處理等。
✨ 如果有對【資料庫】感興趣的【小可愛】,歡迎關注【IT邦德】💞💞💞
❤️❤️❤️感謝各位大可愛小可愛!❤️❤️❤️
文章目錄
- 前言
- 1 🌈 表的建立、修改與删除
- 🚀 SQL9 建立一張新表
- 🚀 SQL10 修改表
- 🚀 SQL11 删除表
- 2 🌈 索引的建立、删除
- 🚀 SQL12 建立索引
- 🚀 SQL13 删除索引
前言
SQL每個人都要用,但是用來衡量産出的并不是SQL本身,你需要用這個工具,去創造其它的價值。
1 🌈 表的建立、修改與删除
🚀 SQL9 建立一張新表
📖 原來的使用者資訊表

🚀 題目描述
現有一張使用者資訊表,其中包含多年來在平台注冊過的使用者資訊,随着牛客平台的不斷壯大,
使用者量飛速增長,為了高效地為高活躍使用者提供服務,現需要将部分使用者拆分出一張新表。
作為資料分析師,請建立一張優質使用者資訊表user_info_vip,表結構和使用者資訊表一緻。
請寫出建表語句将表格中所有限制和說明記錄到表裡。
備注:
1.背景會通過 SHOW FULL FIELDS FROM user_info_vip 語句,來對比輸出結果
2.如果該表已經被其他分析師建立過了,正常傳回即可
🍌🍌 答案
create table if not exists 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 '注冊時間'
);
🚀 SQL10 修改表
📖 使用者資訊表user_info
🚀 題目描述
現有一張使用者資訊表user_info,其中包含多年來在平台注冊過的使用者資訊。
請在使用者資訊表,字段level的後面增加一列最多可儲存15個漢字的字段school;
并将表中job列名改為profession,同時varchar字段長度變為10;
achievement的預設值設定為0。
備注:建表時限制的字元集為utf8,MySQL版本為8.*
背景會通過SHOW FULL FIELDS FROM 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;
🍌🍌 答案
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;
🚀 SQL11 删除表
🚀 題目描述
現有一張試卷作答記錄表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);
🍌🍌 答案
drop table
if exists
exam_record_2011,
exam_record_2012,
exam_record_2013,
exam_record_2014;
2 🌈 索引的建立、删除
🚀 SQL12 建立索引
📖 根據題意,将傳回如下結果:
🚀 題目描述
現有一張試卷資訊表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;
🍌🍌 答案
-- 唯一索引
ALTER TABLE examination_info
ADD UNIQUE INDEX uniq_idx_exam_id(exam_id);
-- 全文索引
ALTER TABLE examination_info
ADD FULLTEXT INDEX full_idx_tag(tag);
-- 普通索引
ALTER TABLE examination_info
ADD INDEX idx_duration(duration);
🚀 SQL13 删除索引
🚀 題目描述
請删除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);
🍌🍌 答案
drop index uniq_idx_exam_id on examination_info;
drop index full_idx_tag on examination_info;