sql >> Databáze >  >> RDS >> Mysql

Jak zabránit implicitnímu odevzdání mysql

Dalším hackerským přístupem, který jsem právě úspěšně vyzkoušel, je získat tabulku pro vytvoření DDL pomocí specifického příkazu mysql

SHOW CREATE TABLE `tableName`

Pak udělejte nějaké kouzlo regulárního výrazu a vytvořte nový dotaz DDL, který vytvoří dočasnou tabulku založenou na původní tabulce, se všemi změnami alter tabulky začleněnými do tabulky vytvoření.

Ve svém projektu založeném na PHP jsem pro přidání jedinečného indexu do dočasné tabulky provedl následující. Povedlo se to a žádné další implicitní potvrzení se uprostřed transakce nevyskytlo.

$createDDL = ... get from SHOW CREATE TABLE `tableName`
$nr = 0;
$createDDL = preg_replace("/CREATE TABLE `$tableName` \(/", "CREATE TEMPORARY TABLE `$tmpName` (\nUNIQUE `ukey-1` ($uniqCols),", $createDDL, -1, $nr);
if (!$nr)
  throw new Exception("CREATE TABLE replacement error. No reps made.");
mysqli_query($con, $createDDL);

UPRAVIT Mimochodem, zde jsou některé zprávy o chybách (funkcích) (již mnoho let). V první můžete vidět odpověď (z roku 2006), která říká:protože toto chování je stejné jako v oracle db, toto je konzistentní...

Možná by měla být zahájena žádost o funkci „kampaň proti spamu“, aby se tato žádost o funkci oživila!



  1. Jaký je nejlepší způsob, jak ukončit podporu sloupce ve schématu databáze?

  2. Jak přidat logo do záhlaví sestavy v aplikaci Access

  3. Otázky k rozhovoru s datovým inženýrem s Pythonem

  4. SQLite - Nějaký rozdíl mezi omezením tabulky UNIQUE a omezením sloupce UNIQUE?