MariaDB 1064 WHERE NOT EXISTS Hatası ve Çözümü
Kurulum sırasında şu hatayı alıyordum:
SQLSTATE[42000]: Syntax error or access violation: 1064
You have an error in your SQL syntax
near 'WHERE NOT EXISTS (...)'
Bu hata yetki hatası değil, SQL sözdizimi hatasıdır.
Sorun, bazı kayıtların şu şekilde eklenmeye çalışılmasıydı:
INSERT INTO addon_hooks (...)
VALUES (...)
WHERE NOT EXISTS (...);
WHERE NOT EXISTS, VALUES (...) ifadesinden sonra bu şekilde kullanılamaz. Bu nedenle MariaDB 1064 syntax error hatası vererek kurulumu durduruyordu.
Sorunu çözmek için şu işlemleri yaptım:
1. addon_hooks kayıtlarını düzelttim.
Eski yapı:
INSERT INTO addon_hooks (...)
SELECT ...
WHERE NOT EXISTS (...);
Yeni yapı:
INSERT IGNORE INTO addon_hooks
(addon_key, hook_name, callable_name, priority, is_active)
VALUES
('external_link_warning',
'render.footer.before_close',
'foriumExternalLinkWarningHook',
100,
1);
Aynı düzeltmeyi Telegram konu ve cevap hook kayıtlarına da uyguladım.
2. homepage_layouts sorgusunu düzelttim.
Eski sorguda yine WHERE NOT EXISTS kullanılıyordu. Bunun yerine LEFT JOIN kullanılarak kayıt daha önce eklenmişse tekrar eklenmemesi sağlandı:
INSERT INTO homepage_layouts (...)
SELECT ...
FROM (SELECT 1) AS seed
LEFT JOIN homepage_layouts AS existing
ON existing.is_system_default = 1
WHERE existing.id IS NULL;
Kurulum sırasında şu hatayı alıyordum:
SQLSTATE[42000]: Syntax error or access violation: 1064
You have an error in your SQL syntax
near 'WHERE NOT EXISTS (...)'
Bu hata yetki hatası değil, SQL sözdizimi hatasıdır.
Sorun, bazı kayıtların şu şekilde eklenmeye çalışılmasıydı:
INSERT INTO addon_hooks (...)
VALUES (...)
WHERE NOT EXISTS (...);
WHERE NOT EXISTS, VALUES (...) ifadesinden sonra bu şekilde kullanılamaz. Bu nedenle MariaDB 1064 syntax error hatası vererek kurulumu durduruyordu.
Sorunu çözmek için şu işlemleri yaptım:
1. addon_hooks kayıtlarını düzelttim.
Eski yapı:
INSERT INTO addon_hooks (...)
SELECT ...
WHERE NOT EXISTS (...);
Yeni yapı:
INSERT IGNORE INTO addon_hooks
(addon_key, hook_name, callable_name, priority, is_active)
VALUES
('external_link_warning',
'render.footer.before_close',
'foriumExternalLinkWarningHook',
100,
1);
Aynı düzeltmeyi Telegram konu ve cevap hook kayıtlarına da uyguladım.
2. homepage_layouts sorgusunu düzelttim.
Eski sorguda yine WHERE NOT EXISTS kullanılıyordu. Bunun yerine LEFT JOIN kullanılarak kayıt daha önce eklenmişse tekrar eklenmemesi sağlandı:
INSERT INTO homepage_layouts (...)
SELECT ...
FROM (SELECT 1) AS seed
LEFT JOIN homepage_layouts AS existing
ON existing.is_system_default = 1
WHERE existing.id IS NULL;
Merhaba Dünya