SQL119 修改表
携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第11天,点击查看活动详情
1、题目📑
现有一张用户信息表user_info,其中包含多年来在平台注册过的用户信息。
示例:用户信息表user_info
| Filed | Type | Null | Key | Default | Extra | Comment |
|---|---|---|---|---|---|---|
| id | int(11) | NO | PRI | (NULL) | auto_increment | 自增ID |
| uid | int(11) | NO | UNI | (NULL) | 用户ID | |
| nick_name | varchar(64) | YES | (NULL) | 昵称 | ||
| achievement | int(11) | YES | 0 | 成就值 | ||
| level | int(11) | YES | (NULL) | 用户等级 | ||
| job | varchar(32) | YES | (NULL) | 职业方向 | ||
| register_time | datetime | YES | CURRENT_TIMESTAMP | 注册时间 |
请在用户信息表,字段level的后面增加一列最多可保存15个汉字的字段school;并将表中job列名改为profession,同时varchar字段长度变为10;achievement的默认值设置为0。
输出结果示例:
| Filed | Type | Null | Key | Default | Extra | Comment |
|---|---|---|---|---|---|---|
| id | int(11) | NO | PRI | auto_increment | 自增ID | |
| uid | int(11) | NO | UNI | 用户ID | ||
| nick_name | varchar(64) | YES | 昵称 | |||
| achievement | int(11) | YES | 0 | |||
| level | int(11) | YES | 用户等级 | |||
| school | varchar(15) | |||||
| profession | varchar(10) | YES | ||||
| register_time | datetime | YES | CURRENT_TIMESTAMP | 注册时间 |
备注:建表时限制的字符集为utf8,MySQL版本为8.*
后台会通过SHOW FULL FIELDS FROM user_info 来对比输出结果。
示例1
输入:
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|注册时间
2、思路🧠
细节剖析:
- 字段level的后面增加一列最多可保存15个汉字的字段school;
- 并将表中job列名改为profession;
- achievement的默认值设置为0;
解决方法:
- 添加列
Alter table 表名 add column 列名 类型;(默认添加到表的最后一列)
【first|after 字段名】可以指定位置
Eg:alter table employees add column name varchar after id;
-
修改列的类型或约束
Alter table 表名 modify column 列名 新类型【新约束】;
-
修改列名
Alter table 表名 change column 旧列名 新列名 类型;
-
删除列
Alter table 表名 drop column 列名;
-
修改表名
Alter table 表名 rename 【to】新表名;
-
将某一列放到第一列
alter table 表名 modify column 列名 类型 first;
3、代码👨💻
commit AC
ALTER TABLE user_info ADD COLUMN school varchar(15) AFTER level;
#增加列在某列之后
alter table 增加的表格 add 增加列的名称 数据类型 位置(after level 在level 之后)
ALTER TABLE user_info CHANGE COLUMN job profession varchar(10);
#更换列的名称及数据类型
alter table user_info change 原列名 修改列名 修改数据类型
ALTER TABLE user_info MODIFY COLUMN achievement int(11) DEFAULT 0;
#更改数据类型
alter table 表名 modify 修改列名称 数据类型 默认值等
4、总结
该题目的对SQL的语法及基础知识,学会使用使用语句对数据库表和列的一些操作,修改类型、列表、列限定条件等,像内连接、外连接、左连接、右连接等都要有相关的了解,其次当你编写了大量的SQL之后,就要学会进行SQL的优化,这对于数据查询的时间会有大幅度的降低。
❤️来自专栏《Mysql每日一题》欢迎订阅❤️
厂长写博客目的初衷很简单,希望大家在学习的过程中少走弯路,多学一些东西,对自己有帮助的留下你的赞赞👍或者关注➕都是对我最大的支持,你的关注和点赞给厂长每天更文的动力。
对文章其中一部分不理解,都可以评论区回复我,我们来一起讨论,共同学习,一起进步!
原题链接:SQL119 修改表(牛客网)