首页 > 数据库 >lightdb mysql 8.0兼容之不可见主键

lightdb mysql 8.0兼容之不可见主键

时间:2024-05-16 15:32:29浏览次数:21  
标签:8.0 postgres ltapk -- t1 mysql 主键 lightdb

  数据库设计通常需要满足一定的范式要求,其中主键更是最基本的要求。不过,数据库管理系统却允许我们创建没有主键的表。这样的表在数据库中会带来查询性能低下、复制延迟甚至无法实现高可用配置等问题。

  为此,lightdb在22.1版本引入了一个新的功能,叫做不可见主键(Generated Invisible Primary Keys),它可以自动为没有显式指定主键的表创建一个不可见的主键。其用法是建表时指定WITH PRIMARY KEY语法,表示创建一个表,含有ltapk自增主键。如下:

-- 建表指定自增主键
postgres@postgres=# create table t1(a int) with primary key;
CREATE TABLE
-- 查询表t1, ltapk列为隐藏列
postgres@postgres=# select * from t1;
 a 
---
(0 rows)
-- 插入数据
postgres@postgres=# insert into t1 values(1);
INSERT 0 1
postgres@postgres=# insert into t1 values(2);
INSERT 0 1
postgres@postgres=# select * from t1;
 a 
---
 1
 2
(2 rows)
-- 显示指定ltapk列
postgres@postgres=# select a,ltapk from t1;
 a | ltapk 
---+-------
 1 |     1
 2 |     2
(2 rows)

ltapk字段在select *,insert into t values()等未明确指定字段的增删改查中是不可见的,所以现有系统增加不可见隐藏字段完全无侵入。但是能解决基于主键批量同步或者复制时无法唯一标识记录问题。

mysql 8.0也有一个对应的特性,通过参数sql_generate_invisible_primary_key控制,详见https://blog.itpub.net/70027826/viewspace-3010838/。 注:在做这个功能时,其实我们并不是针对兼容mysql去的,那会儿还没有专门去看mysql有没有这个特性,是因为我们有客户基于id变更复制的需求。 详见:https://www.light-pg.com/docs/lightdb-cn/current/sql-createtable.html 其他实用特性还包括,不可见自动更新时间戳。with update current_tiemstamp

标签:8.0,postgres,ltapk,--,t1,mysql,主键,lightdb
From: https://www.cnblogs.com/lightdb/p/18196036

相关文章

  • lightdb数据库超时相关控制参数
    在业务开发中,通常因为代码不规范、中间件缺陷、DBA误提交批量SQL等原因,会导致服务端连接一直存在、但是实际上并未在执行的情况,从而导致数据库连接泄露。为了防止这种异常情况积压,lightdb中包含了多个参数用于控制超时相关的行为:lock_timeout:控制多久拿不到锁就自动超时并回......
  • 对我国新老房屋建筑抗震性的一些思考 —— 2008年5月12日14时28分四川汶川发生8.0级地
    相关:https://baijiahao.baidu.com/s?id=1798811689519570294对我国新老房屋建筑抗震性的一些思考有些事情虽然过去很久了,但是我们依然不能遗忘。抗震,是我们这个时代要面临的问题,在以前经济条件不好的年代,人们对于抗震这个事情并没有太多的要求,但是慢慢随着经济的好转,人们对更......
  • Python-PostgreSQL主键自动填充报错:SAWarning: Column x is marked as a member of th
    importdatetimefromsqlalchemyimportColumn,String,inspect,Integerfromsqlalchemy.ext.declarativeimportdeclarative_basefromsqlalchemy.ormimportsessionmakerfromsqlalchemyimportcreate_engineengine=create_engine(DATABASE_URL)Base=decla......
  • centOS8上安装Mysql 8.0.26
    1、Mysql官网下载RPM包wgethttps://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm2、检查是否已安装(强力卸载)foriin$(rpm-qa|grepmysql);dorpm-e$i--nodeps;donerm-rf/var/lib/mysql&&rm-rf/etc/my.cnf&&rm-rf/usr/share/mysql备注:可配合......
  • dokcer-compose.yml 方式运行 mysql 8.0
    先不映射指定配置目录,./conf/mysql,docker容器开起来后,复制容器内/etc/mysql到宿主机,然后添加目录映射:-"./conf/mysql:/etc/mysql",这样就可以将配置里保存在宿主机了。version:'3.0'networks:mysql_network:name:mysql_networkexternal:trueservices:......
  • mysql8.0数据库添加用户和授权
    MySql8有新的安全要求,不能像之前的版本那样一次性创建用户并授权需要先创建用户,再进行授权操作1.创建新用户createuser'username'@'host'identifiedby'password';其中username为自定义的用户名;host为登录域名,host为'%'时表示为任意IP,为localhost时表示本机,或者填写指......
  • Tensorflow object detection API (ubuntu18.04) 安装和踩坑;
    踩坑:将slim和models路径加入虚拟环境中;将slim和models路径加入系统路径中;(加入系统路径的时候,这个pwd) qit(持续更新)具体安装流程:(很多问题)2.0版本;(继续更新)condacreate-ntf_obj_det_api_v2python=3.8 (很丝滑)重新尝试tf1.0版本;参考:https://blog.csdn......
  • mybatis获取自增主键
    获取自增主键实体对象设置主键自增,插入到数据库后拿到主键ID。数据库使用的是mysql。useGeneratedKeys非常简单的实现:mapper接口publicinterfaceUserMapperextendsBaseMapper<User>{intinsertUser(Useruser);}mapper文件<mappernamespace="com.oracat.moe.......
  • VMware ESXi 8.0U2b macOS Unlocker HP (惠普) HPE (慧与) OEM 定制版自定义镜像
    VMwareESXi8.0U2bmacOSUnlockerHP(惠普)HPE(慧与)OEM定制版自定义镜像ESXi8.0U2标准版,Dell(戴尔)、HPE(慧与)、Lenovo(联想)、Inspur(浪潮)、Cisco(思科)、Hitachi(日立)、Fujitsu(富士通)、NEC(日电)OEM定制版请访问原文链接:VMwareESXi8.0U2bmacOSUn......
  • VMware ESXi 8.0U2b macOS Unlocker Dell (戴尔) OEM 定制版自定义镜像 A06
    VMwareESXi8.0U2bmacOSUnlockerDell(戴尔)OEM定制版自定义镜像A06ESXi8.0U2标准版,Dell(戴尔)、HPE(慧与)、Lenovo(联想)、Inspur(浪潮)、Cisco(思科)、Hitachi(日立)、Fujitsu(富士通)、NEC(日电)OEM定制版请访问原文链接:VMwareESXi8.0U2bmacOSUnlocke......