Mysql
 sql >> Baza danych >  >> RDS >> Mysql

CakePHP 3:Najlepsze praktyki dotyczące tymczasowych tabel SQL

Nie ma potrzeby mówić mu, aby nie poszukaj tabeli, w rzeczywistości jest to przeciwieństwo tego, co chcesz zrobić, biorąc pod uwagę, że w końcu chcesz uzyskać do niej dostęp.

Klasa tabeli powinna być zasadniczo skonfigurowana jak zwykle, a tymczasową tabelę bazy danych należy utworzyć, zanim aplikacja umożliwi dostęp do niej. Możesz albo ręcznie napisać surowy kod SQL do tworzenia tabeli, albo wygenerować go z \Cake\Database\Schema\TableSchema instancja, która obsługuje tabele tymczasowe.

Możesz albo jawnie utworzyć obiekt schematu:

$schema = new \Cake\Database\Schema\TableSchema('temp_items');
$schema
    ->addColumn('id', ['type' => 'integer'])
    ->addColumn('con', ['type' => 'string', 'length' => 255, 'null' => false])
    ->addConstraint('primary', ['type' => 'primary', 'columns' => ['id']])
    ->setTemporary(true);

$TableObject->setSchema($schema);

lub pozwól, aby obiekt tabeli go wygenerował, korzystając z tablicy definicji pól:

$TableObject->setSchema($TableObject->fields);
$schema = $TableObject->getSchema()->setTemporary(true);

Następnie możesz wygenerować SQL tworzenia tabeli z obiektu schematu i uruchomić go w bazie danych:

$connection = $TableObject->getConnection();
$queries = $schema->createSql($connection);

$connection->transactional(
    function (\Cake\Database\Connection $connection) use ($queries) {
        foreach ($queries as $query) {
            $stmt = $connection->execute($query);
            $stmt->closeCursor();
        }
    }
);

$queries byłaby tablicą poleceń SQL wymaganych do utworzenia tabeli, coś w stylu:

[
    'CREATE TEMPORARY TABLE `temp_items` (
        `id` INTEGER AUTO_INCREMENT,
        `con` VARCHAR(255) NOT NULL,
        PRIMARY KEY (`id`)
    )'
]

Pamiętaj, że jeśli nie przypiszesz schematu do obiektu tabeli, możesz napotkać problemy z buforowaniem, ponieważ buforowany schemat nie będzie już pasował, gdy zmienisz definicję tabeli i nie wyczyścisz pamięci podręcznej.

Zobacz także




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 12 najlepszych praktyk bezpieczeństwa MySQL/MariaDB dla systemu Linux

  2. Aplikacja do czatu internetowego wykorzystująca technologię Long-Polling z PHP, MySQL i jQuery

  3. Otrzymuj posty ze wszystkich kategorii z wyjątkiem jednej kategorii

  4. Pobieranie identyfikatora zasobu #3 Błąd w MySql

  5. Jak w SQL wykluczyć wynik z SELECT * FROM ...?