MySQL常用操作之数据库变更脚本
前言
-
场景分析
每次进行版本变更的时候,可能都会需要进行数据库变更,尤其项目迭代时,经常需要扩增表结构中的字段或者预埋一些固定数据,下面整理一些经常用到的SQL,方便查阅。
另外,有时会出现测试环境测试的接口没有问题,但是上了生产偶尔会出现调用失败的问题,可能也是由于数据库中字段长度不够导致,而线下没有做到充分测试。
数据库常用语句分类
-
概念图
-
DCL
Data Control Language:是数据库控制功能。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL。
-
DDL
Data Definition Language:DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用
-
DML
Data Manipulation Language:它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言
表结构变更(DDL)
-
MySQL中常用SQL
-- 添加表字段 ALTER TABLE 表名 ADD [COLUMN] 字段名 字段类型 是否可为空 COMMENT '注释' AFTER 指定某字段; -- 1.添加字段 alter table white_user add position varchar(50) not null comment '岗位'; -- 2.在指定字段后面添加字段 alter table white_user add position varchar(50) not null comment '岗位' after userName; -- 修改表字段 -- 1.修改表字段类型 ALTER TABLE 表名 MODIFY [COLUMN] 字段名 新数据类型 新类型长度 新默认值 新注释; alter table white_user modify column position varchar(1024) default null comment '岗位'; -- 2. 修改表字段名称(包括字段类型) ALTER TABLE 表名 CHANGE [column] 旧字段名 新字段名 新数据类型; alter table table1 change column1 column2 decimal(10,1) DEFAULT NULL COMMENT '注释'; -- 3. 删除表字段 ALTER TABLE 表名 DROP [COLUMN] 字段名; alter table white_user drop column position;
表数据变更(DML)
-
MySQL中常用SQL
-- 新增数据 -- 1. 由于ID列为主键,MySQL支持主键自增,所以插入的值为null时,实际插入的id就是原来最大的id值+1 INSERT INTO beauty (id,name,sex,borndate,phone,boyfriend_id) VALUES (NULL,'任盈盈','女','1999-07-06',13865427898,8); -- 2. 字段可以省略,默认的字段顺序和MySQL表中存储的顺序一致 INSERT INTO beauty VALUES (17,'小毛毛','女','1992-10-10',13863327238,null); -- 修改数据 -- 1. 修改单表数据 UPDATE beauty SET borndate='1999-12-12',phone=13876029843 WHERE id=1; -- 2. 修改多表数据(可以用于关联其他表,修改单表数据,挺好用) UPDATE beauty b,boys bo SET b.borndate='2020-02-02',b.phone=123456790,bo.boyName='令狐冲' WHERE b.boyfriend_id = bo.id AND b.id=1; -- 删除数据 -- 1. 删除单表数据 DELETE FROM beauty WHERE NAME = '任盈盈'; -- 2. 删除多表数据 DELETE b,bo FROM beauty b,boys bo WHERE b.boyfriend_id = bo.id AND b.boyfriend_id = 4; -- 3. 使用Truncate关键字 1. DELETE可以添加WHERE条件,而TRUNCATE不能添加WHERE条件 2. TRUNCATE效率稍高(因为TRUNCATE后面没有条件筛选,做删除操作的时候不需要去判断条件,所有效率稍高一点) 3. TRUNCATE删除了自增长的列之后,插入数据数据是从1开始的,而DELETE删除了数据之后是从上一个断点开始 (例如删除的自增长列是id,开始表中有15条数据,那么最大的id是15,DELETE 删除之后,重新插入一条新纪录,新纪录的id是16,而使用TRUNCATE删除,重新插入数据,id是从1开始) 4. DELETE删除可以回滚,TRUNCATE删除不能回滚
参考链接
-
Mysql修改字段名、修改字段类型
https://blog.csdn.net/u010002184/article/details/79354136
-
MySQL DML语句
https://www.cnblogs.com/xiaomaomao/p/13235899.html