怎么写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。
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数据库延迟级联删除命令的主要内容,如果未能解决你的问题,请参考以下文章