题解 | #SQL 10.修改表#

修改表

http://www.nowcoder.com/practice/d08209df6f464cebafda5dfd5de03fce

明确考点:

表的创建、修改与删除:

  • 1.1 直接创建表:
CREATE TABLE
[IF NOT EXISTS] tb_name -- 不存在才创建,存在就跳过
(column_name1 data_type1 -- 列名和类型必选
  [ PRIMARY KEY -- 可选的约束,主键
   | FOREIGN KEY -- 外键,引用其他表的键值
   | AUTO_INCREMENT -- 自增ID
   | COMMENT comment -- 列注释(评论)
   | DEFAULT default_value -- 默认值
   | UNIQUE -- 唯一性约束,不允许两条记录该列值相同
   | NOT NULL -- 该列非空
  ], ...
) [CHARACTER SET charset] -- 字符集编码
[COLLATE collate_value] -- 列排序和比较时的规则(是否区分大小写等)
  • 1.2 从另一张表复制表结构创建表: CREATE TABLE tb_name LIKE tb_name_old

  • 1.3 从另一张表的查询结果创建表: CREATE TABLE tb_name AS SELECT * FROM tb_name_old WHERE options

  • 2.1 修改表:ALTER TABLE 表名 修改选项 。选项集合:

    { ADD COLUMN <列名> <类型>  -- 增加列
     | CHANGE COLUMN <旧列名> <新列名> <新列类型> -- 修改列名或类型
     | ALTER COLUMN <列名> { SET DEFAULT <默认值> | DROP DEFAULT } -- 修改/删除 列的默认值
     | MODIFY COLUMN <列名> <类型> -- 修改列类型
     | DROP COLUMN <列名> -- 删除列
     | RENAME TO <新表名> -- 修改表名
     | CHARACTER SET <字符集名> -- 修改字符集
     | COLLATE <校对规则名> } -- 修改校对规则(比较和排序时用到)
  • 3.1 删除表:DROP TABLE [IF EXISTS] 表名1 [, 表名2]

细节剖析:

  • 字段level的后面增加一列最多可保存15个汉字的字段school;
  • 并将表中job列名改为profession;
  • achievement的默认值设置为0;

思路实现:

  • 本题采用第1种修改方式,根据细节剖析中的点组织完整语句:
ALTER TABLE user_info ADD school varchar(15) AFTER `level`;
ALTER TABLE user_info CHANGE job profession varchar(10);
ALTER TABLE user_info CHANGE COLUMN achievement achievement int DEFAULT 0;
SQL进阶 文章被收录于专栏

SQL进阶step by step

全部评论
这题目描述有问题吧,这achievement的comment样例里直接就没了 要是还有的话感觉alter table user_info alter column achievement set default 0;也是可以的
2 回复 分享
发布于 2022-12-14 20:17 上海
第二个语句的columns是可以省略的吗?
点赞 回复 分享
发布于 2022-01-16 11:28
可以的。
点赞 回复 分享
发布于 2022-02-16 08:50
请问一下 `level`为什么要引住呢 而且不是单引号?代表什么呢
点赞 回复 分享
发布于 2022-02-25 00:29
请问第三个语句用 alter table user_info alter column achievement set default 0; 怎么不可以呢?
点赞 回复 分享
发布于 2022-03-29 20:37
第三句的列名achievement为什么要输入两次呢?
点赞 回复 分享
发布于 2022-10-04 14:48 湖北

相关推荐

数学转码崽:一直给我推,投了又不理,理了又秒挂
点赞 评论 收藏
分享
评论
74
31
分享

创作者周榜

更多
牛客网
牛客企业服务