公司使用的flyway来管理项目数据库,因此每个版本开发,都会牵涉到表、字段、索引的修改、删除、增加;需要在flyway文件中使用原生的sql语句;这东西不怎么常用,但是用的时候会突然想不起来,因此记录一下:
一般来说对表的操作很少,最多就是创建表或者删除表;
DROP TABLE `table_name`;
一般创建表之前都会判断表是否存在,存在就删除;
DROP TABLE IF EXISTS `table_name`;
CREATE TABLE `table_name` (
`id` biginnt(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT = '表中文名' ROW_FORMAT = Dynamic;
修改列名:
rename修改:只修改列名
ALTER TABLE `table_name` RENAME COLUMN odl_col_name to new_col_name;
change修改:修改列名和列的数据类型
ALTER TABLE `table_name` CHANGE COLUMN odl_col_name new_col_name new_data_type;
修改列类型:
ALTER TABLE有三种修改列的方式:
1、alter column 设置或者删除类的默认值;该操作会直接修改.frm文件而不涉及表数据
# 添加默认值
ALTER TABLE `table_name` ALTER COLUMN col_name set default 'java';
# 删除默认值
ALTER TABLE `table_name` ALTER COLUMN col_name drop default;
2、change column 可以重命名列或者修改列的定义
# 修改列名(数据类型还使用之前的,只修改名字)
ALTER TABLE `table_name` CHANGE COLUMN old_col_name new_col_name varchar(20);
# 同时修改列名和数据类型
ALTER TABLE `table_name` CHANGE COLUMN old_col_name new_col_name varchar(40);
3、modify column 可以更改列的定义,但不能更改列的名称
ALTER TABLE `table_name` MODIFY COLUMN col_name varcahr(20);
这三种方式比较起来,change column的功能最强大,可以通用;
modify和change在更新表结构的时候,会对数据进行读、重新插入操作,谨慎使用;
当只需要修改某一列的默认值的时候,优先选择用alter,需要修改列的名称用change,只修改列的定义用modify;
ALTER TABLE `table_name` DROP COLUMN col_name;
ALTER TABLE `table_name` ADD COLUMN col_name datatype;
添加普通索引:
ALTER TABLE `table_name` ADD INDEX index_name(col_name);
添加主键:
ALTER TABLE `table_name` ADD PRAMARY KEY(col_name);
添加唯一索引:
ALTER TABLE `table_name` ADD UNIQUE(col_name);
添加全文索引:
ALTER TABLE `table_name` ADD FULLTEXT(col_name);
添加联合索引:
ALTER TABLE `table_name` ADD INDEX index_name(col_name1, col_name2, col_name3);
删除索引:
# drop方式
DROP INDEX index_name ON table_name;
# alter table方式
ALTER TABLE `table_name` DROP INDEX index_name;
插入表数据:
# 按指定的列插入
INSERT INTO `table_name` (col1, col2, clo3, ....., colN) VALUES (vul1, vul2, vul3, ....., vuln);
# 为所有列插入
INSERT INTO `table_name` VALUES (vul1, vul2, vul3, ....., vuln);
更新表数据:
# 更新单个字段
UPDATE `table_name` set name='java' where id = 3;
# 更新多个字段
UPDATE `table_name` set name='java', age=22, sex='男' where id = 3;
删除表数据:
DELETE FROM `table_name` where id = 3;
结语:取法乎上,仅得其中;取法乎中,仅得其下;