Advertisement
Guest User

Untitled

a guest
Jul 7th, 2016
2,404
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.06 KB | None | 0 0
  1. <?php
  2. $dsn = 'mysql:host=localhost;dbname=information_schema';
  3. $username = 'root';
  4. $password = 'password';
  5. $dbh = new PDO($dsn, $username, $password);
  6.  
  7. $tableSchema = 'db_name';
  8. $fkColumnName = 'emp_id';
  9. $pkColumnName = 'admin_id';
  10. $pkTableName = 'admin_login';
  11. $fkDataType = 'BIGINT';
  12. $fkDataSize = 20;
  13.  
  14.  
  15. if (!is_dir('sqls')) {
  16. mkdir('sqls', 0755);
  17. }
  18.  
  19. $file = "sqls/{$fkColumnName}.sql";
  20. $handle = fopen($file, 'w');
  21. $write = '';
  22.  
  23. // Fetch all tables which having `$fkColumnName` foreign key
  24. $sql = "Select * From INFORMATION_SCHEMA.COLUMNS WHERE column_name = '{$fkColumnName}' AND table_schema = '{$tableSchema}'";
  25. $stmt = $dbh->query($sql, PDO::FETCH_ASSOC);
  26. $tables = $stmt->fetchAll();
  27.  
  28. foreach ($tables as $key => $table)
  29. {
  30. $tableName = $table['TABLE_NAME'];
  31.  
  32. if ($tableName == $pkTableName) {
  33. continue;
  34. }
  35.  
  36. // Check for index exists on foreign key
  37. $sql = "SELECT * FROM information_schema.statistics WHERE table_schema = '{$tableSchema}' AND table_name = '{$tableName}' AND column_name = '{$fkColumnName}';";
  38.  
  39. $stmt = $dbh->query($sql, PDO::FETCH_ASSOC);
  40. $is_index_exist = $stmt->fetchAll();
  41.  
  42. if (count($is_index_exist) == 0) {
  43. $write .= "\nALTER TABLE `{$tableName}` ADD INDEX(`{$fkColumnName}`);";
  44. }
  45.  
  46. // Delete all unrelated record
  47. $write .= "\nDELETE FROM `{$tableName}` WHERE `{$fkColumnName}` NOT IN (select {$pkColumnName} from `{$pkTableName}`);";
  48.  
  49. $sql = "\n
  50. SELECT
  51. TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME
  52. FROM
  53. INFORMATION_SCHEMA.KEY_COLUMN_USAGE
  54. WHERE
  55. REFERENCED_TABLE_SCHEMA = '{$tableSchema}' AND
  56. REFERENCED_COLUMN_NAME = '{$pkColumnName}' AND
  57. TABLE_NAME = '{$tableName}' AND
  58. REFERENCED_TABLE_NAME = '{$pkTableName}';";
  59.  
  60. $stmt = $dbh->query($sql, PDO::FETCH_ASSOC);
  61. $record = $stmt->fetchAll();
  62.  
  63. $fkName = false;
  64. if ($record)
  65. {
  66. // drop FK
  67. foreach($record as $row) {
  68. $tableName = $row['TABLE_NAME'];
  69. $fkName = $row['CONSTRAINT_NAME'];
  70. $columnName = $row['COLUMN_NAME'];
  71. $referTName = $row['REFERENCED_TABLE_NAME'];
  72. $referCName = $row['REFERENCED_COLUMN_NAME'];
  73. $write .= "\nALTER TABLE $tableName DROP FOREIGN KEY `$fkName`;";
  74. }
  75. }
  76.  
  77. // add FK
  78. $write .= "\nALTER TABLE `{$tableName}` CHANGE `{$fkColumnName}` `{$fkColumnName}` {$fkDataType}({$fkDataSize}) NOT NULL;";
  79. //$write .= "\nALTER TABLE `$tableName` CHANGE `admin_id` `admin_id` INT(11) UNSIGNED NOT NULL;";
  80.  
  81. if ($fkName)
  82. {
  83. $write .= "\nALTER TABLE `$tableName` ADD CONSTRAINT $fkName FOREIGN KEY (`{$fkColumnName}`) REFERENCES `{$pkTableName}` (`{$pkColumnName}`) ON UPDATE RESTRICT ON DELETE RESTRICT;\n";
  84. }
  85. else
  86. {
  87. $write .= "\nALTER TABLE `$tableName` ADD FOREIGN KEY (`{$fkColumnName}`) REFERENCES `{$pkTableName}` (`{$pkColumnName}`) ON UPDATE RESTRICT ON DELETE RESTRICT;\n";
  88. }
  89.  
  90. $write .= "\n\n";
  91. }
  92.  
  93. $stmt->closeCursor();
  94. echo $write;
  95. file_put_contents($file, $write);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement