题解 | #SQL 9.创建一张新表#

创建一张新表

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

明确考点:

表的创建、修改与删除:

  • 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]

细节剖析:

  • 自增ID:AUTO_INCREMENT;
  • 设置主键:PRIMARY KEY;
  • 唯一性约束:UNIQUE
  • 非空约束:NOT NULL
  • 设置默认值:DEFAULT 0
  • 当前时间戳:CURRENT_TIMESTAMP
  • 评论/注释:COMMENT
  • 如果该表已创建过,正常返回:IF NOT EXISTS

思路实现:

  • 本题采用第1种创建方式,根据细节剖析中的点组织完整创建语句:
CREATE TABLE IF NOT EXISTS user_info_vip (
    id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
    uid int UNIQUE NOT NULL COMMENT '用户ID',
    nick_name varchar(64) COMMENT '昵称',
    achievement int DEFAULT 0 COMMENT '成就值',
    `level` int COMMENT '用户等级',
    job varchar(32) COMMENT '职业方向',
    register_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间'
) CHARACTER SET utf8 COLLATE utf8_general_ci;
SQL进阶 文章被收录于专栏

SQL进阶step by step

全部评论
请问括号后最后一句代码啥意思
3 回复 分享
发布于 2022-11-02 18:45 上海
CHARACTER SET utf8 COLLATE utf8_general_ci;这样和下面用 default charset = utf8 有什么区别没呢 即是 字符集 校对规则 以及编码有啥不同
3 回复 分享
发布于 2022-07-26 20:15
为什么不用写int(11),直接写int就行了呢?
2 回复 分享
发布于 2022-12-05 17:59 广东
CHARACTER SET utf8 COLLATE utf8_general_c 设置最后这个代码是啥意思?完全不懂,求大神指教
1 回复 分享
发布于 2023-02-23 13:52 广东
请问为什么level用引号括起来会报错,必须用``呢
1 回复 分享
发布于 2022-05-11 00:49
请教下,为什么编码选择utf8,而不是utf8mb4?
点赞 回复 分享
发布于 2023-03-07 14:47 广东
为啥这题不能直接用CREATE TABLE tb_name LIKE tb_name_old这个方法呢
点赞 回复 分享
发布于 2022-08-17 11:09 江苏
小括号里面的内容有顺序区分吗? 为什么id那一行没有写 NOT NULL呢?
点赞 回复 分享
发布于 2022-07-24 17:13
这题是不是也可以用第二种方式来建表呢?
点赞 回复 分享
发布于 2022-07-02 16:04
666
点赞 回复 分享
发布于 2022-04-15 21:47
666
点赞 回复 分享
发布于 2022-04-15 09:36

相关推荐

07-15 12:24
重庆大学 运营
坏消息:和好工作擦肩而过
给点吧求求了:怎么可能因为差几秒,估计就是简历更好看婉拒了
点赞 评论 收藏
分享
06-11 17:39
门头沟学院 Java
小呆呆的大鼻涕:卧槽,用户彻底怒了
点赞 评论 收藏
分享
评论
287
100
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务