MySQL cria uma base de dados de acordo com uma base de dados de modelos

estou a escrever uma aplicação PHP que precisa de criar novas bases de dados à medida que os dados são adicionados. Eu quero uma maneira agradável e simples de especificar como as bases de dados criadas devem se parecer (ou seja, que tabelas elas contêm, que índices essas tabelas devem conter,...) e este é atualmente um diagrama EER em MySql Workbench que eu, em seguida, encaminhar engenheiro para o servidor. Eu não considero lotes de CREATE-statements em PHP code "nice and simple". Despoletado por algum evento na aplicação PHP que eu preciso faça algo que cria um novo banco de dados com um nome especificado que é uma cópia do banco de dados modelo.

Isto é uma espécie de duplicado desta pergunta.:
copiar/duplicar a base de dados do MySQL
Mas as respostas a essa pergunta não são adequadas para mim.
Eu não quero usar mysqldump porque eu não posso assumir o risco de segurança de executar código shell no servidor, que pode ser vulnerável a injeção de código como o nome do banco de dados criado tem que ser inserido. Tambem isto.
Eu também não quero quebrar o banco de dados separados com mostrar-declarações e executar manualmente criar-declarações para coser em conjunto um novo banco de dados, porque isso se torna complicado rápido e não pode capturar todos os aspectos do banco de dados modelo e, portanto, introduzir difícil de encontrar bugs. Também não tenho a certeza de como este método lida bem com chaves estrangeiras quando uma tabela de referência é criada antes da referenciada.

idealmente eu gostaria de usar uma simples declaração SQL como Onde ? representa o nome da base de dados em alguma forma de declaração preparada). Infelizmente, embora não pareça que essa funcionalidade exista no MySQL.
Aparentemente o PostgreSQL pode fazer algo assim muito bem, mas eu não quero migrar só por causa de uma única característica.

Como é que isso pode ser feito cumprindo as restrições acima mencionadas?

Author: Niko O, 2016-03-14

1 answers

Se o seu projecto é novo, ao gerir correctamente as migrações, pode separar qual parte é para o esquema da tabela, que é para os dados da tabela. Copiar a base de dados é apenas executar a migração.

Se o seu projecto existir. Você pode criar arquivos sql, e escrever scripts php para executá-lo manualmente.

 0
Author: ThangTD, 2016-03-14 01:54:10