Table of Contents
In de afgelopen jaren hebben sommige gebruikers me gemeld dat ze de 1235 mysql-triggerfout hebben.
Goedgekeurd
g.Deze beoordelingsfout betekent dat u al een AFTER INSERT-trigger behoudt voor een deel van de verzameltabel. DROP TRIGGER vipInvite; DELIMITER $$ MAAK TRIGGER vipInvite EINDE $$ DELIMITER; Als je nu het juiste andere doel hebt, moet je de code van de twee activeringen in één verenigen, vervolgens de gevestigde trigger verwijderen en vervolgens een eigentijdse grote maken.
G.
hdtv
Onlangs kwam ik een paar uur vast te zitten tot het punt waarop dit probleem zich voordeed. Ik werk al jaren met triggers in SQL die geen serververeisten bieden, maar de MySQL-implementatie is vaak twijfelachtig.
Gisteren, toen ik het systeem probeerde te herstellen, heb ik fout 1235 gegenereerd:
ERROR 1235 (42000) op regel 1408: Deze MySQL-optie corrigeert nog steeds niet “meerdere triggers met dezelfde overweging, voldoende tijd en gebeurtenissen voor uw tafel”
Ik heb ongeveer een uur op Google gezocht en kwam tot de conclusie dat deze methodefout in het eindresultaat kan ontstaan als er verschillende redenen zijn. Ik licht ook deze redenen voor de specifieke oplossingen hieronder toe.
In de eerste plaats gemaakt door het publiek, ik raad je ten zeerste aan om een nieuwe lijst van alle triggers te krijgen door het toepassen van de opdracht:
SELECT trigger_schema, trigger_nameVAN informatie_schema.triggersWHERE trigger_schema = 'NAME_OF_YOUR_DATABASE';
Reden #1: je kunt BEFORE / AFTER niet kwijt met INSERT – UPDATE / DELETE
Dit PDF-bestand beschrijft het probleem. De problemen kunnen als eenvoudig worden beschreven: BEFORE_INSERT kan niet ook AFTER_INSERT op een nieuwe zelfde tabel hebben. Mogelijk hebt u de bestelling geüpgraded VOORDAT u deze invoegde en vervolgens andere typen affix-tabellen met ID bijgewerkt. Ik stel voor dat je iets verplaatst volgens deze redenering (misschien VOORDAT je de trigger zegt) in je code.
Reden nummer 2: AFTER_DELETE soms met beoordelingsfout 1235
AFTER_DELETE-triggers moeten worden overwogen. Overschakelen naar de BEFORE_DELETE-trigger kan mogelijk zinvol zijn wanneer de meeste mensen u zien, de OLD-variabele. Ik heb geen strategie waarom dit zal gebeuren, het zou mogelijk mijn specifieke MySQL-versie zijn.
Reden 3: U kunt niet allemaal dezelfde kosten hebben (dubbele triggers)
Soms, bijvoorbeeld, ontdek je tijdens het proces een andere foutcode, maar zo nu en dan krijgt iemand zonder opgaaf van reden dezelfde 1235-fout. Ga door de show triggers discussie over en zoek naar triggers met dezelfde naam. Voer altijd TRIGGER uit voordat u een trigger maakt / wijzigt.
Reden #4: je kunt niet verwijzen naar ÉÉN TABEL die je gewoonlijk bijwerkt / invoegt in een creatie
Als u bijvoorbeeld uw eigen standaard privégegevens voor gebruikers wilt instellen op basis van een trigger bij het starten van extra gebruikersinvoer, kunt u een testrit maken met het volgende: UPDATE gebruikers SET security password = “newPassword”;
De juiste manier om dit te doen is om vooraf een variabele in het BEFORE_INSERT eindresultaat in te zetten. Voorbeeld: INSTALL NEW. = Wachtwoord “nieuwWachtwoord”;
Reden #5: Bij het doorsturen van een database (als SQL-script), kun je website-definities krijgen bij een script
In andere gevallen, als u de MySQL-verzameling op pad exporteert naar een .File, kunnen alle daadwerkelijke handmatige bestanden strategieën bevatten zoals TRIGGER “mydbname” of “trigger_name”. Dus als je probeert om dingen terug in de database te zetten met een nieuwe andere naam, zal het mislukken. Ik verwachtte verschillende systeemfouten, aangezien de database NIET verwijst naar de database die ik echt moet herstellen. Hoe dan ook, u krijgt hier tegelijkertijd fout 1235.
Korte oplossing: open het .sql-bestand en verander daarom alle verwijzingen naar EXPORTED_DB_NAME. advocaat helpt de string (d.w.z. vervangen, niets kiezen).
Hervatten / TL; DR:
Het niet gebruiken van BEFORE / UPDATE kan heel goed resulteren in hetzelfde feest (zoals INSERT) op dezelfde tray. Gebruik nooit AFTER_DELETE triggers, overweeg in plaats daarvan before_delete. Vermijd het maken van dubbele namen. Verwijs niet naar dezelfde familiecraps-tabel die u bijwerkt of positioneert waar u de set off gebruikt, OLD naast NIEUW, maar gebruik SET op de subquery die op zijn plaats is. Bij het herstellen van een database vanaf een enorme back-up, wordt de expliciete gebruikersnaam van de meeste databases vermeld in de verzameling, die de noodgevallen niet omvat (in geval van terugzetten naar hun andere opslagnaam).
Onthoud: als het gaat om de create INSERT-trigger zul je slechts één NIEUWE variabele gebruiken, van de create UPDATE-trigger zul je vaak OLD gebruiken met NEW, en met betrekking tot de DELETE-verklaring kunt u het meest effectief verwijzen naar oney ‘op OUD.
- Tags:
- 1235
- na
- after_delete
- voor
- verenig
- database
- maak
- error
- mysql-database
- link
- herwinnen
- dezelfde tabel
- systemen
,
,
,
,
,
,
,
,
,
,
,
,