SQL119 修改表

201 阅读3分钟

SQL119 修改表

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第11天,点击查看活动详情

❤️‍欢迎订阅java厂长《SQL每日一题》 ❤️‍

1、题目📑

现有一张用户信息表user_info,其中包含多年来在平台注册过的用户信息。

示例:用户信息表user_info

FiledTypeNullKeyDefaultExtraComment
idint(11)NOPRI(NULL)auto_increment自增ID
uidint(11)NOUNI(NULL)用户ID
nick_namevarchar(64)YES(NULL)昵称
achievementint(11)YES0成就值
levelint(11)YES(NULL)用户等级
jobvarchar(32)YES(NULL)职业方向
register_timedatetimeYESCURRENT_TIMESTAMP注册时间

请在用户信息表,字段level的后面增加一列最多可保存15个汉字的字段school;并将表中job列名改为profession,同时varchar字段长度变为10;achievement的默认值设置为0。

输出结果示例:

FiledTypeNullKeyDefaultExtraComment
idint(11)NOPRIauto_increment自增ID
uidint(11)NOUNI用户ID
nick_namevarchar(64)YES昵称
achievementint(11)YES0
levelint(11)YES用户等级
schoolvarchar(15)
professionvarchar(10)YES
register_timedatetimeYESCURRENT_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 修改列名称 数据类型 默认值等

image-20220809205648833

4、总结

该题目的对SQL的语法及基础知识,学会使用使用语句对数据库表和列的一些操作,修改类型、列表、列限定条件等,像内连接、外连接、左连接、右连接等都要有相关的了解,其次当你编写了大量的SQL之后,就要学会进行SQL的优化,这对于数据查询的时间会有大幅度的降低。

❤️‍来自专栏《Mysql每日一题》欢迎订阅❤️‍

厂长写博客目的初衷很简单,希望大家在学习的过程中少走弯路,多学一些东西,对自己有帮助的留下你的赞赞👍或者关注➕都是对我最大的支持,你的关注和点赞给厂长每天更文的动力。

对文章其中一部分不理解,都可以评论区回复我,我们来一起讨论,共同学习,一起进步!

原题链接:SQL119 修改表(牛客网)