這個(gè)在建表的時(shí)候就可以指定了
創(chuàng)新互聯(lián)建站專注于聶榮企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,電子商務(wù)商城網(wǎng)站建設(shè)。聶榮網(wǎng)站建設(shè)公司,為聶榮等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站策劃,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)
CREATE TABLE buildings (
building_no INT PRIMARY KEY AUTO_INCREMENT,
building_name VARCHAR(255) NOT NULL,
address VARCHAR(255) NOT NULL
);
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
);
當(dāng)執(zhí)行
DELETE FROM buildings
WHERE
building_no = 2;的時(shí)候,rooms表中的building_no =2的記錄都會(huì)被刪掉。
1、首先打開終端窗口。mysql -uroot -p進(jìn)入mysql。
2、進(jìn)入數(shù)據(jù)庫(kù),然后查看已有的表格,以免名字重復(fù)。
3、創(chuàng)建第一個(gè)表格,插入數(shù)據(jù)。
4、創(chuàng)建第二表格,插入數(shù)據(jù)。
5、創(chuàng)建第三個(gè)表格,并且和第一第二個(gè)表格關(guān)聯(lián)。
6、INSERT INTO zoo VALUES(1, 1, 2);INSERT INTO zoo VALUES(1, 2, 1);這個(gè)時(shí)候就能夠把他們直接的數(shù)據(jù)互相關(guān)聯(lián)刪除了。比如dog的1和cat的2。
我就不造你的 學(xué)生表和成績(jī)表了.
用 test_main 表 和 test_sub ?代替說(shuō)明
--?創(chuàng)建測(cè)試主表.?ID?是主鍵.
CREATE?TABLE?test_main?(
id??????INT???NOT?NULL,
value???VARCHAR(10),
PRIMARY?KEY(id)??
);
--?創(chuàng)建測(cè)試子表.?
CREATE?TABLE?test_sub?(
id??????INT??NOT?NULL,
main_id?INT?,
value???VARCHAR(10),
PRIMARY?KEY(id)??
);
--?插入測(cè)試主表數(shù)據(jù).
INSERT?INTO?test_main(id,?value)?VALUES?(1,?'ONE');
INSERT?INTO?test_main(id,?value)?VALUES?(2,?'TWO');
--?插入測(cè)試子表數(shù)據(jù).
INSERT?INTO?test_sub(id,?main_id,?value)?VALUES?(1,?1,?'ONEONE');
INSERT?INTO?test_sub(id,?main_id,?value)?VALUES?(2,?2,?'TWOTWO');
通過(guò) ?DELETE CASCADE??外鍵約束的處理機(jī)制來(lái)處理
mysql?ALTER?TABLE?test_sub
-???ADD?CONSTRAINT?main_id_cons
-???FOREIGN?KEY?(main_id)
-???REFERENCES??test_main(id)
-???ON?DELETE?CASCADE//
Query?OK,?2?rows?affected?(0.16?sec)
Records:?2??Duplicates:?0??Warnings:?0
mysql?DELETE?FROM
-???test_main
-?WHERE
-???id?=?1;
-?//
Query?OK,?1?row?affected?(0.02?sec)
mysql?SELECT
-???*
-?FROM
-???test_sub;
-?//
+----+---------+--------+
|?id?|?main_id?|?value??|
+----+---------+--------+
|??2?|???????2?|?TWOTWO?|
+----+---------+--------+
1?row?in?set?(0.00?sec)
如果你非要使用觸發(fā)器來(lái)處理, 那么下面是一個(gè)例子:
--?創(chuàng)建測(cè)試主表.?ID?是主鍵.
CREATE?TABLE?t_test_main?(
id??????INT???NOT?NULL,
value???VARCHAR(10),
PRIMARY?KEY(id)??
);
--?創(chuàng)建測(cè)試子表.?
CREATE?TABLE?t_test_sub?(
id??????INT??NOT?NULL,
main_id?INT?,
value???VARCHAR(10),
PRIMARY?KEY(id)??
);
--?插入測(cè)試主表數(shù)據(jù).
INSERT?INTO?t_test_main(id,?value)?VALUES?(1,?'ONE');
INSERT?INTO?t_test_main(id,?value)?VALUES?(2,?'TWO');
--?插入測(cè)試子表數(shù)據(jù).
INSERT?INTO?t_test_sub(id,?main_id,?value)?VALUES?(1,?1,?'ONEONE');
INSERT?INTO?t_test_sub(id,?main_id,?value)?VALUES?(2,?2,?'TWOTWO');
DELIMITER?//
CREATE?TRIGGER?tr_t_test_main_Del
BEFORE?DELETE?ON?t_test_main
FOR?EACH?ROW
BEGIN
DELETE?FROM?t_test_sub?WHERE?main_id?=?OLD.id;
END;
//
DELIMITER?;
mysql?delete?from??t_test_main??where?id?=?1;
Query?OK,?1?row?affected?(0.01?sec)
mysql?select?*?from?t_test_sub;
+----+---------+--------+
|?id?|?main_id?|?value??|
+----+---------+--------+
|??2?|???????2?|?TWOTWO?|
+----+---------+--------+
1?row?in?set?(0.00?sec)
delete t.*,t1.*,t2.* from tale_a t1, tale_a_b t, tale_b t2
where t1.id=t.aid and t.bid=t2.id and t1.你的刪除條件
前提是 a表 a_b 表 b表 根據(jù)你的關(guān)聯(lián)條件 inner join 能夠查到內(nèi)容
才會(huì)刪除成功
t1.id=t.aid and t.bid=t2.id 替換成你的三個(gè)表的關(guān)聯(lián)條件
使用 bcc 工具觀測(cè) MySQL:1)dbstat功能:將 MySQL/PostgreSQL 的查詢延遲匯總為直方圖
語(yǔ)法:
dbstat [-h] [-v] [-p [PID [PID ...]]] [-m THRESHOLD] [-u] [-i INTERVAL] ? ? ? ? ? ? ?{mysql,postgres}
選項(xiàng):
{mysql,postgres} ? ? ? ? ? ? ? ? ? ? ? ? ? # 觀測(cè)哪種數(shù)據(jù)庫(kù)-h, --help ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 顯示幫助然后退出-v, --verbose ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# 顯示BPF程序-p [PID [PID ...]], --pid [PID [PID ...]] ?# 要觀測(cè)的進(jìn)程號(hào),空格分隔-m THRESHOLD, --threshold THRESHOLD ? ? ? ?# 只統(tǒng)計(jì)查詢延遲比此閾值高的-u, --microseconds ? ? ? ? ? ? ? ? ? ? ? ? # 以微秒為時(shí)間單位來(lái)顯示延遲(默認(rèn)單位:毫秒)-i INTERVAL, --interval INTERVAL ? ? ? ? ? # 打印摘要的時(shí)間間隔(單位:秒)
示例:
# 使用 sysbench 在被觀測(cè)數(shù)據(jù)庫(kù)上執(zhí)行 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 的查詢時(shí)間高于閾值
語(yǔ)法:
dbslower [-h] [-v] [-p [PID [PID ...]]] [-x PATH] [-m THRESHOLD] ? ? ? ? ? ? ? ? {mysql,postgres}
參數(shù):
{mysql,postgres} ? ? ? ? ? ? ? ? ? ? ? ? ? # 觀測(cè)哪種數(shù)據(jù)庫(kù) -h, --help ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 顯示幫助然后退出 -v, --verbose ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# 顯示BPF程序 -p [PID [PID ...]], --pid [PID [PID ...]] ?# 要觀測(cè)的進(jìn)程號(hào),空格分隔 -m THRESHOLD, --threshold THRESHOLD ? ? ? ?# 只統(tǒng)計(jì)查詢延遲比此閾值高的 -x PATH, --exe PATH ? ? ? ? ? ? ? ? ? ? ? ?# 數(shù)據(jù)庫(kù)二進(jìn)制文件的位置
示例:
# 使用sysbench在被觀測(cè)數(shù)據(jù)庫(kù)上執(zhí)行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 開發(fā)(需要 Linux 3.15 及更高版本)。bcc 使用的大部分內(nèi)容都需要 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。