[{"data":1,"prerenderedAt":1012},["ShallowReactive",2],{"article-categories":3,"article-tags":12,"latest-articles-5":92,"published-articles":113,"/article/mysql-before-delete-trigger":204},[4,8],{"slug":5,"label":6,"count":7},"blog","Blog",20,{"slug":9,"label":10,"count":11},"book","Books",1,[13,16,18,21,23,27,29,31,33,35,38,40,41,43,45,48,50,53,55,57,59,61,63,65,67,69,72,75,78,80,82,84,86,88,90],{"name":14,"slug":14,"count":15},"beginner",4,{"name":17,"slug":17,"count":15},"linux",{"name":19,"slug":20,"count":15},"nuxt.js","nuxt-js",{"name":22,"slug":22,"count":15},"vim",{"name":24,"slug":25,"count":26},"@nuxt/content","nuxt-content",2,{"name":28,"slug":28,"count":26},"cloudflare",{"name":30,"slug":30,"count":26},"mysql",{"name":32,"slug":32,"count":26},"tools",{"name":34,"slug":34,"count":11},"architecture",{"name":36,"slug":37,"count":11},"AWS","aws",{"name":39,"slug":39,"count":11},"biome",{"name":9,"slug":9,"count":11},{"name":42,"slug":42,"count":11},"css",{"name":44,"slug":44,"count":11},"eslint",{"name":46,"slug":47,"count":11},"ExpoGo","expogo",{"name":49,"slug":49,"count":11},"git",{"name":51,"slug":52,"count":11},"github action","github-action",{"name":54,"slug":54,"count":11},"index",{"name":56,"slug":56,"count":11},"ios",{"name":58,"slug":58,"count":11},"markdown",{"name":60,"slug":60,"count":11},"neovim",{"name":62,"slug":62,"count":11},"obsidian",{"name":64,"slug":64,"count":11},"php",{"name":66,"slug":66,"count":11},"plugins",{"name":68,"slug":68,"count":11},"programing",{"name":70,"slug":71,"count":11},"RDS","rds",{"name":73,"slug":74,"count":11},"ReactNative","reactnative",{"name":76,"slug":77,"count":11},"S3","s3",{"name":79,"slug":79,"count":11},"shell",{"name":81,"slug":81,"count":11},"tailwindcss",{"name":83,"slug":83,"count":11},"terminal",{"name":85,"slug":85,"count":11},"tips",{"name":87,"slug":87,"count":11},"tool",{"name":89,"slug":89,"count":11},"trigger",{"name":91,"slug":91,"count":11},"zsh",[93,97,101,105,109],{"path":94,"title":95,"date":96},"/article/mysql-before-delete-trigger","MySQLのBEFORE DELETEトリガーをちゃんと調べる","2026-09-14",{"path":98,"title":99,"date":100},"/article/eslint-biome-migration","ESLintとPrettierをBiomeやoxlintに乗り換えられるか試す","2026-09-07",{"path":102,"title":103,"date":104},"/article/cloudflare-trailing-slash","Cloudflare Pagesが付ける末尾スラッシュで、記事が「無い」ことになる","2026-09-02",{"path":106,"title":107,"date":108},"/article/tailwind-css-variables","Tailwindのトークンを1箇所にまとめても、ダークモードは切り替わらない","2026-09-01",{"path":110,"title":111,"date":112},"/article/s3-to-rds","AmazonS3のファイルをRDSにロードして使う","2026-02-18",[114,116,118,120,122,124,129,134,139,144,149,154,159,164,169,174,179,184,189,194,199],{"path":94,"title":95,"date":96,"tags":115,"category":5},[30,89],{"path":98,"title":99,"date":100,"tags":117,"category":5},[44,39,19],{"path":102,"title":103,"date":104,"tags":119,"category":5},[28,19,24],{"path":106,"title":107,"date":108,"tags":121,"category":5},[81,19,42],{"path":110,"title":111,"date":112,"tags":123,"category":5},[36,76,70],{"path":125,"title":126,"date":127,"tags":128,"category":5},"/article/tools-lazygit","おすすめツール紹介 - lazygit編","2026-02-10",[87,49,83],{"path":130,"title":131,"date":132,"tags":133,"category":5},"/article/nuxt-content-cloudflare","Nuxt Contentの記事がSSR時に取得できない問題とその解決策","2026-02-07",[19,28,24],{"path":135,"title":136,"date":137,"tags":138,"category":5},"/article/linux-fg-bg","fgとbgでプロセスを操る","2026-02-04",[17],{"path":140,"title":141,"date":142,"tags":143,"category":9},"/article/architecture-textbook","【書評】アーキテクトの教科書","2026-01-30",[9,34],{"path":145,"title":146,"date":147,"tags":148,"category":5},"/article/shell-dev-null","Linuxの標準出力をきちんと理解する","2026-01-28",[79,17],{"path":150,"title":151,"date":152,"tags":153,"category":5},"/article/shell-utilities","シェルの小技・今後使っていきたい機能","2026-01-27",[91,17],{"path":155,"title":156,"date":157,"tags":158,"category":5},"/article/obsidian-action","obsidianのリポジトリをGithubActionsで自動整形する","2026-01-26",[62,51],{"path":160,"title":161,"date":162,"tags":163,"category":5},"/article/react-native-reduce","ReactNativeでのiOS実機確認(Expo Go)で、アプリが動かない事象とその解決法","2026-01-25",[73,46,56],{"path":165,"title":166,"date":167,"tags":168,"category":5},"/article/php-null","phpのnull合体演算子を深掘りする","2026-01-24",[64,68],{"path":170,"title":171,"date":172,"tags":173,"category":5},"/article/mysql-index","6,500万件のテーブルにindexを貼る","2026-01-22",[30,54],{"path":175,"title":176,"date":177,"tags":178,"category":5},"/article/render-markdown","render-markdown.nvimでlinkがうまくレンダリングされなくなった","2026-01-18",[60,66,14],{"path":180,"title":181,"date":182,"tags":183,"category":5},"/article/vim-abbreviation","vimで略語展開設定してみる","2026-01-17",[22,85,14],{"path":185,"title":186,"date":187,"tags":188,"category":5},"/article/vim-folding","neovimのmarkdown折りたたみを改造した","2026-01-16",[22,58],{"path":190,"title":191,"date":192,"tags":193,"category":5},"/article/archlinux-install"," Arch Linux インストールの悪戦苦闘メモ","2026-01-14",[17,14],{"path":195,"title":196,"date":197,"tags":198,"category":5},"/article/vim-standard-memo","Vim標準機能で使いたいものメモ","2026-01-11",[22,32],{"path":200,"title":201,"date":202,"tags":203,"category":5},"/article/vim-command","vim標準で使いたいコマンド","2026-01-10",[22,32,14],{"id":205,"title":95,"body":206,"category":5,"date":96,"description":1005,"extension":1006,"meta":1007,"navigation":510,"path":94,"published":510,"seo":1008,"stem":1009,"tags":1010,"__hash__":1011},"article/article/mysql-before-delete-trigger.md",{"type":207,"value":208,"toc":996},"minimark",[209,213,217,225,233,236,240,246,322,338,349,352,367,370,380,628,635,678,706,709,720,765,799,807,810,813,878,891,904,907,917,920,937,943,954,957,963,966,992],[210,211,212],"h2",{"id":212},"主題",[214,215,216],"p",{},"「行が消えるときに何かしたい」という要件に、MySQLのトリガーは一見ぴったり当てはまる。",[214,218,219,220,224],{},"削除ログを残す、関連データを片付ける、消えた件数を数える。\nどれも ",[221,222,223],"code",{},"BEFORE DELETE"," で書けそうに見えるし、実際それっぽく動く。",[214,226,227,228,232],{},"ただ、これが成立するのは「行が消えるときに",[229,230,231],"strong",{},"必ず","走る」場合だけなので、\n「本当に必ず走るのか？」がずっと気になっていた。ちゃんと調べる。",[214,234,235],{},"※ 以降の内容はすべて MySQL 8.0.46 で確認しています。",[210,237,239],{"id":238},"そもそもトリガーとは","そもそもトリガーとは？",[214,241,242,243,245],{},"あるテーブルへの操作をきっかけに、自動で走るSQLのこと。\n",[221,244,223],{}," なら、行が削除される直前に、削除される行1件ごとに走る。",[247,248,253],"pre",{"className":249,"code":250,"language":251,"meta":252,"style":252},"language-sql shiki shiki-themes github-light github-dark","CREATE TRIGGER posts_before_delete BEFORE DELETE ON posts\nFOR EACH ROW\n  INSERT INTO deleted_posts_log (post_id) VALUES (OLD.id);\n","sql","",[221,254,255,283,294],{"__ignoreMap":252},[256,257,259,263,266,270,273,276,279],"span",{"class":258,"line":11},"line",[256,260,262],{"class":261},"szBVR","CREATE",[256,264,265],{"class":261}," TRIGGER",[256,267,269],{"class":268},"sScJk"," posts_before_delete",[256,271,272],{"class":261}," BEFORE",[256,274,275],{"class":261}," DELETE",[256,277,278],{"class":261}," ON",[256,280,282],{"class":281},"sVt8B"," posts\n",[256,284,285,288,291],{"class":258,"line":26},[256,286,287],{"class":261},"FOR",[256,289,290],{"class":281}," EACH ",[256,292,293],{"class":261},"ROW\n",[256,295,297,300,303,306,309,313,316,319],{"class":258,"line":296},3,[256,298,299],{"class":261},"  INSERT INTO",[256,301,302],{"class":281}," deleted_posts_log (post_id) ",[256,304,305],{"class":261},"VALUES",[256,307,308],{"class":281}," (",[256,310,312],{"class":311},"sj4cs","OLD",[256,314,315],{"class":281},".",[256,317,318],{"class":311},"id",[256,320,321],{"class":281},");\n",[214,323,324,327,328,330,331,334,335,337],{},[221,325,326],{},"FOR EACH ROW"," が「1行ごとに」の意味で、",[221,329,312],{}," がこれから消える行を指している。\n",[221,332,333],{},"OLD.id"," のようにカラムを読めるが、削除の場合 ",[221,336,312],{}," は読み取り専用なので、代入しようとすると怒られる。",[247,339,343],{"className":340,"code":341,"language":342,"meta":252,"style":252},"language-txt shiki shiki-themes github-light github-dark","ERROR 1362 (HY000): Updating of OLD row is not allowed in trigger\n","txt",[221,344,345],{"__ignoreMap":252},[256,346,347],{"class":258,"line":11},[256,348,341],{},[214,350,351],{},"自分が仕掛けられているテーブル自身も更新できない。これも怒られる。",[247,353,355],{"className":340,"code":354,"language":342,"meta":252,"style":252},"ERROR 1442 (HY000): Can't update table 'items' in stored function/trigger because it is\nalready used by statement which invoked this stored function/trigger.\n",[221,356,357,362],{"__ignoreMap":252},[256,358,359],{"class":258,"line":11},[256,360,361],{},"ERROR 1442 (HY000): Can't update table 'items' in stored function/trigger because it is\n",[256,363,364],{"class":258,"line":26},[256,365,366],{},"already used by statement which invoked this stored function/trigger.\n",[210,368,369],{"id":369},"実際に試してみる",[214,371,372,373,376,377,379],{},"親子テーブルを ",[221,374,375],{},"ON DELETE CASCADE"," で繋ぎ、子テーブルの方に ",[221,378,223],{}," を仕掛けてみる。",[247,381,383],{"className":249,"code":382,"language":251,"meta":252,"style":252},"CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50));\nCREATE TABLE posts (\n  id INT PRIMARY KEY,\n  user_id INT,\n  FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE\n);\nCREATE TABLE deleted_posts_log (id INT AUTO_INCREMENT PRIMARY KEY, post_id INT);\n\nCREATE TRIGGER posts_before_delete BEFORE DELETE ON posts\nFOR EACH ROW\n  INSERT INTO deleted_posts_log (post_id) VALUES (OLD.id);\n\nINSERT INTO users VALUES (1,'a'),(2,'b');\nINSERT INTO posts VALUES (10,1),(20,2);\n",[221,384,385,422,434,446,455,473,478,505,512,529,538,557,562,598],{"__ignoreMap":252},[256,386,387,389,392,395,398,401,404,407,410,413,416,419],{"class":258,"line":11},[256,388,262],{"class":261},[256,390,391],{"class":261}," TABLE",[256,393,394],{"class":268}," users",[256,396,397],{"class":281}," (id ",[256,399,400],{"class":261},"INT",[256,402,403],{"class":261}," PRIMARY KEY",[256,405,406],{"class":281},", ",[256,408,409],{"class":261},"name",[256,411,412],{"class":261}," VARCHAR",[256,414,415],{"class":281},"(",[256,417,418],{"class":311},"50",[256,420,421],{"class":281},"));\n",[256,423,424,426,428,431],{"class":258,"line":26},[256,425,262],{"class":261},[256,427,391],{"class":261},[256,429,430],{"class":268}," posts",[256,432,433],{"class":281}," (\n",[256,435,436,439,441,443],{"class":258,"line":296},[256,437,438],{"class":281},"  id ",[256,440,400],{"class":261},[256,442,403],{"class":261},[256,444,445],{"class":281},",\n",[256,447,448,451,453],{"class":258,"line":15},[256,449,450],{"class":281},"  user_id ",[256,452,400],{"class":261},[256,454,445],{"class":281},[256,456,458,461,464,467,470],{"class":258,"line":457},5,[256,459,460],{"class":261},"  FOREIGN KEY",[256,462,463],{"class":281}," (user_id) ",[256,465,466],{"class":261},"REFERENCES",[256,468,469],{"class":281}," users(id) ",[256,471,472],{"class":261},"ON DELETE CASCADE\n",[256,474,476],{"class":258,"line":475},6,[256,477,321],{"class":281},[256,479,481,483,485,488,490,492,495,498,501,503],{"class":258,"line":480},7,[256,482,262],{"class":261},[256,484,391],{"class":261},[256,486,487],{"class":268}," deleted_posts_log",[256,489,397],{"class":281},[256,491,400],{"class":261},[256,493,494],{"class":281}," AUTO_INCREMENT ",[256,496,497],{"class":261},"PRIMARY KEY",[256,499,500],{"class":281},", post_id ",[256,502,400],{"class":261},[256,504,321],{"class":281},[256,506,508],{"class":258,"line":507},8,[256,509,511],{"emptyLinePlaceholder":510},true,"\n",[256,513,515,517,519,521,523,525,527],{"class":258,"line":514},9,[256,516,262],{"class":261},[256,518,265],{"class":261},[256,520,269],{"class":268},[256,522,272],{"class":261},[256,524,275],{"class":261},[256,526,278],{"class":261},[256,528,282],{"class":281},[256,530,532,534,536],{"class":258,"line":531},10,[256,533,287],{"class":261},[256,535,290],{"class":281},[256,537,293],{"class":261},[256,539,541,543,545,547,549,551,553,555],{"class":258,"line":540},11,[256,542,299],{"class":261},[256,544,302],{"class":281},[256,546,305],{"class":261},[256,548,308],{"class":281},[256,550,312],{"class":311},[256,552,315],{"class":281},[256,554,318],{"class":311},[256,556,321],{"class":281},[256,558,560],{"class":258,"line":559},12,[256,561,511],{"emptyLinePlaceholder":510},[256,563,565,568,571,573,575,578,581,585,588,591,593,596],{"class":258,"line":564},13,[256,566,567],{"class":261},"INSERT INTO",[256,569,570],{"class":281}," users ",[256,572,305],{"class":261},[256,574,308],{"class":281},[256,576,577],{"class":311},"1",[256,579,580],{"class":281},",",[256,582,584],{"class":583},"sZZnC","'a'",[256,586,587],{"class":281},"),(",[256,589,590],{"class":311},"2",[256,592,580],{"class":281},[256,594,595],{"class":583},"'b'",[256,597,321],{"class":281},[256,599,601,603,606,608,610,613,615,617,619,622,624,626],{"class":258,"line":600},14,[256,602,567],{"class":261},[256,604,605],{"class":281}," posts ",[256,607,305],{"class":261},[256,609,308],{"class":281},[256,611,612],{"class":311},"10",[256,614,580],{"class":281},[256,616,577],{"class":311},[256,618,587],{"class":281},[256,620,621],{"class":311},"20",[256,623,580],{"class":281},[256,625,590],{"class":311},[256,627,321],{"class":281},[214,629,630,631,634],{},"まずは ",[221,632,633],{},"posts"," を直接消してみる。",[247,636,638],{"className":249,"code":637,"language":251,"meta":252,"style":252},"DELETE FROM posts WHERE id = 10;\nSELECT * FROM deleted_posts_log;\n",[221,639,640,665],{"__ignoreMap":252},[256,641,642,645,648,650,653,656,659,662],{"class":258,"line":11},[256,643,644],{"class":261},"DELETE",[256,646,647],{"class":261}," FROM",[256,649,605],{"class":281},[256,651,652],{"class":261},"WHERE",[256,654,655],{"class":281}," id ",[256,657,658],{"class":261},"=",[256,660,661],{"class":311}," 10",[256,663,664],{"class":281},";\n",[256,666,667,670,673,675],{"class":258,"line":26},[256,668,669],{"class":261},"SELECT",[256,671,672],{"class":261}," *",[256,674,647],{"class":261},[256,676,677],{"class":281}," deleted_posts_log;\n",[247,679,681],{"className":340,"code":680,"language":342,"meta":252,"style":252},"+----+---------+\n| id | post_id |\n+----+---------+\n|  1 |      10 |\n+----+---------+\n",[221,682,683,688,693,697,702],{"__ignoreMap":252},[256,684,685],{"class":258,"line":11},[256,686,687],{},"+----+---------+\n",[256,689,690],{"class":258,"line":26},[256,691,692],{},"| id | post_id |\n",[256,694,695],{"class":258,"line":296},[256,696,687],{},[256,698,699],{"class":258,"line":15},[256,700,701],{},"|  1 |      10 |\n",[256,703,704],{"class":258,"line":457},[256,705,687],{},[214,707,708],{},"ログが1件積まれた。ここまでは想定通り。",[214,710,711,712,715,716,719],{},"次に、親の ",[221,713,714],{},"users"," の方を消して ",[221,717,718],{},"CASCADE"," を発動させてみると、、、",[247,721,723],{"className":249,"code":722,"language":251,"meta":252,"style":252},"DELETE FROM users WHERE id = 2;\nSELECT * FROM posts;\nSELECT * FROM deleted_posts_log;\n",[221,724,725,744,755],{"__ignoreMap":252},[256,726,727,729,731,733,735,737,739,742],{"class":258,"line":11},[256,728,644],{"class":261},[256,730,647],{"class":261},[256,732,570],{"class":281},[256,734,652],{"class":261},[256,736,655],{"class":281},[256,738,658],{"class":261},[256,740,741],{"class":311}," 2",[256,743,664],{"class":281},[256,745,746,748,750,752],{"class":258,"line":26},[256,747,669],{"class":261},[256,749,672],{"class":261},[256,751,647],{"class":261},[256,753,754],{"class":281}," posts;\n",[256,756,757,759,761,763],{"class":258,"line":296},[256,758,669],{"class":261},[256,760,672],{"class":261},[256,762,647],{"class":261},[256,764,677],{"class":281},[247,766,768],{"className":340,"code":767,"language":342,"meta":252,"style":252},"Empty set (0.00 sec)\n\n+----+---------+\n| id | post_id |\n+----+---------+\n|  1 |      10 |\n+----+---------+\n",[221,769,770,775,779,783,787,791,795],{"__ignoreMap":252},[256,771,772],{"class":258,"line":11},[256,773,774],{},"Empty set (0.00 sec)\n",[256,776,777],{"class":258,"line":26},[256,778,511],{"emptyLinePlaceholder":510},[256,780,781],{"class":258,"line":296},[256,782,687],{},[256,784,785],{"class":258,"line":15},[256,786,692],{},[256,788,789],{"class":258,"line":457},[256,790,687],{},[256,792,793],{"class":258,"line":475},[256,794,701],{},[256,796,797],{"class":258,"line":480},[256,798,687],{},[214,800,801,803,804],{},[221,802,633],{}," は空になっている。id=20の行は確かに消えた。\nにもかかわらず、ログは1件のままで増えていない。",[229,805,806],{},"トリガーが走っていない。",[210,808,809],{"id":809},"発火しない経路がある",[214,811,812],{},"同じ「postsの行が消える」でも、経路によって結果が違った。",[814,815,816,830],"table",{},[817,818,819],"thead",{},[820,821,822,827],"tr",{},[823,824,826],"th",{"align":825},"left","行の消え方",[823,828,829],{"align":825},"BEFORE DELETEトリガー",[831,832,833,844,857,868],"tbody",{},[820,834,835,841],{},[836,837,838],"td",{"align":825},[221,839,840],{},"DELETE FROM posts ...",[836,842,843],{"align":825},"発火する",[820,845,846,852],{},[836,847,848,849,851],{"align":825},"外部キーの ",[221,850,375],{}," による削除",[836,853,854],{"align":825},[229,855,856],{},"発火しない",[820,858,859,864],{},[836,860,861],{"align":825},[221,862,863],{},"TRUNCATE TABLE posts",[836,865,866],{"align":825},[229,867,856],{},[820,869,870,875],{},[836,871,872],{"align":825},[221,873,874],{},"DROP TABLE posts",[836,876,877],{"align":825},"発火しない（トリガーも一緒に消える）",[214,879,880,882,883,886,887,890],{},[221,881,718],{}," と ",[221,884,885],{},"TRUNCATE"," が厄介なのは、",[229,888,889],{},"行は確かに消えているのに、トリガーだけが走らない","という点。",[892,893,896],"callout",{"title":894,"type":895},"気づく手段がない","warning",[214,897,898,900,901,903],{},[221,899,718],{}," も ",[221,902,885],{}," もエラーにはならず、普通に成功として返ってくる。\nトリガーが走らなかったことを実行結果から知る方法がないので、\n後からログの件数が合わないときに初めて発覚することになる。",[210,905,906],{"id":906},"注意したい点",[214,908,909,910,916],{},"つまりトリガーが守れる範囲は、",[229,911,912,913,915],{},"アプリケーションが自分で ",[221,914,644],{}," 文を打つ経路だけ","ということになる。",[214,918,919],{},"逆に、以下のような要件はトリガーでは満たせない。",[921,922,923,929,934],"ol",{},[924,925,848,926,928],"li",{},[221,927,718],{}," で連鎖的に消える子テーブルの削除ログを取る",[924,930,931,933],{},[221,932,885],{}," を含む運用作業も漏らさず記録する",[924,935,936],{},"「このテーブルから消えた行は必ずどこかに残る」を保証する",[214,938,939,940,942],{},"「必ず記録される」が要件に入っているなら、トリガーは選ばない方がよさそう。\n",[221,941,718],{}," をやめてアプリ側で子テーブルの削除を明示的に書くか、\nそもそも物理削除をやめて論理削除にしてしまう方が確実だと思う。",[214,944,945,947,948,953],{},[221,946,718],{}," で消える行も記録したい、というのが最初から分かっているなら、\n",[229,949,848,950,952],{},[221,951,718],{}," とトリガーは組み合わせない","と決めておくのが早い。",[210,955,956],{"id":956},"おわりに",[214,958,959,960,962],{},"今回はMySQLだけで確認したが、この挙動はDBによって違うらしい。\nPostgreSQLでは ",[221,961,718],{}," で消える行でもトリガーが動く、という話を見かけたので、\n他のDBから来た人ほど「動くはず」で踏みそうだなと思っている。そのうち手元で確かめたい😴",[210,964,965],{"id":965},"参考",[967,968,969,978,985],"ul",{},[924,970,971],{},[972,973,977],"a",{"href":974,"rel":975},"https://dev.mysql.com/doc/refman/8.0/ja/create-trigger.html",[976],"nofollow","MySQL 8.0 リファレンス: CREATE TRIGGER Statement",[924,979,980],{},[972,981,984],{"href":982,"rel":983},"https://dev.mysql.com/doc/refman/8.0/ja/create-table-foreign-keys.html",[976],"MySQL 8.0 リファレンス: FOREIGN KEY 制約",[924,986,987],{},[972,988,991],{"href":989,"rel":990},"https://bugs.mysql.com/bug.php?id=11472",[976],"MySQL Bugs #11472: Triggers not executed following foreign key updates/deletes",[993,994,995],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":252,"searchDepth":26,"depth":26,"links":997},[998,999,1000,1001,1002,1003,1004],{"id":212,"depth":26,"text":212},{"id":238,"depth":26,"text":239},{"id":369,"depth":26,"text":369},{"id":809,"depth":26,"text":809},{"id":906,"depth":26,"text":906},{"id":956,"depth":26,"text":956},{"id":965,"depth":26,"text":965},"削除のたびに必ず走ると思っていたら、そうでもなかった話。","md",{},{"title":95,"description":1005},"article/mysql-before-delete-trigger",[30,89],"gJg4iWKyGp6H0jfNk9t1zULnp0Ru77zWxtAJhPqPTPg",1790473631770]