# 表结构操作 create & drop table

# 创建表

CREATE TABLE `user` (
    `id` int(11) AUTO_INCREMENT comment "自增id",
    `user_code` varchar(255) comment "用户编码",
    `user_name` varchar(255) comment "用户名称",
    `age` int(11) comment "年龄",
    `money` DECIMAL(10,2) comment "拥有资金",
    PRIMARY KEY(`id`)
) ENGINE=InnoDB charset="utf8";

上面这个sql的含义:

  • 第一行前括号前面的语句表示创建一个表user。
  • 第一行前括号和最后一行后括号内的3行分别定义了3个字段user_code、user_name、age、money和一个只包含user_code的主键,以及数据类型及一些特性的定义。
    • 字段名
    • 字段类型
    • 字段默认值
    • 字段判断空
    • 字段备注
  • 括号后面的部分代表这个表本身的一些属性的定义。
    • 表格存储引擎
    • 表格默认字符集
    • 表格备注

# 删除表

drop table `user`;

# 修改表

-- 修改表名
alter table user rename user_1;
alter table user rename as user_1;
-- 修改表属性
alter table CHARACTER SET = "gbk";
-- 新增字段
alter table user ADD user_code_1 varchar(100);
-- 修改字段
alter table user CHANGE user_code user_code_1 varchar(100);
alter table user CHANGE COLUMN user_code user_code_1 varchar(100);
alter table user MODIFY user_code user_code_1 varchar(100);
alter table user MODIFY COLUMN user_code user_code_1 varchar(100);
-- 删除字段
alter table user drop user_code_1;

上面展示了对表的各种修改,需要特别说明的的是修改表,在低版本的时候会导致锁表,无论高低版本这个操作都是比较敏感的,特别是大数据量的表,修改表结构往往需要花比较长的执行时间,需要慎重操作。

# 表结构操作扩展

# 创建表之前验证表是否已经存在,存在则不创建表

CREATE TABLE if not exists `user` (
    `id` int(11) AUTO_INCREMENT comment "自增id",
    `user_code` varchar(255) comment "用户编码",
    `user_name` varchar(255) comment "用户名称",
    `age` int(11) comment "年龄",
    `money` DECIMAL(10,2) comment "拥有资金",
    PRIMARY KEY(`id`)
) ENGINE=InnoDB charset="utf8";

这样可以保证创建表语句执行不会报错

# 删除表之前验证表是否存在,不存在则不执行删除操作

drop table if exists user;

上面的sql语句是执行删除之前先验证user表是否存在,如果存在则执行sql语句。这种语法经常被用来和创建表语句联合使用,检查表是否存在,存在删除,再创建新的表。

# 复制表结构

create table `user_1` like `user`;