首页 > 数据库 >mysql 8.0版本 秒级别加列

mysql 8.0版本 秒级别加列

时间:2024-02-23 09:45:26浏览次数:28  
标签:8.0 table1 INSTANT -- 加列 mysql test TABLE id

假设有一个名为test_table的MySQL 8.0表,目前没有任何数据,我们想要在某一列之后添加一列created_at,类型为TIMESTAMP,并设定为记录每行插入时的秒级别时间戳,使用ALGORITHM=INSTANT进行在线添加列的操作。以下是测试案例:

 

-- 首先,创建一个测试表
CREATE TABLE `test_table1` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `name` VARCHAR(100),
    `email` VARCHAR(100)
) ENGINE=InnoDB;

-- 插入一些测试数据(假设已有)
INSERT INTO `test_table1` (`name`, `email`) VALUES
('User1', '[email protected]'),
('User2', '[email protected]');

-- 开始测试案例:在线添加一列`created_at`,并设定默认值为当前时间(秒级别)
SET SESSION sql_mode = 'ALLOW_INVALID_DATES'; -- 允许未来的日期

BEGIN;
ALTER TABLE `test_table1`
ADD COLUMN `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间' AFTER `email`,
ALGORITHM=INSTANT;
COMMIT;


ALTER TABLE `test_table1` ADD COLUMN `device_id` varchar(128) NOT NULL DEFAULT '' COMMENT '设备id' AFTER `name`, algorithm=instant;

ALTER TABLE  `test_table1` ADD COLUMN `device_id1` varchar(128) NOT NULL DEFAULT '' COMMENT '设备id' AFTER `name`,
 ADD INDEX `idx_cdkey_deviceid`(`email` ASC, `device_id1` ASC) USING BTREE, algorithm=instant;


ALTER TABLE `underground_server`.`user_cdkey` ADD COLUMN `device_id` varchar(128) NOT NULL DEFAULT '' COMMENT '设备id' AFTER `user_name`,
 ADD INDEX `idx_cdkey_deviceid`(`cdkey` ASC, `device_id` ASC) USING BTREE, algorithm=instant;


-- 验证添加列结果
DESCRIBE `test_table1`;
SELECT * FROM `test_table`;

-- 清理测试数据
TRUNCATE TABLE `test_table`;

 

注意事项:

 

  • CURRENT_TIMESTAMP(0)指定了精度为秒级的时间戳。
  • 使用BEGINCOMMIT包裹DDL操作是为了模拟事务环境下的在线DDL。
  • 虽然在这个简单的例子中我们试图使用ALGORITHM=INSTANT,但在实际操作中,MySQL是否能成功使用INSTANT算法还需视具体情况而定,特别是表中的已有数据量、表结构和MySQL服务器的配置。

 

如果在实际环境中执行上述操作时依然收到类似"1845 - ALGORITHM=INSTANT is not supported"的错误,说明此操作无法使用INSTANT算法,应移除该选项或改用其他支持的算法。

标签:8.0,table1,INSTANT,--,加列,mysql,test,TABLE,id
From: https://www.cnblogs.com/wzljy/p/18028679

相关文章

  • 入门mysql
    #查询有多少数据库指令showDATABASESshowdatabases;#创建数据库指令CreateDATABASE名字createdatabasemeasurement;#创建好数据库想要显示数据库信息showcreatedatabasemeasurementshowcreatedatabasemeasurement;#显示的是默认的编码格式......
  • MySQL笔记
    MySQL拓展笔记三范式理解第一范式:所有列原子不可分第二范式:一行数据要有一个唯一标识该行的字段(比如主键)第三范式:要求表中每列都和主键列直接相关常用函数IFNULL(exp1,exp2)、IF(exp1,exp2,exp3)、ISNULL(exp)SELECT employee_id,-- 1.判断是否为null,如果为null则展示0,......
  • docker中mysql容器中配置时区
    mysql在docker容器中跑默认是取系统时区的,所以一般是UTC的时区,也就是说在中国的话,会比实际时间小8个小时。所以可以在环境变量中配置时区,我这里是通过docker-compose.yml中配置,如下图:[root@localhostmysql8]#catdocker-compose.ymlversion:'3'services:mysql8:......
  • MySQL进阶语法【视图 触发器 事务 存储过程 流程控制】
    MySQL进阶语法【一】视图【1】概念在MySQL数据库中,视图(View)是虚拟的表,其内容是基于执行特定查询所得到的结果集。视图是通过查询来定义的,它可以包含一个或多个表中的特定列,也可以包含计算字段、聚合函数等。视图并不实际存储数据,而是动态地从基本表中获取数据并进行组合,每当......
  • MySQL 多表查询 - 缺练习解析
    多表查询【一】概要(1)联表查询innerjoin:内连接--innerjoin/join#拼接两张表中共有的数据部分select*from表2innerjoin表1on表2.字段=表1.字段;leftjoin:左外连接--leftjoin#返回左表中的所有行,以及右表中与左表中相匹配的行。如果右表中没......
  • flink实时读取kafka数据到mysql flink 读取kafka 依赖 Flink 1.8.0
    flink实时读取kafka数据到mysqlflink读取kafkaFlink提供了Kafka连接器,用于从或向Kafka读写数据。本文总结Flink与Kafka集成中的问题,并对一些疑点进行总结和梳理。问题一:读Kafka的方式登录后复制##读取一个TopicFlinkKafkaConsumer010#FlinkKafkaConsumer010(Stringtopi......
  • mysql面试高频问题---聚簇索引与非聚簇索引
    聚簇索引与非聚簇索引1.问题?什么是聚簇索引与非聚簇索引什么是聚集索引?什么是二级索引(非聚集索引)?什么是回表?2.聚簇索引聚集索引选取规则:1.如果存在主键,主键索引就是聚集索引。2.如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引。3.如果表没有主键,或没有......
  • mysql面试高频问题---覆盖索引
    覆盖索引1.问题覆盖索引是指查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到。判断下面的SQL哪些是覆盖索引,为什么?select*fromtb_userwhereid=1是,因为根据id查询的,id默认是主键索引,就是聚簇索引,聚簇索引中对应的是整行的记录selectid,namefromtb_us......
  • mysql面试高频问题---索引
    索引1.问题?什么是索引索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构(B+树),这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。维护树的数据结构,提高......
  • mysql面试高频问题---慢查询如何定位和优化⬆️
    优化-sql执行很慢,如何解决聚合查询:新增临时表多表查询:优化sql语句结构表数据量过大查询:添加索引深度分页查询解决方案一个SQL语句执行很慢,如何分析?可以采用EXPLAIN或者DESC命令获取MySQL如何执行SELECT语句的信息展示SQL执行的情况,部分字段说明如下:个人测试总结......