Advertisement
lipssoares

criando-fks

Jul 20th, 2019
505
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 3.82 KB | None | 0 0
  1. CRIANDO O BANCO E AS TABELAS COM OS ÍNDICES:
  2.  
  3. CREATE DATABASE `fk` DEFAULT CHARACTER SET `utf8` DEFAULT COLLATE `utf8_unicode_ci`;
  4. USE `fk`;
  5.  
  6. CREATE TABLE parent(id INT AUTO_INCREMENT PRIMARY KEY);
  7.  
  8. CREATE TABLE child(id INT AUTO_INCREMENT PRIMARY KEY, parent_id INT, INDEX parent_id (parent_id), CONSTRAINT fk_child_parent FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE RESTRICT ON UPDATE CASCADE);
  9.  
  10. // Observação: O campo da coluna que poderá ser setado ao se deletar como NULL (caso o programador posteriormente queira), não pode ter sido criado com o parâmetro "NOT NULL" na hora do "CREATE TABLE", se não ocasionará o erro 1005, o que ocasionará conflito
  11.  
  12.  
  13. INSERINDO OS DADOS:
  14.  
  15. INSERT INTO parent VALUES(NULL);
  16. INSERT INTO parent VALUES(NULL);
  17. INSERT INTO parent VALUES(NULL);
  18.  
  19. INSERT INTO child VALUES(NULL, 1);
  20. INSERT INTO child VALUES(NULL, 1);
  21. INSERT INTO child VALUES(NULL, 2);
  22. INSERT INTO child VALUES(NULL, 2);
  23. INSERT INTO child VALUES(NULL, 3);
  24. INSERT INTO child VALUES(NULL, 3);
  25.  
  26.  
  27. SELECIONANDO OS DADOS:
  28.  
  29. SELECT * FROM parent;
  30. SELECT * FROM child;
  31.  
  32.  
  33. TENTANDO DELETAR DADOS NA TABELA PAI QUE POSSUEM REFERÊNCIA NA TABELA FILHO:
  34.  
  35. //Você observará que não será possível a exclusão na tabela pai, justamente por causa do parâmetro RESTRICT
  36.  
  37. DELETE FROM parent WHERE id=1;
  38.  
  39.  
  40. DELETANDO UMA FOREIGN KEY:
  41.  
  42. //Observe o nome da sua chave estrangeira na tabela, que nesse caso é: "fk_child_parent"
  43.  
  44. SHOW CREATE TABLE child;
  45.  
  46.  
  47. //A seguir, delete-a
  48.  
  49. ALTER TABLE child DROP FOREIGN KEY fk_child_parent;
  50.  
  51.  
  52. ALTERANDO (ADICIONANDO) UMA FOREIGN KEY:
  53.  
  54. ALTER TABLE child ADD CONSTRAINT fk_child_parent FOREIGN KEY(parent_id) REFERENCES parent(id) ON DELETE SET NULL;
  55.  
  56.  
  57. DELETANDO UM ÍNDICE:
  58.  
  59. //DELETE primeiramente a chave estrangeira envolvida, e depois EXECUTE o seguinte código
  60.  
  61. DROP INDEX parent_id ON child;
  62.  
  63.  
  64. CRIANDO UM ÍNDICE FORA DO CREATE TABLE:
  65.  
  66. // Os índices auxiliam os grandes SGBDs a recolherem os seus dados em menor tempo, através de uma espécie de uso de "atalho rápido"
  67.  
  68. CREATE INDEX parent_id ON child(parent_id);
  69.  
  70.  
  71. DEFINIÇÕES DO ON DELETE:
  72.  
  73.  
  74. RESTRICT - Opção DEFAULT. Esta opção não permite a exclusão na tabela pai de um registro cuja chave primária exista em alguma tabela filha.
  75.  
  76. CASCADE - Esta opção realiza a exclusão em todas AS tabelas filhas que possua o valor da chave que será excluída na tabela pai.
  77.  
  78. SET NULL - Esta opção atribui o valor NULO nas colunas das tabelas filhas que contenha o valor da chave que será excluída na tabela pai.
  79.  
  80.  
  81.  
  82. PARÂMETRO NOT NULL WITH DEFAULT:
  83.  
  84. Preenche o campo com valores pré-definidos, de acordo com o tipo do campo, caso não seja especificado o seu conteúdo no momento da inclusão do registro.
  85. Os valores pré-definidos são:
  86.  
  87. 1) Campos numéricos - Valor zero.
  88. 2) Campos textos - Espaço em branco.
  89. 3) Campo formato DATE - DATA corrente.
  90. 4) Campo formato TIME - Horário corrente.
  91.  
  92.  
  93. RENOMEANDO TABELAS:
  94.  
  95. ALTER TABLE child RENAME filha;
  96.  
  97.  
  98. RENOMEANDO COLUNAS:
  99.  
  100. //Uma coluna não pode ser renomeada caso haja uma chave estrangeira linkada à ela, é necessário deletá-la primeiro e depois criá-la novamente (A FK)
  101.  
  102. ALTER TABLE child CHANGE parent_id pai_id INT;
  103.  
  104.  
  105. MODIFICANDO OS TIPOS DE DADOS DAS COLUNAS SEM RENOMEÁ-LAS:
  106.  
  107. ALTER TABLE child MODIFY parent_id INT NOT NULL;
  108.  
  109.  
  110. ADICIONANDO COLUNAS À TABELA:
  111.  
  112. //Novas colunas podem ser adicionadas para posicionarem-se na PRIMEIRA POSIÇÃO(FIRST) ou subsequentes à alguma outra coluna(AFTER nome_coluna_desejada)
  113.  
  114. ALTER TABLE parent ADD COLUMN parent_name VARCHAR(30) NOT NULL FIRST;
  115. ALTER TABLE ADD COLUMN child_name VARCHAR(30) NOT NULL WITH DEFAULT AFTER id;
  116.  
  117. //Orientado-a para uma nova posição
  118.  
  119. ALTER TABLE parent MODIFY parent_name VARCHAR(30) NOT NULL AFTER id;
  120.  
  121.  
  122. ZERANDO UM AUTO_INCREMENTO:
  123.  
  124. ALTER TABLE parent AUTO_INCREMENT=1;
  125.  
  126. SQL UNIQUE CONSTRAINT ON ALTER TABLE
  127.  
  128. ALTER TABLE parent ADD CONSTRAINT unq_parent_name UNIQUE (parent_name);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement