1.建表语句
一般最简单的建表语句可包含下面4个部分,create_definition 包含列的定义,索引定义等,table_options 包含一些选项如engine 是innodb还是myISAM等,CHARACTER指定字符集等选项,partition_options 是涉及到表分区的定义
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name(create_definition,...)[table_options][partition_options]
一般简单的建表语句如下
create table role(`id` BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,`role_name` VARCHAR(64) NOT NULL COMMENT '角色名称',`role_code` VARCHAR(64) NOT NULL COMMENT '角色编码',`create_time` datetime COMMENT '创建时间',`update_time` datetime COMMENT '更新时间',`create_by` VARCHAR(32) COMMENT '创建人',`update_by` VARCHAR(32) COMMENT '更新人',INDEX `role_code_idx` (`role_code`),INDEX `code_name_idx` (`role_code`,`role_name`)
)ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='角色表';
1.1 mysql列的类型
常用的列类型有整形,浮点型,字符型,日期类型等
类型 | 描述 | 存贮(字节) | 有符号最小值 | 无符号最小值 | 有符号最大值 | 无符号最大值 |
---|---|---|---|---|---|---|
TINYINT | 1 | -128 | 0 | 127 | 255 | |
SMALLINT | 2 | -32768 | 0 | 32767 | 65535 | |
MEDIUMINT | 3 | -8388608 | 0 | 8388607 | 16777215 | |
INT | 4 | -2147483648 | 0 | 2147483647 | 4294967295 | |
BIGINT | 8 | -2^63 | 0 | 2^63-1 | 2^64-1 | |
DECIMAL | 精确小数,例如,DECIMAL(5,2)表示总共5位数,2位小数,范围在-999.99 to 999.99 | |||||
float | 存贮近似精度小数 | 4 | ||||
double | 存贮近似精度小数 | 8 | ||||
char | 固定长度的字符类型,例如char(8)表示最多存贮8个字符,即使存入的字符长度不够8字符,也会分配固定的存贮空间 | |||||
varchar | 可变存贮长度的字符类型,例如varchar(8)表示最多存贮8个字符,不会使用固定的存贮空间,会多一到2个字节存贮,当前字符长度 | |||||
varchar | 可变存贮长度的字符类型,例如varchar(8)表示最多存贮8个字符,不会使用固定的存贮空间,会多一到2个字节存贮,当前字符长度 | |||||
datetime | 日期类型,存贮YYYY-MM-DD HH:MM:SS 这种年月日时分秒格式的数据,于timestamp的区别是不受时区的影响 | 8 | ||||
timestamp | 日期类型,存贮YYYY-MM-DD HH:MM:SS 这种年月日时分秒格式的数据,受当前服务器时区影响 | 4 |
2.修改表语句
2.1 修改表名
ALTER table old_table_name RENAME new_table_name;
2.2 添加新的列
以角色表为例,添加remark 列
ALTER table `role` add `remark` VARCHAR(256) COMMENT '备注';
2.3 更改列定义
使用CHANGE和Modify都可以修改列的定义,但modify不能修改列的名称,change可以,但是,change的开销会更大一些,
ALTER TABLE tbl_name[alter_option [, alter_option] ...][partition_options]alter_option: {table_options| CHANGE [COLUMN] old_col_name new_col_name column_definition[FIRST | AFTER col_name]| MODIFY [COLUMN] col_name column_definition[FIRST | AFTER col_name]
}
例子
ALTER table `role` CHANGE `remark` `remark_name` VARCHAR(512) COMMENT '备注';ALTER table `role` modify `remark_name` VARCHAR(256) COMMENT '备注';
2.3 删除列
ALTER TABLE tbl_name DROP [COLUMN] col_name
例如
ALTER table `role` DROP `remark_name`;
3.删除表语句
drop table table_name
例如
drop table `role`