怎么写mysql数据库延迟级联删除命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么写mysql数据库延迟级联删除命令相关的知识,希望对你有一定的参考价值。

使用 bcc 工具观测 mysql:1)dbstat功能:将 MySQL/PostgreSQL 的查询延迟汇总为直方图

语法:

dbstat [-h] [-v] [-p [PID [PID ...]]] [-m THRESHOLD] [-u] [-i INTERVAL]              mysql,postgres

选项:

mysql,postgres                           # 观测哪种数据库-h, --help                                 # 显示帮助然后退出-v, --verbose                              # 显示BPF程序-p [PID [PID ...]], --pid [PID [PID ...]]  # 要观测的进程号,空格分隔-m THRESHOLD, --threshold THRESHOLD        # 只统计查询延迟比此阈值高的-u, --microseconds                         # 以微秒为时间单位来显示延迟(默认单位:毫秒)-i INTERVAL, --interval INTERVAL           # 打印摘要的时间间隔(单位:秒)

示例:

# 使用 sysbench 在被观测数据库上执行 select[root@liuan tools]# dbstat mysql -p `pidof mysqld` -uTracing database queries for pids 3350 slower than 0 ms...^C[14:42:26]     query latency (us) 

2)dbslower

功能:跟踪 MySQL/PostgreSQL 的查询时间高于阈值

语法:

dbslower [-h] [-v] [-p [PID [PID ...]]] [-x PATH] [-m THRESHOLD]                 mysql,postgres

参数:

mysql,postgres                           # 观测哪种数据库 -h, --help                                 # 显示帮助然后退出 -v, --verbose                              # 显示BPF程序 -p [PID [PID ...]], --pid [PID [PID ...]]  # 要观测的进程号,空格分隔 -m THRESHOLD, --threshold THRESHOLD        # 只统计查询延迟比此阈值高的 -x PATH, --exe PATH                        # 数据库二进制文件的位置

示例:

# 使用sysbench在被观测数据库上执行update_index [root@liuan tools]# dbslower mysql -p `pidof mysqld` -m 2 Tracing database queries for pids 3350 slower than 2 ms... TIME(s)        PID          MS QUERY 1.765087       3350      2.996 UPDATE sbtest1 SET k=k+1 WHERE id=963 3.187147       3350      2.069 UPDATE sbtest1 SET k=k+1 WHERE id=628 5.945987       3350      2.171 UPDATE sbtest1 SET k=k+1 WHERE id=325 7.771761       3350      3.853 UPDATE sbtest1 SET k=k+1 WHERE id=5955. 使用限制

    bcc 基于 eBPF 开发(需要 Linux 3.15 及更高版本)。bcc 使用的大部分内容都需要 Linux 4.1 及更高版本。

    "bcc.usdt.USDTException: failed to enable probe 'query__start'; a possible cause can be that the probe requires a pid to enable" 需要 MySQL 具备 Dtrace tracepoint。

参考技术A 举例:
1、建筑表
CREATE TABLE buildings (
building_no INT PRIMARY KEY AUTO_INCREMENT,
building_name VARCHAR(255) NOT NULL,
address VARCHAR(255) NOT NULL
);
2、房间表
CREATE TABLE rooms (
room_no INT PRIMARY KEY AUTO_INCREMENT,
room_name VARCHAR(255) NOT NULL,
building_no INT NOT NULL,
FOREIGN KEY (building_no)
REFERENCES buildings (building_no)
ON DELETE CASCADE //这里指定了级联删除
);
3、执行删除会把building_no=2的room记录都删除了
DELETE FROM buildings
WHERE
building_no = 2;

sql中级联删除,级联更新是怎么理解的?

以使用的SqlServer为例,在management studio中 打开对应数据库的diagram,在相关表的任意一张上右键,选择relationship,弹出如下对话框。

将Delete Rule 和 Update Rule 改为cascade即可。

或者直接写SQL语句也可以,在外键关系声明的后面加上 ON UPDATE CASCADE ON DELETE CASCADE 即可。

如:alter table SZ_Picture

   add constraint FK_SZ_PICTU_RELATIONS_SZ_PICTU foreign key (pictureTypeId)

      references SZ_PictureType (pictureTypeId)

         on update cascade on delete cascade

当然如果是使用powerDesigner生成数据库的话也可以通过在PDM中修改relationship的方法来生成级联关系。

首先在PDM中两个表的relationship上双击,弹出如下对话框,选择Integrity 选项卡,将Update constraint 和Delete constraint下的cascade选上即可。

参考技术A 主外键的用用到的!当你设置主外键时可以选择是否进行级联删除,级联更新;当删除或更新主键表中的记录时,SQL会自动删除或者更新该主键所对应外键表中的记录。具体的情况你可以测试一下! 参考技术B 级联删除你可以把它认为是一个触发器,也就是你删除主表中的数据,那么从表中的相关联的也就一起删除了。。。看个例子:======================create table a
(
id varchar(20) primary key,
password varchar(20) not null
)

create table b
(
id int identity(1,1) primary key,
name varchar(50) not null,
userId varchar(20),
foreign key (userId) references a(id) on delete cascade
)
表B创建了外码userId 对应A的主码ID,声明了级联删除
测试数据:
insert a values ('11','aaa')
insert a values('23','aaa')
insert b values('da','11')
insert b values('das','11')
insert b values('ww','23')
删除A表内id为‘11’的数据,发现B表内userId 为“11”也被数据库自动删除了,这就是级联删除
delete a where id='11'=============================================================级联更新也大同小异。。只是关键字为:on update希望回答对你有所帮助........

以上是关于怎么写mysql数据库延迟级联删除命令的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 级联从库延迟

MySQL 级联从库延迟

MySQL 级联从库延迟

mysql 用一条语句删两张表中的数据

mysql数据库的最大连接数怎么查询?

PHP操作MySQL,删除一行数据库,怎么写?