记录一个在工作中遇到的问题,也不算是问题,为的是找一种简便的方法批量修改数据表字段的排序规则,在MySQL中叫collation,常常和编码CHARACTER一起出现的。...collation有三种级别,分辨是数据库级别,数据表级别和字段级别。...网上搜到的解决办法,都提到了修改数据表级别collation排序规则。...但是我遇到的场景是数据表级别已经是utf8_unicode_ci,而字段级别是utf8_general_ci,(这里我们关心的字段类型是varchar)。...由于需要修改的字段太多了,手工修改肯定是费时费力的。自然也想到了用脚本的方式批量修改,但是发现这种通过查找MySQL信息表、过滤、拼接生成批量修改的语句太好用了,而且还能做到针对varchar类型。
背景 修改Varchar 的大小的时候。不用锁表,就可以进行操作DDL。这个还得具体查看版本,还有具体情况。下来我们来看一下INnoDB中的Online DDL各个操作请求。...在5.6 里面执行DDL 根本没有单独操作Varchar这个字段类型。...所以说在5.6中执行varchar的更改还是会锁表,copy数据 还有就是就算是5.7 不锁表还是有条件的 扩展VARCHAR列大小 ALTER TABLE tbl_name CHANGE...注意 一个的字节长度VARCHAR列是依赖于字符集的字节长度 。 减少VARCHAR使用就地尺寸ALTER TABLE不被支持。减小VARCHAR 大小需要表副本(ALGORITHM=COPY)。...总结 在数据量很大的时候,varchar通过Online DDL做到快速进行更改字段长度。但是前提条件就是不会进行锁表和copy数据的过程。 这个前提条件就是数据库的支持5.7及5.7以上。
MySQL修改表的字段 MySQL 修改表字段的方法有两种: ALTER TABLE MODIFY COLUMN。...其语法如下: ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型; 其中,表名 表示要修改的表名,字段名 表示要修改的字段名,字段类型 表示修改后的字段类型。...例如,修改表 users 的字段 username 的类型为 VARCHAR(50),可以使用以下 SQL 语句: ALTER TABLE users MODIFY COLUMN username VARCHAR...其语法如下: ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型 [属性]; 其中,表名 表示要修改的表名,字段名 表示要修改的字段名,字段类型 表示修改后的字段类型,属性 表示修改后的字段属性...例如,将表 users 中的字段 age 的数据类型修改为 INT,并设置默认值为 0,可以使用以下 SQL 语句: ALTER TABLE users MODIFY COLUMN age INT DEFAULT
在这篇文章中,我将为你解析如何在MySQL数据库中,对VARCHAR类型的日期字段进行筛选。这是一个在数据库设计中经常遇到的问题,尤其是当日期被保存为字符串格式时。...你是否也在搜索“MySQL VARCHAR日期筛选”、“如何在MySQL中筛选字符串日期”等关键词?不用再找了,这里有你想要的答案! 引言 在数据库设计中,选择合适的字段类型非常重要。...正确筛选VARCHAR日期字段的方法 ️ 为了正确筛选VARCHAR日期字段,我们可以使用MySQL的 STR_TO_DATE 函数: -- 考虑日期和时间 SELECT * FROM your_table_name...总结 虽然使用VARCHAR字段来存储日期和时间提供了灵活性,但它也带来了筛选数据的挑战。幸运的是,通过使用MySQL的内置函数,我们可以有效地解决这个问题。...希望这篇文章帮助你解决了在MySQL中筛选VARCHAR日期字段的问题! 参考资料 MySQL官方文档 - STR_TO_DATE函数: 链接 日期和时间的存储选择: 链接
规范总结 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用 MySQL 保留关键字【设计表后逐一排查】 所有表必须使用 Innodb 存储引擎,数据库和表的字符集统一使用...UTF8 所有表和字段都需要添加注释 禁止在数据库中存储图片,文件等大的二进制数据 【通常存储于文件服务器,数据库只存储文件地址信息】 优先选择符合存储需要的最小的数据类型【能用整型就不要用字符串...所有表和字段都需要添加注释 使用 comment 从句添加表和列的备注,从一开始就进行数据字典的维护 /*表: user_info*/------------------ /*列信息*/-------...禁止在数据库中存储图片,文件等大的二进制数据 通常文件很大,会短时间内造成数据量快速增长,数据库进行数据库读取时,通常会进行大量的随机 IO 操作,文件很大时,IO 操作很耗时。...通常存储于文件服务器,数据库只存储文件地址信息 数据库字段设计规范 1.
查看获取表内字段注释: > show full columns from tablename; 或是 show full fields from tablename; 或是,在元数据的表里面看...字段名 查看表注释的方法: > show create table tablename; 获取整个数据库的所有表信息(包含表名,表注释,表类型等等): > SELECT table_name...INFORMATION_SCHEMA是信息数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息....修改表的注释: alter table test1 comment '修改后的表的注释'; 修改字段的注释: alter table test1 modify column field_name...int comment '修改后的字段注释';
命名规范表名、字段名必须使用小写字母或数字,不使用英文缩写长一点没关系,最好能让别的开发见名知意主键索引名:pk字段名 唯一索引名:uk字段名 普通索引名: jdx_字段名选择合适的字段类型尽可能选择存储空间小的字段类型...存储的字符串长度几乎相等,使用char定长字符串类型varchar可变长度的字符串,长度不要超过5000如果存储的值太大,将字段类型修改为text,同时单独一张表,用主键与之对应选择合适的字段长度优化数据的存储空间...优先考虑逻辑删除,而不是物理删除物理删除数据恢复困难物理删除会使主键不再连续核心业务表的数据不建议做物理删除每个表都需要的通用字段不一样的通用字段的英文不一样叫法,但是都是规范中建议的id...20个,表的字段过多,表中保存的数据可能会很大,查询的效率会降低。...,一般要加索引单表的索引不超过5个区分度不高的字段,不添加索引(性别)避免索引失效的情况(mysql的内置函数)索引过多,选用联合索引优化不使用外键关联使用外键存在性能问题、并发死锁问题、使用起来不方便等
很多时候我们看到一些表字符串类型的字段定义为varchar(255),开始以为varchar只能定义为255这个长度值,其实不然。...官方文档所说,varchar有效的最大长度取决于行的容量,以及用的字符集,整行的所有列的定义长度不能超过65535字节(bytes),text、blob等大字段类型除外, P.S. https://dev.mysql.com...一般情况下,我们用的是InnoDB引擎,utf8则是常用字符集,因此varchar类型字段定义为255比较合适。...但实际上,varchar(255)并不是最优的字符定义长度,究竟定成多少,还是要根据实际需求来决定,例如这个字段我就不需要创建索引,定义超过255,是可以的,只能说255是常规情况下较少出错的一个值。...小白学习MySQL, 《小白学习MySQL - 变通创建索引的案例一则》 《小白学习MySQL - “投机取巧”统计表的记录数》 《小白学习MySQL - 一次慢SQL的定位》 《小白学习MySQL -
环境: MySQL数据库 库名:db_name 表名: table_name1 table_name2 查询一个里面所有表的信息: use information_scheam; select * from...tables where table_schema = "db_name"; 查询单个表的信息: use information_scheam; select * from tables where...table_schema = "db_name" and table_name = "table_name1"; 查询一张表的所有字段信息: use db_name; show full columns...author varchar(50); # 修改表字段备注信息 alter table book modify column author varchar(50) comment '作者姓名'; #...给表增加新字段 alter table book add publisher varchar(100) comment '出版社'; # 在指定列后面增加新字段 alter table book add
很多时候我们看到一些表字符串类型的字段定义为varchar(255),开始以为varchar只能定义为255这个长度值,其实不然。...官方文档所说,varchar有效的最大长度取决于行的容量,以及用的字符集,整行的所有列的定义长度不能超过65535字节(bytes),text、blob等大字段类型除外, P.S. https://dev.mysql.com.../doc/refman/5.7/en/char.html 《小白学习MySQL - 变通创建索引的案例一则》提到了, InnoDB,如果需要建索引,就不能超过767bytes,utf8编码,255*3...一般情况下,我们用的是InnoDB引擎,utf8则是常用字符集,因此varchar类型字段定义为255比较合适。...但实际上,varchar(255)并不是最优的字符定义长度,究竟定成多少,还是要根据实际需求来决定,例如这个字段我就不需要创建索引,定义超过255,是可以的,只能说255是常规情况下较少出错的一个值。
MySQL 大表数据添加新字段 有时候我们在测试环境给一个表添加字段,但是在线上环境添加一个字段,却极其的慢。...原因是线上的数据库一般会存有大量的数据(百万级,千万级),基本的添加字段方式在线上数据库已经不太合适了。...> alter table user add column flag tinyint(1) default 0; 基本添加方式,大量数据的表不推荐。...,导致新表数据流失不完整 总结 生产环境MySQL添加或修改字段主要通过如下四种方式进行,实际使用中还有很多注意事项 直接添加 如果该表读写不频繁,数据量较小(通常1G以内或百万以内),直接添加即可(可以了解一下...,切换后再将其他几个节点上添加字段 将现有MySQL版本5.7升级到8.0.12之后的版本 相关文章 Mysql事务 Mysql中的索引 Mysql通过binlog恢复数据
mysql表的设计规范 1、单实例表的数量必须控制在2000个以内。 2、表分表的数量必须控制在1024个以内。 3、表必须有主键,建议使用UNSIGNED整数作为主键。...潜在坑:删除无主键表,如果是row模式的主从架构,会挂在库里。 4、禁止使用外键。如果要保证完整性,应该通过应用程序来实现。...实例 create table class( major varchar(16) comment '专业', name char(8) comment '班级名', nums int... comment '人数' ); 以上就是mysql表的设计规范,希望对大家有所帮助。...更多mysql学习指路:Mysql 收藏 | 0点赞 | 0打赏
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource import org.slf4j.LoggerFactory import org.springframework.stereotype.Service...import java.sql.* import java.util.* import javax.sql.DataSource @Service class Mysql2OdpsService {...= getTableFields(table, dataSource) return ddl(table, fields) } /** * 获取数据库全部表...finally { close(conn, null, rs) } return result } /** * 获取数据库表所包含的字段...result.add(fieldInfo) } } catch (e: Exception) { logger.error("获取数据库表所包含的字段
根据库名获取所有表的信息 SELECT * FROM information_schema....`TABLES` WHERE TABLE_SCHEMA = 'erp'; view: 根据库名获取所有的字段信息 SELECT TABLE_SCHEMA AS '库名', TABLE_NAME...AS '表名', COLUMN_NAME AS '列名', ORDINAL_POSITION AS '列的排列顺序', COLUMN_DEFAULT AS '默认值',...COLUMNS` WHERE TABLE_SCHEMA = 'erp' ORDER BY TABLE_NAME, ORDINAL_POSITION; view: 根据库名获取所有的库和表字段的基本信息...,故想了另外一种方式,供参考,如下 执行存储过程 CREATE PROCEDURE ShowTableDesc(tablename VARCHAR(200)) BEGIN SELECT t2.
需求: 已有的mysql数据表,希望增加一个自增的字段,并设置新数据的初始值。 实际上不复杂,只是做个备忘。...测试表 CREATE TABLE `t_abc` ( `name` varchar(20) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 测试数据...: INSERT INTO `t_abc` (`name`) VALUES ('mike'), ('tom'), ('jack'); 添加自增字段并设置新数据的起始值 /*增加一个自增主键字段,...,但值为空*/ /*执行这一条,它会自动为已存在的数据的自增字段赋初值,从1开始,同时将后续新增的数据从100开始*/ alter table t_abc auto_increment=100; 修改已有数据初始值...1开始的初始值,其实隐含的设置当前表自增字段从1开始*/ alter table t_abc auto_increment; /*将所有数据增加10000*/ update t_abc set id=
mysql修改表、字段、库的字符集 修改数据库字符集: ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE …]...; ALTER DATABASE apolloConfigdb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 把表默认的字符集和所有字符列...(CHAR,VARCHAR,TEXT)改为新的字符集: ALTER TABLE tbl_name CONVERT TO CHARACTER SET character_name [COLLATE …]...如:ALTER TABLE logtest CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 只是修改表的默认字符集: ALTER...character_name [COLLATE…]; 如:ALTER TABLE logtest DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 修改字段的字符集
这包括;库表创建规范、字段的创建规范、索引的创建规范以及SQL使用的相关规范,通过这些内容的讲解,让读者更好使用 MySQL 数据库,创建出符合规范的表和字段以及建出合适的索引。...包括;表的引擎、命名约束、字段长度、金额类型、更新时间、索引字段、组合索引等内容,方便大家学习以后,可以基于这些字段的规范演示讲解,在自己创建库表的时候有个参考对照,尽可能创建出性能更佳的库表和索引。...二、库表规范 为了能让读者更加清晰地看到这些相关规范都是如何体现的,小傅哥这里准备了个大图,把库表字段和规范全部整合在一起,方便学习使用。...如下; 如上所列规范包括:建表相关规范、字段相关规范、索引相关规范、使用相关规范。 1. 建表相关规范 库名、表名、字段名,使用小写和下划线 _ 分割 库名、表名、字段名,不超过12个字符。...索引相关规范 要求有自增ID作为主键,不要使用随机性较强的 order_id 作为主键,会导致innodb内部page分裂和大量随机I/O,性能下降。
/** * 读取mysql某数据库下表的注释信息 * * @author xxx */ public class MySQLTableComment { public static Connection...getMySQLConnection() throws Exception { Class.forName("com.mysql.jdbc.Driver"); Connection...return conn; } /** * 获取当前数据库下的所有表名称 * @return * @throws Exception *...); stmt.close(); conn.close(); return tables; } /** * 获得某表的建表语句...; } stmt.close(); conn.close(); return map; } /** * 获得某表中所有字段的注释
' and table_type='base table' and table_name like '%_copy'; information_schema 是MySQL系统自带的数据库,提供了对数据库元数据的访问...information_schema.tables where table_type=’base table’ and table_name like ‘%_copy’; 在Informix数据库中,如何查询表名中包含某字段的表...select * from systables where tabname like 'saa%' 此法只对Informix数据库有用 查询指定数据库中指定表的所有字段名column_name select...’ group by table_schema; mysql中查询到包含该字段的所有表名 SELECT TABLE_NAME FROM information_schema.COLUMNS WHERE...COLUMN_NAME='字段名' 如:查询包含status 字段的数据表名 select table_name from information_schema.columns where column_name
相关文章: MySQL高性能表设计规范:http://www.jianshu.com/p/f797bbe11d76 MySQL EXPLAIN详解:http://www.jianshu.com/p/ea3fc71fdc45...255 适合:存储很短的字符串,或者所有值接近同一个长度;经常变更 慷慨是不明智的 使用VARCHAR(5)和VARCHAR(200)存储'hello'的空间开销是一样的。...单独的表也能使用更有效的索引策略。 混用范式化和反范式化 在实际应用中经常需要混用,可能使用部分范式化的 schema 、 缓存表,以及其他技巧。 表适当增加冗余字段,如性能优先,但会增加复杂度。...,即数据表不能有沉余字段; 备注:必须先满足第二范式; 2.表字段少⽽精 I/O高效 字段分开维护简单 单表1G体积 500W⾏行评估 单⾏行不超过200Byte 单表不超过50...个INT字段 单表不超过20个CHAR(10)字段 建议单表字段数控制在20个以内 拆分TEXT/BLOB,TEXT类型处理性能远低于VARCHAR,强制生成硬盘临时表浪费更多空间。
领取专属 10元无门槛券
手把手带您无忧上云