1
resposta

Comando ON DELETE CASCADE

Para testar esse comando criei as tabelas abaixo e inseri os valores:

-- Criação da tabela clientes
CREATE TABLE clientes (
    id_cliente INT PRIMARY KEY,
    nome VARCHAR(100) NOT NULL
);

-- Criação da tabela pedidos com chave estrangeira
CREATE TABLE pedidos (
    id_pedido INT PRIMARY KEY,
    id_cliente INT,
    data_pedido DATE,
    FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente) ON DELETE CASCADE
);

-- Inserindo dados na tabela clientes
INSERT INTO clientes (id_cliente, nome) VALUES (1, 'João da Silva');
INSERT INTO clientes (id_cliente, nome) VALUES (2, 'Maria Oliveira');

-- Inserindo dados na tabela pedidos
INSERT INTO pedidos (id_pedido, id_cliente, data_pedido) VALUES (101, 1, '2024-08-01');
INSERT INTO pedidos (id_pedido, id_cliente, data_pedido) VALUES (102, 1, '2024-08-02');
INSERT INTO pedidos (id_pedido, id_cliente, data_pedido) VALUES (103, 2, '2024-08-03');

Mas quando executo o código para deletar o cliente de id=1 da tabela clientes, ele deleta, mas na tabela pedidos, ele permanece. O que estou fazendo de errado?

DELETE FROM clientes WHERE id_cliente = 1;
1 resposta

Oii, Carlos! Como você está?

Você está indo no caminho certo! Mas, é importante verificar algumas coisas para garantir que funcione corretamente. Primeiro, confirme se o banco de dados SQLite que você está usando suporta a exclusão em cascata e se essa funcionalidade está ativada. Em algumas versões do SQLite, o suporte a ON DELETE CASCADE pode não estar ativado por padrão. Para garantir que as chaves estrangeiras estejam habilitadas, execute o comando PRAGMA foreign_keys = ON antes de criar as tabelas e inserir os dados.

Depois de garantir que tudo esteja configurado corretamente, ao deletar um cliente, os registros relacionados na tabela pedidos devem ser excluídos automaticamente.

Espero que a sugestão te ajude. Qualquer dúvida, conte conosco.

Bons estudos, Carlos!