{"id":37683,"date":"2025-06-13T11:35:39","date_gmt":"2025-06-13T14:35:39","guid":{"rendered":"https:\/\/www.locaweb.com.br\/ajuda\/?post_type=ht_kb&#038;p=37683"},"modified":"2025-06-18T11:38:03","modified_gmt":"2025-06-18T14:38:03","slug":"constraint-sql","status":"publish","type":"ht_kb","link":"https:\/\/www.locaweb.com.br\/ajuda\/wiki\/constraint-sql\/","title":{"rendered":"Habilitar e desabilitar constraints no SQL"},"content":{"rendered":"<p>As <strong>constraints no SQL<\/strong> s\u00e3o regras que garantem a veracidade e a consist\u00eancia dos dados em um banco de dados. Por isso, us\u00e1-las corretamente \u00e9 essencial para sistemas confi\u00e1veis e seguros.<\/p>\n<p>Neste guia, voc\u00ea vai entender como usar as constraints no SQL, como habilit\u00e1-las e desabilit\u00e1-las, o que s\u00e3o, para que servem e os tipos mais comuns. Continue a leitura e saiba mais!<\/p>\n<h2>Como utilizar as constraints no SQL?<\/h2>\n<p>Para utilizar constraints no SQL, \u00e9 necess\u00e1rio<strong> defini-las ao criar ou alterar tabelas<\/strong>. Elas podem ser adicionadas diretamente \u00e0 estrutura da tabela com os comandos <em>CREATE TABLE<\/em> ou <em>ALTER TABLE<\/em>.<\/p>\n<p>As constraints permitem configurar regras autom\u00e1ticas que controlam a inser\u00e7\u00e3o, a atualiza\u00e7\u00e3o e a exclus\u00e3o de dados para, assim, ter a integridade do banco de dados.<\/p>\n<h3>Exemplo de cria\u00e7\u00e3o de constraints<\/h3>\n<p>No momento da cria\u00e7\u00e3o de uma tabela, as constraints podem ser definidas no pr\u00f3prio comando <em>CREATE TABLE<\/em>.<\/p>\n<p><strong>Veja um exemplo:<\/strong><\/p>\n<pre><em>CREATE TABLE Produtos (<\/em>\r\n\r\n<em> ProdutoID INT PRIMARY KEY,<\/em>\r\n\r\n<em> Nome VARCHAR(100) UNIQUE NOT NULL,<\/em>\r\n\r\n<em> Preco DECIMAL(10, 2) CHECK (Preco &gt; 0),<\/em>\r\n\r\n<em>CategoriaID<\/em><em> INT,<\/em>\r\n\r\n<em> FOREIGN KEY (<\/em><em>CategoriaID<\/em><em>) REFERENCES Categorias(<\/em><em>CategoriaID<\/em><em>)<\/em>\r\n\r\n<em>);<\/em><\/pre>\n<p><strong>Nesse exemplo:<\/strong><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>PRIMARY KEY identifica cada produto;<\/li>\n<li>UNIQUE impede nomes duplicados;<\/li>\n<li>NOT NULL exige que o campo <em>Nome<\/em> seja preenchido;<\/li>\n<li>CHECK garante que o pre\u00e7o seja maior que zero;<\/li>\n<li>FOREIGN KEY assegura a integridade referencial com a tabela <em>Categorias<\/em>.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>Exemplo de adi\u00e7\u00e3o de constraints<\/h3>\n<p>Se uma tabela j\u00e1 existe, constraints podem ser adicionadas com <em>ALTER TABLE<\/em>:<\/p>\n<pre><em>ALTER TABLE Usuarios<\/em>\r\n\r\n<em>ADD CONSTRAINT UQ_Email UNIQUE (Email);<\/em><\/pre>\n<p>Nesse caso, a constraint <em>UQ_Email<\/em> foi criada para impedir duplica\u00e7\u00e3o de e-mails.<\/p>\n<h3>Dica: use nomes claros nas constraints<\/h3>\n<p>Ao criar constraints, \u00e9 recomend\u00e1vel dar nomes descritivos para facilitar o entendimento e a manuten\u00e7\u00e3o do banco.<\/p>\n<p><strong>Por exemplo:<\/strong><\/p>\n<pre><em>ALTER TABLE Pedidos<\/em>\r\n\r\n<em>ADD CONSTRAINT <\/em><em>CHK_Quantidade<\/em><em> CHECK (Quantidade &gt; 0);<\/em><\/pre>\n<p>Assim, as constraints podem ser utilizadas tanto no momento da cria\u00e7\u00e3o das tabelas quanto em ajustes posteriores, sempre para promover organiza\u00e7\u00e3o e seguran\u00e7a no banco de dados.<\/p>\n<h2>Como habilitar e desabilitar as constraints?<\/h2>\n<p>No SQL, inclusive sistemas como <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/mysql-guia-completo-de-como-utilizar-o-sistema\/\" target=\"_blank\" rel=\"noopener noreferrer\">MySQL<\/a>, as constraints podem ser habilitadas ou desabilitadas para atender a necessidades espec\u00edficas, como carregamento em massa de dados ou manuten\u00e7\u00e3o do banco.<\/p>\n<p>Essa funcionalidade \u00e9 \u00fatil para <strong>evitar erros tempor\u00e1rios<\/strong> causados por viola\u00e7\u00f5es das regras definidas.<\/p>\n<h3>Habilitar constraints<\/h3>\n<p>Para habilitar uma constraint desativada, utiliza-se o comando <em>ALTER TABLE<\/em> com a cl\u00e1usula <em>CHECK CONSTRAINT<\/em> ou <em>ENABLE<\/em>.<\/p>\n<p><strong>Veja um exemplo:<\/strong><\/p>\n<pre><em>ALTER TABLE Pedidos<\/em>\r\n\r\n<em>CHECK CONSTRAINT FK_ClienteID;<\/em><\/pre>\n<p>Nesse caso, a constraint de chave estrangeira (FOREIGN KEY) chamada <em>FK_ClienteID<\/em> \u00e9 reativada para restabelecer as verifica\u00e7\u00f5es de integridade referencial.<\/p>\n<p>Outra forma, para <strong>bancos que suportam a sintaxe<\/strong>, \u00e9 usar o comando:<\/p>\n<pre><em>ALTER TABLE Produtos<\/em>\r\n\r\n<em>ENABLE CONSTRAINT <\/em><em>CHK_Preco<\/em><em>;<\/em><\/pre>\n<p>Aqui, a constraint de verifica\u00e7\u00e3o <em>CHK_Preco<\/em> volta a ser aplicada.<\/p>\n<h3>Desabilitar constraints<\/h3>\n<p>Desabilitar constraints \u00e9 \u00fatil em <strong>opera\u00e7\u00f5es que envolvem grandes volumes de dados<\/strong>, em que verifica\u00e7\u00f5es podem impactar a performance.<\/p>\n<p>Para isso, utilize o comando <em>ALTER TABLE<\/em> com a cl\u00e1usula <em>NOCHECK CONSTRAINT<\/em> ou <em>DISABLE<\/em>.<\/p>\n<p><strong>Exemplo:<\/strong><\/p>\n<pre><em>ALTER TABLE Pedidos<\/em>\r\n\r\n<em>NOCHECK CONSTRAINT FK_ClienteID;<\/em><\/pre>\n<p>Isso desativa temporariamente a constraint <em>FK_ClienteID<\/em> e permite a inser\u00e7\u00e3o ou atualiza\u00e7\u00e3o de dados que poderiam violar a regra de integridade.<\/p>\n<p>Outra op\u00e7\u00e3o \u00e9 <strong>desativar todas as constraints de uma tabela<\/strong>:<\/p>\n<pre><em>ALTER TABLE Produtos<\/em>\r\n\r\n<em>NOCHECK CONSTRAINT ALL;<\/em><\/pre>\n<p><strong>Mas aten\u00e7\u00e3o:<\/strong><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>Desativar constraints deve ser feito com cautela, pois pode comprometer a integridade do banco;<\/li>\n<li>Ap\u00f3s realizar altera\u00e7\u00f5es ou inser\u00e7\u00f5es, sempre habilite as constraints novamente para restaurar as regras do sistema.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Esse controle flex\u00edvel de habilita\u00e7\u00e3o e desabilita\u00e7\u00e3o permite administrar o banco de forma eficiente e, assim, manter o equil\u00edbrio entre performance e integridade.<\/p>\n<h2>O que s\u00e3o as constraints?<\/h2>\n<p>Constraints s\u00e3o <strong>regras aplicadas \u00e0s tabelas de um banco de dados SQL para garantir a integridade dos dados<\/strong>.<\/p>\n<p>Elas funcionam como <strong>restri\u00e7\u00f5es que controlam os valores inseridos <\/strong>e fazem com que sigam crit\u00e9rios estabelecidos previamente, como unicidade, obrigatoriedade ou v\u00ednculos entre tabelas.<\/p>\n<p>Essas regras s\u00e3o definidas no momento da cria\u00e7\u00e3o de uma tabela ou posteriormente, por meio de altera\u00e7\u00f5es na estrutura do banco.<\/p>\n<h3>Para o que serve?<\/h3>\n<p>No <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/sql\/\" target=\"_blank\" rel=\"noopener noreferrer\">SQL<\/a>, constraints servem para <strong>evitar a entrada de dados inv\u00e1lidos ou inconsistentes<\/strong> em um banco de dados. Elas certificam que as informa\u00e7\u00f5es atendam a crit\u00e9rios espec\u00edficos, como impedir valores duplicados ou permitir apenas entradas v\u00e1lidas.<\/p>\n<p>Al\u00e9m disso, promovem a integridade referencial entre tabelas e preservam v\u00ednculos essenciais em sistemas relacionais. Usar constraints <strong>reduz erros e melhora a confiabilidade do banco<\/strong>.<\/p>\n<h2>Tipos de constraints em SQL<\/h2>\n<p>Vamos explorar os tipos mais comuns de constraints e suas fun\u00e7\u00f5es pr\u00e1ticas, com exemplos de c\u00f3digo.<\/p>\n<h3>PRIMARY KEY<\/h3>\n<p>Esta op\u00e7\u00e3o <strong>identifica exclusivamente cada linha de uma tabela<\/strong>. Ela combina unicidade e n\u00e3o permite valores nulos.<\/p>\n<p><strong>Exemplo:<\/strong><\/p>\n<pre><em>CREATE TABLE Clientes (<\/em>\r\n\r\n<em>ClienteID<\/em><em> INT PRIMARY KEY,<\/em>\r\n\r\n<em> Nome VARCHAR(100) NOT NULL<\/em>\r\n\r\n<em>);<\/em><\/pre>\n<p>Aqui, <em>ClienteID<\/em> \u00e9 uma PRIMARY KEY e possibilita que cada cliente tenha um identificador \u00fanico. Tentar inserir dois registros com o mesmo <em>ClienteID<\/em> resultar\u00e1 em erro.<\/p>\n<h3>FOREIGN KEY<\/h3>\n<p>A FOREIGN KEY <strong>cria um v\u00ednculo entre tabelas<\/strong> para que haja integridade referencial.<\/p>\n<p><strong>Exemplo:<\/strong><\/p>\n<pre><em>CREATE TABLE Pedidos (<\/em>\r\n\r\n<em>PedidoID<\/em><em> INT PRIMARY KEY,<\/em>\r\n\r\n<em>ClienteID<\/em><em> INT,<\/em>\r\n\r\n<em> FOREIGN KEY (<\/em><em>ClienteID<\/em><em>) REFERENCES Clientes(<\/em><em>ClienteID<\/em><em>)<\/em>\r\n\r\n<em>);<\/em>\r\n\r\nNesse caso, <em>ClienteID<\/em> em <em>Pedidos<\/em> deve corresponder a um registro v\u00e1lido em <em>Clientes<\/em>. Isso impede, por exemplo, um pedido associado a um cliente inexistente.<\/pre>\n<h3>UNIQUE<\/h3>\n<p>Esta constraint <strong>assegura que valores em uma coluna sejam \u00fanicos<\/strong>, a fim de permitir apenas um registro com o mesmo valor.<\/p>\n<p><strong>Exemplo:<\/strong><\/p>\n<pre><em>CREATE TABLE Produtos (<\/em>\r\n\r\n<em> ProdutoID INT PRIMARY KEY,<\/em>\r\n\r\n<em> Nome VARCHAR(100) UNIQUE<\/em>\r\n\r\n<em>);<\/em><\/pre>\n<p>Aqui, o campo <em>Nome<\/em> n\u00e3o aceita valores duplicados.<\/p>\n<h3>CHECK<\/h3>\n<p>A CHECK <strong>aplica restri\u00e7\u00f5es sobre valores espec\u00edficos de uma coluna<\/strong>, como intervalos ou condi\u00e7\u00f5es.<\/p>\n<p><strong>Exemplo:<\/strong><\/p>\n<pre><em>CREATE TABLE Funcionarios (<\/em>\r\n\r\n<em>FuncionarioID<\/em><em> INT PRIMARY KEY,<\/em>\r\n\r\n<em> Salario DECIMAL(10, 2),<\/em>\r\n\r\n<em> CHECK (Salario &gt; 0)<\/em>\r\n\r\n<em>);<\/em><\/pre>\n<p>O valor em <em>Salario<\/em> deve ser maior do que zero. Qualquer tentativa de inserir valores negativos ser\u00e1 rejeitada.<\/p>\n<h3>DEFAULT<\/h3>\n<p>Esta constraint <strong>define um valor padr\u00e3o para colunas em que nenhum dado foi inserido<\/strong>.<\/p>\n<p><strong>Exemplo:<\/strong><\/p>\n<pre><em>CREATE TABLE Usuarios (<\/em>\r\n\r\n<em>UsuarioID<\/em><em> INT PRIMARY KEY,<\/em>\r\n\r\n<em> Ativo BOOLEAN DEFAULT TRUE<\/em>\r\n\r\n<em>);<\/em><\/pre>\n<p>Se nenhum valor for especificado em<em> Ativo<\/em>, o padr\u00e3o ser\u00e1 TRUE.<\/p>\n<h3>NOT NULL<\/h3>\n<p>Este tipo <strong>faz com que uma coluna n\u00e3o aceite valores nulos<\/strong>.<\/p>\n<p><strong>Exemplo:<\/strong><\/p>\n<pre><em>CREATE TABLE Contas (<\/em>\r\n\r\n<em> ContaID INT PRIMARY KEY,<\/em>\r\n\r\n<em> Email VARCHAR(100) NOT NULL<\/em>\r\n\r\n<em>);<\/em><\/pre>\n<p>O campo <em>Email<\/em> exige um valor v\u00e1lido em todos os registros.<\/p>\n<h3>INDEX<\/h3>\n<p>Embora n\u00e3o seja tecnicamente uma constraint, INDEX <strong>otimiza a busca por dados<\/strong>.<\/p>\n<p><strong>Exemplo:<\/strong><\/p>\n<pre><em>CREATE INDEX <\/em><em>idx_nome<\/em><em> ON Produtos(Nome);<\/em><\/pre>\n<h3>UNIQUE COMPOSTA<\/h3>\n<p>Este tipo <strong>permite combina\u00e7\u00f5es \u00fanicas de valores em m\u00faltiplas colunas<\/strong>.<\/p>\n<p><strong>Exemplo:<\/strong><\/p>\n<pre><em>CREATE TABLE Estoque (<\/em>\r\n\r\n<em> ProdutoID INT,<\/em>\r\n\r\n<em> LocalID INT,<\/em>\r\n\r\n<em> UNIQUE (ProdutoID, LocalID)<\/em>\r\n\r\n<em>);<\/em><\/pre>\n<h2>Conclus\u00e3o<\/h2>\n<p>As constraints no SQL s\u00e3o <strong>fundamentais para a integridade e a confiabilidade do banco de dados<\/strong>, mas sua aplica\u00e7\u00e3o eficaz exige uma infraestrutura robusta.<\/p>\n<p>Para projetos de alto desempenho, o <a href=\"https:\/\/www.locaweb.com.br\/servidor-vps\/\" target=\"_blank\" rel=\"noopener noreferrer\">VPS<\/a> e o <a href=\"https:\/\/www.locaweb.com.br\/cloud\/cloud-server-pro\/\" target=\"_blank\" rel=\"noopener noreferrer\">Cloud Server Pro<\/a> da Locaweb oferecem a estabilidade e a escalabilidade necess\u00e1rias. Com esses servi\u00e7os, voc\u00ea obt\u00e9m um ambiente seguro, personaliz\u00e1vel e otimizado para lidar com demandas complexas.<\/p>\n<p>Conhe\u00e7a nossas solu\u00e7\u00f5es e invista em qualidade para impulsionar seus sistemas com confian\u00e7a!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>As constraints no SQL s\u00e3o regras que garantem a veracidade e a consist\u00eancia dos dados em um banco de dados. Por isso, us\u00e1-las corretamente \u00e9 essencial para sistemas confi\u00e1veis e seguros. Neste guia, voc\u00ea vai entender como usar as constraints no SQL, como habilit\u00e1-las e desabilit\u00e1-las, o que s\u00e3o, para&#8230;<\/p>\n","protected":false},"author":48,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"ht-kb-category":[118],"ht-kb-tag":[],"class_list":["post-37683","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-vps-locaweb"],"_links":{"self":[{"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/ht-kb\/37683","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/ht-kb"}],"about":[{"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/users\/48"}],"replies":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/comments?post=37683"}],"version-history":[{"count":1,"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/ht-kb\/37683\/revisions"}],"predecessor-version":[{"id":37684,"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/ht-kb\/37683\/revisions\/37684"}],"wp:attachment":[{"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/media?parent=37683"}],"wp:term":[{"taxonomy":"ht_kb_category","embeddable":true,"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/ht-kb-category?post=37683"},{"taxonomy":"ht_kb_tag","embeddable":true,"href":"https:\/\/www.locaweb.com.br\/ajuda\/wp-json\/wp\/v2\/ht-kb-tag?post=37683"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}