触发器+mysql
杨净 发自 凹非寺
量子位 | 公众号 QbitAI
面向OLTP核心场景的里程碑版本,OceanBase刚刚更新:
OceanBase 4.2.1 LTS。
这是首个长期支持、可规模化使用的一体化数据库,具备OLTP完整的核心功能。
![](https://p0.ssl.img.360kuai.com/t013ebce6885244a338.jpg)
而且性能更强——
TP性能是3.2版本的1.9倍;AP性能是3.2版本的2.7倍。
更低的容灾成本——
仲裁无损容灾,2个副本实现RPO=0。什么概念?意味着通过仲裁机制和2个副本,数据库宕机后立马恢复,不会遭到任何数据丢失。
除此之外,发布会现场还释放了一个惊喜彩蛋!那就是列存能力上的最新进展:OceanBase列存实验室版本展示。
在与业界业内顶流列存数据库ClickHouse跑分PK中,结果不仅性能处于同一水平,甚至还快了那么一点点。
![](https://p0.ssl.img.360kuai.com/t019f040bd7b2c3c707.jpg)
△OceanBase 列存实验室版本 vs. ClickHouse 23.11.1.238
同时,有关OceanBase背后的产品战略也由此浮出水面。
面向OLTP的全功能里程碑版本
既如此,就来看看这个号称“里程碑”版本的OceanBase 4.2.1 LTS。
首先,内核能力方面,主要包括三种特性。
第一,支持一体化产品能力,包括混合负载,支持Auto DOP(自动设置并行度)和SPM(执行计划管理)。要知道,这两个功能对企业用户执行复杂查询非常重要。
还有多模能力,即多模数据支持,无论应用简单or复杂,处理的数据类型是非结构还是关系型,都能在同个数据库上获得支持。比如KV、Json,也把LOB的上限提升到512MB。
第二,支持一体化SQL和事务的能力,实现任意大小的事务无限制,并且实现全功能的DDL。
第三,高可用,既支持与传统集中式数据库完全对标的单机主备库方式,也能通过仲裁,以两个副本的成本实现RPO=0。
![](https://p0.ssl.img.360kuai.com/t0193353c1123f52bda.jpg)
在兼容性上,OceanBase 4.2.1 LTS版本进一步增强了MySQL 8.0、Oracle的兼容性,支持DBLink、表锁等Oracle常见的特性。
工具能力上,可以说为关键业务场景提供了多任务多场景的工具,以支持业务稳定负载。
- OMS,支持双向同步一键逃生;
- ODC,企业级协同开发平台;
- OCP,全场景管控;
- OAS,智能诊断自治服务。
除此之外,还支持单机模式,可以根据业务需求随时切换扩展。
事实上,此次一体化数据库4.2.1的发布是去年OceanBase 4.0的延续。
而OceanBase 4.0的核心在于单机分布式一体化架构,这是OceanBase耗时三年自研的创新技术,研究成果还在顶会VLDB发表。
它可以实现“一套系统,就能实现从单机到分布式对用户完全透明”,业务可大可小,平滑压缩”。
简单来说,就是业务处理的可扩展性和灵活性。当业务小的时候,一个单机就可以解决问题;但当业务发展之后,也可以无缝扩展到分布式;而要是出现业务萎缩,也可以随时回到单机,不受任何影响,也减少了资源占用。
这样一来,即便是小小的树莓派,也可以直接单机部署,不但可以通过单机主备模式满足高可用业务诉求,还可以用仲裁机制实现数据强一致的高可用。
于是经过一年的部署,OceanBase一体化数据库实现了从架构到产品的跨越。
与之背后的“一体化”产品战略也一并揭晓。
当下,随着数据量呈现爆发式增长,海量数据高并发的问题层出不穷,数据处理的需求也变得日益复杂。
若是企业面对不同问题采用不同数据库,那么数据的垂类和管理就会变得更加复杂。
面向关键业务负载,OceanBase的一体化产品战略也就应运而生——
用一体化解决数据库的使用复杂度,实现“一个数据库解决80%的问题”。
支持任意数据规模、不同数据类型、多兼容模式,以及任意基础设施甚至跨基础设施部署。
不过需要注意的是,这里的80%意味着这个产品战略并不绝对,也并非代表不赞同做专门的数据库,也并非完全支持一体化。
发布会现场CEO杨冰表示,只是现阶段认为一体化数据库的价值比专门数据库更大。
事实上,近几年来业内已开始了不少数据库一体化的相关探索,一体化也已成为业内共识。
一个数据库解决80%的问题
整场发布听到最多,也就是OceanBase一直以来的立身之本,即服务业务、应用驱动。
也正如OceanBase首席科学家阳振坤所言,数据库是用出来的。
因此之所以提出一体化产品战略,本质还是为用户做出更好的性能以及更低的成本。
目前实际测试数据显示,最新版本OceanBase,在4C、8C、16C等中小规格的单机场景中,OceanBase的sysbench综合性能高于MySQL 8.0。
在分布式形态下,此前曾获TPC-C、TPC-H双料第一,前者测试更是以破世界纪录的形式一鸣惊人,打破甲骨文长达9年的霸榜垄断。
而据Forrester 对OceanBase 总体经济影响的调研显示,采用OceanBase后企业数据存储空间节约 70%、服务器资源节约 85%、平均每注册用户数据库成本节约 50%,且成本节约呈现递增的趋势。
如今OceanBase数据库已服务超过1000家行业客户,客户数年增长150%,其中30%客户将其应用于核心系统。
不过即便是用户需求驱动,也难有企业能有底气提出“一个数据库解决80%的问题”。
![](https://p0.ssl.img.360kuai.com/t01f6691c6c53ee1ef5.jpg)
如果注意到的话,他们提到一体化产品策略是持续践行,而非是首次提出。
从2010年开始,从他们选择完全自研、从头写代码的那时候开始,就一直践行着一体化的产品理念。
当时开源数据库MySQL很流行,但始终存在两个弊端:无法做复杂查询、以及扩展性也不强,无法应对更多复杂、实时的数据处理。
MySQL后面的故事也都知道,被Oracle收购、创始人另起炉灶,但难续往日辉煌,令人唏嘘。
![](https://p0.ssl.img.360kuai.com/t01d96a38bd56d17dec.jpg)
于是为了更多复杂需求、为了长期可持续地发展,他们选择完全自研,将核心代码能力掌握在自己手里,才能根据用户需求灵活迭代,将更多产品场景一体化。
如今OceanBase很多核心能力,都是基于这样的思路而诞生的。
比如像TP跟AP合二为一,至少可以解决很多业务实时报表的问题;
还有将无损故障修复时间(RTO)缩短到8秒,传统数据库是不会承诺无损故障修复的,这也是目前业界最优水平。
以及解决了压缩与性能的问题,以往数据库压缩,数据库会受到很大影响,但现在性能反而提升了。
当然更显而易见地,还是在OceanBase前几次版本迭代里,早早就透露出他们一体化产品理念。
OceanBase 1.0版本,实现工程一体化,并提供多租户以及资源隔离能力,可更多数据库实例整合到一个集群中。
OceanBase 2.0版本,提供多兼容模式,高度兼容Oracle和MySQL,支持存储过程、触发器等高级特性。
OceanBase 3.0版本,支持多工作负载,用户无需关心ETL复杂性。
OceanBase 4.0版本,因为看到很多中小企业对分布式数据库需求,所以重构、升级系统,于是单机一体化架构正式推出,TP与AP能力统一,支持多种数据类型、云上云下兼备,按需选择基础设施。
发布会最后,OceanBase公布了产品路线图。按照计划,明年4月份将发布OceanBase4.3,也就是此次列存实验室版本的正式版。半年之后,将发布OceanBase4.4,支持存储计算分离能力。
![](https://p0.ssl.img.360kuai.com/t010f2812d577e89c9b.jpg)
可以看到,中国数据库正在建设自己的加速度。
— 完 —
量子位 QbitAI · 头条号签约
","gnid":"9f34da2fbc0cb74b2","img_data":[{"flag":2,"img":[{"desc":"","height":"579","title":"","url":"https://p0.ssl.img.360kuai.com/t013ebce6885244a338.jpg","width":"868"},{"desc":"","height":"579","title":"","url":"https://p0.ssl.img.360kuai.com/t019f040bd7b2c3c707.jpg","width":"868"},{"desc":"","height":"474","title":"","url":"https://p0.ssl.img.360kuai.com/t0193353c1123f52bda.jpg","width":"1080"},{"desc":"","height":"720","title":"","url":"https://p0.ssl.img.360kuai.com/t01f6691c6c53ee1ef5.jpg","width":"1080"},{"desc":"","height":"400","title":"","url":"https://p0.ssl.img.360kuai.com/t01d96a38bd56d17dec.jpg","width":"900"},{"desc":"","height":"483","title":"","url":"https://p0.ssl.img.360kuai.com/t010f2812d577e89c9b.jpg","width":"1080"}]}],"original":0,"pat":"art_src_3,fts0,sts0","powerby":"pika","pub_time":1700206080000,"pure":"","rawurl":"http://zm.news.so.com/c5147d93f6a315efbc1f2e587244d320","redirect":0,"rptid":"6c67094bac3f580b","rss_ext":[],"s":"t","src":"量子位","tag":[{"clk":"ktechnology_1:mysql","k":"mysql","u":""}],"title":"OceanBase数据库炸场!具备OLTP完整核心功能,产品战略浮出水面
尚妻彭3220mysql 的游标和触发器 -
富饲官17566178727 ______ 2.游标 游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中的数据进行各种操作,然后将操作结果写回数据表中.游标是系...
尚妻彭3220在数据库中如何创建触发器 -
富饲官17566178727 ______ 创建触发器的语句: CREATE TRIGGER <触发器名称> <-- { BEFORE | AFTER } { INSERT | UPDATE | DELETE } ON <表名称> FOR EACH ROW <触发器SQL语句> 这个只能在mysql5.0中可以创建
尚妻彭3220怎么在Dbeaver中创建mysql 触发器 -
富饲官17566178727 ______ 在Dbeaver中创建mysql 触发器的方法:1、打开数据库导航,找到public节点,找到views节点,打开:2、右键:新建view:3、填写触发器信息并保存
尚妻彭3220mysql触发器写法?
富饲官17566178727 ______ 引用 2 楼 的回覆:for each rowbegin if (select count(*) from A)>=10000 thencreate trigger TRI_TEST delete from A where ID=(select min(ID) from A)before insert on A end ifend
尚妻彭3220写入mysql数据库的触发器是怎么修改?
富饲官17566178727 ______ drop TRIGGER [触发器名]--删除触发器 go CREATE TRIGGER [触发器名] ON [表名] --创建触发器 FOR insert AS --写你要执行的代码
尚妻彭3220在mysql中如何查看和修改触发器的代码?请问各位大师,小弟先谢谢了!!!!!!!!! -
富饲官17566178727 ______ mysql中,触发器只能查看,无法修改,如果要修改,只能删除原有的触发器,重新创建触发器,以达到修改的目的.工具:Navicat Premiu 步骤:1、正确安装Navicat Premiu,并确保连接到指定的数据库.2、以连接本地数据库localhost中的badkano数据库为例.3、点击软件上方的查询-新建查询.4、先执行SHOW TRIGGERS,查看数据库中的触发器.5、如果要修改触发器,需要删除掉这个触发器.执行语句为:DROP TRIGGER t_afterdelete_on_tab1;6、然后重新创建即可.
尚妻彭3220mysql数据库 建立触发器 -
富饲官17566178727 ______ 貌似你插入的时候就写错了吧 inset into test values (1,2),(5,1),(3,2);少了一个r 正确写法 insert into test values (1,2),(5,1),(3,2) 至于下面错误 我都不明白你要对每一次插入数据作何处理 没插入一条记录,然后就查询一次,这应该逻辑上不合理啊 ...
尚妻彭3220在mysql中的两个不同的数据库之间建立触发器连接? -
富饲官17566178727 ______ 若想利用此方法达到反向同步则可能出现问题,比如想在parkfee数据库有新数据插入时让当前数据库也同时插入一条记录,建立一个触发器,则形成了一个循环触发,当插入数据时会报大于最大递归次数错.因此因避免这样的触发循环,若要...
尚妻彭3220请教如何使用触发器 数据库是MySql
富饲官17566178727 ______ 跟其他的关系型数据库的触发器是类似的,你需要掌握的是如何创建和使用触发器,而且在使用着要结合需求来确定该不该使用触发器.而在你的程序中如何去调用则视不同开发语言而不同. 先给你一段创建MySQL触发器的语法规则,如对具体语法有不明白可以提出来,我来给你解答. CREATE TRIGGER <触发器名称> { BEFORE | AFTER } { INSERT | UPDATE | DELETE } ON <表名称> FOR EACH ROW <触发器SQL语句>
尚妻彭3220java中怎么创建mysql的触发器 -
富饲官17566178727 ______ 2.在Java程序里创建触发器 String sql=+" CREATE TRIGGER catefiles_trigger AFTER INSERT ON catefiles FOR EACH ROW"+" begin"+" declare scannum int;"+" set scannum = (select num from est_client_catescan_status where" +...