<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivo para MySQL - Bóson Treinamentos em Ciência e Tecnologia</title>
	<atom:link href="https://www.bosontreinamentos.com.br/tag/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bosontreinamentos.com.br/tag/mysql/</link>
	<description>Artigos e Tutoriais sobre Desenvolvimento de Software, Bancos de Dados SQL, Linux, Lógica de Programação, Inteligência Artificial, Hardware, Eletrônica, Arduino, Técnicas e Teorias de Estudo e Aprendizagem, Carreira em TI, Ciências Cognitivas, e muito mais!</description>
	<lastBuildDate>Wed, 09 Jul 2025 11:09:45 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.6</generator>
	<item>
		<title>Como Exportar Tabela MySQL para CSV – Tutorial Prático</title>
		<link>https://www.bosontreinamentos.com.br/mysql/como-exportar-dados-de-uma-tabela-como-arquivo-csv-no-mysql/</link>
					<comments>https://www.bosontreinamentos.com.br/mysql/como-exportar-dados-de-uma-tabela-como-arquivo-csv-no-mysql/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Mon, 03 Jun 2024 17:47:40 +0000</pubDate>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=18279</guid>

					<description><![CDATA[<p>Exportar dados de uma tabela como arquivo CSV no MySQL Em um artigo anterior mostrei como carregar um arquivo CSV em uma tabela no MySQL. Agora vou mostrar como realizar o processo inverso &#8211; como exportar os dados de uma tabela de um banco de dados MySQL para um arquivo CSV, usando declarações SQL. Para tal usaremos a declaração SQL INTO OUTFILE (literalmente, &#8220;dentro de um arquivo externo&#8220;), cuja sintaxe básica é a seguinte: SELECT colunas FROM tabela INTO OUTFILE 'caminho/arquivo.csv' FIELDS TERMINATED BY 'delimitador' ENCLOSED BY 'caractere' LINES TERMINATED BY 'tipo_quebra'; Onde temos que: SELECT &#8211; Aqui informamos os nomes das colunas que farão parte do arquivo CSV FROM &#8211; Especificamos a tabela a ser consultada (para incluir dados de mais de uma tabela, podemos usar INNER JOIN) INTO OUTFILE – Determina o nome do arquivo e local onde o conteúdo da tabela será exportado no formato CSV. FIELDS TERMINATED BY – Aqui devemos informar qual delimitador (separador de campos) é desejado no arquivo CSV. ENCLOSED BY – Usado para especificar que aspas duplas &#8220;&#8221; englobam valores de dados LINES TERMINATED BY – Especifica o código ou caractere usado para indicar quebra de linha. Vamos a alguns exemplos de [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/mysql/como-exportar-dados-de-uma-tabela-como-arquivo-csv-no-mysql/">Como Exportar Tabela MySQL para CSV – Tutorial Prático</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Exportar dados de uma tabela como arquivo CSV no MySQL</h1>
<p>Em um artigo anterior mostrei <a href="http://www.bosontreinamentos.com.br/mysql/como-carregar-um-arquivo-csv-em-tabela-no-mysql/">como carregar um arquivo CSV em uma tabela no MySQL</a>. Agora vou mostrar como realizar o processo inverso &#8211; como exportar os dados de uma tabela de um banco de dados MySQL para um arquivo CSV, usando declarações SQL.</p>
<p>Para tal usaremos a declaração SQL <strong>INTO OUTFILE</strong> (literalmente, &#8220;<em>dentro de um arquivo externo</em>&#8220;), cuja sintaxe básica é a seguinte:</p>
<pre><strong><span style="color: #800080;">SELECT colunas</span></strong>
<strong><span style="color: #800080;">FROM tabela</span></strong>
<strong><span style="color: #800080;">INTO OUTFILE '<em>caminho/arquivo.csv</em>'</span></strong>
<strong><span style="color: #800080;">FIELDS TERMINATED BY '<em>delimitador'</em></span></strong>
<strong><span style="color: #800080;">ENCLOSED BY '<em>caractere'</em></span></strong>
<strong><span style="color: #800080;">LINES TERMINATED BY '<em>tipo_quebra'</em>;</span></strong></pre>
<p>Onde temos que:</p>
<ul>
<li><strong>SELECT</strong> &#8211; Aqui informamos os nomes das colunas que farão parte do arquivo CSV</li>
<li><strong>FROM</strong> &#8211; Especificamos a tabela a ser consultada (para incluir dados de mais de uma tabela, podemos usar <a href="https://www.bosontreinamentos.com.br/mysql/mysql-inner-join-consultar-dados-em-duas-ou-mais-tabelas-29/">INNER JOIN</a>)</li>
<li><strong>INTO OUTFILE</strong> – Determina o nome do arquivo e local onde o conteúdo da tabela será exportado no formato CSV.</li>
<li><strong>FIELDS TERMINATED BY</strong> – Aqui devemos informar qual delimitador (separador de campos) é desejado no arquivo CSV.</li>
<li><strong>ENCLOSED BY</strong> – Usado para especificar que aspas duplas &#8220;&#8221; englobam valores de dados</li>
<li><strong>LINES TERMINATED BY</strong> – Especifica o código ou caractere usado para indicar quebra de linha.</li>
</ul>
<p>Vamos a alguns exemplos de exportação de arquivos CSV no MySQL.</p>
<h3>Exemplo 01</h3>
<p>Vejamos um exemplo, usando a tabela de autores que importamos na lição passada. Vamos exportar o conteúdo dessa tabela para um arquivo CSV de nome autores_bkp.csv:</p>
<pre><strong><span style="color: #ff0000;">SELECT ID_autor, Nome_Autor, Sobrenome_Autor</span></strong>
<strong><span style="color: #ff0000;">FROM tbl_autores</span></strong>
<strong><span style="color: #ff0000;">INTO OUTFILE 'C:/SQL/autores_bkp.csv';</span></strong></pre>
<div id="attachment_18297" style="width: 427px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-18297" class="wp-image-18297 size-full" title="Exportar arquivo CSV de tabela em banco MySQL" src="https://www.bosontreinamentos.com.br/wp-content/uploads/2022/06/exportar-arquivo-csv-mysql-01.png" alt="Exemplo de comando SELECT INTO OUTFILE no MySQL" width="417" height="215" /><p id="caption-attachment-18297" class="wp-caption-text">Tabela exportada como CSV</p></div>
<p>Se nenhuma opção for informada, será empregado o caractere de tabulação como delimitador, por padrão.</p>
<h3>Exemplo 02</h3>
<p>Podemos especificar um delimitador diferente e outras configurações da seguinte forma:</p>
<pre><strong><span style="color: #ff0000;">SELECT ID_autor, Nome_Autor, Sobrenome_Autor</span></strong>
<strong><span style="color: #ff0000;">FROM tbl_autores</span></strong>
<strong><span style="color: #ff0000;">INTO OUTFILE 'C:/SQL/autores_bkp.csv'</span></strong>
<strong><span style="color: #ff0000;">FIELDS TERMINATED BY ','</span></strong>
<strong><span style="color: #ff0000;">ENCLOSED BY '"'</span></strong>
<strong><span style="color: #ff0000;">LINES TERMINATED BY '\n';</span></strong></pre>
<div id="attachment_18298" style="width: 412px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-18298" class="wp-image-18298 size-full" title="Exportar arquivo CSV de tabela em banco MySQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2022/06/exportar-arquivo-csv-mysql-02.png" alt="Exportar arquivo CSV de tabela em banco MySQL" width="402" height="212" /><p id="caption-attachment-18298" class="wp-caption-text">Tabela exportada com opções diferentes</p></div>
<p>Neste caso usamos a vírgula como delimitador, e as aspas duplas &#8220;&#8221; para englobar os valores de dados.</p>
<h3>Exemplo 03</h3>
<p>E se quisermos incluir também os nomes das colunas como títulos? Neste caso, podemos usar a declaração UNION, como segue:</p>
<pre><strong><span style="color: #ff0000;">(SELECT 'ID_autor', 'Nome_Autor', 'Sobrenome_Autor')</span></strong>
<strong><span style="color: #ff0000;">UNION</span></strong>
<strong><span style="color: #ff0000;">SELECT ID_autor, Nome_Autor, Sobrenome_Autor</span></strong>
<strong><span style="color: #ff0000;">FROM tbl_autores</span></strong>
<strong><span style="color: #ff0000;">INTO OUTFILE 'C:/SQL/autores_bkp.csv'</span></strong>
<strong><span style="color: #ff0000;">FIELDS TERMINATED BY ','</span></strong>
<strong><span style="color: #ff0000;">LINES TERMINATED BY '\n';</span></strong></pre>
<div id="attachment_18299" style="width: 585px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-18299" class="wp-image-18299 size-full" title="Exportar arquivo CSV de tabela em banco MySQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2022/06/exportar-arquivo-csv-mysql-03.png" alt="Exportar arquivo CSV de tabela em banco MySQL" width="575" height="245" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2022/06/exportar-arquivo-csv-mysql-03.png 575w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/06/exportar-arquivo-csv-mysql-03-420x179.png 420w" sizes="auto, (max-width: 575px) 100vw, 575px" /><p id="caption-attachment-18299" class="wp-caption-text">Tabela exportada com CSV com cabeçalhos de colunas</p></div>
<p>Note agora que a primeira linha do arquivo contém nomes de colunas, conforme informado na primeira declaração SELECT, antes da palavra-chave UNION. Não usei nesse caso as aspas duplas para englobar os dados (opção ENCLOSED BY).</p>
<p>É isso aí! Mostrei um processo simples para salvar os dados de tabelas do MySQL em um arquivo separado por vírgulas (CSV), com alguns exemplos de codificação, que pode ser aberto em editores de planilhas ou ainda importado em outros bancos de dados.</p>
<p>Prefere assistir a uma aula? Então assista ao vídeo da Bóson Treinamentos no YouTube sobre Arquivos CSV no MySQL:</p>
<p><iframe loading="lazy" title="YouTube video player" src="https://www.youtube.com/embed/5ddHcVBusQg?si=mV4STXday0y_XeLq" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<h3>Leia Também: <a href="https://www.bosontreinamentos.com.br/mysql/curso-de-mysql-grant-e-revoke-definindo-privilegios-de-acesso-aos-bancos-de-dados/">Definir privilégios de acesso a bancos de dados MySQL</a></h3>
<h2>Perguntas Frequentes (FAQ)</h2>
<h4><strong>1. Como eu exporto uma tabela inteira do MySQL  para CSV usando SQL?</strong></h4>
<p>Para isso podemos usar a instrução SQL a seguir:</p>
<pre><strong>SELECT * </strong>
<strong>FROM nome_da_tabela </strong>
<strong>INTO OUTFILE '/caminho/arquivo.csv' </strong>
<strong>FIELDS TERMINATED BY ',' </strong>
<strong>OPTIONALLY ENCLOSED BY '"' </strong>
<strong>LINES TERMINATED BY '\n';</strong></pre>
<p>Isso exporta todas as linhas e colunas para o arquivo especificado.</p>
<h4><strong>2. Posso customizar o formato do CSV, como separador ou delimitação de texto?</strong></h4>
<p>Sim, você pode, usando por exemplo as seguintes opções:</p>
<ul>
<li>TERMINATED BY &#8216;,&#8217; para definir o separador de campos (como vírgula ou ponto e vírgula),</li>
<li>OPTIONALLY ENCLOSED BY &#8216;&#8221;&#8216; para envolver campos de texto com aspas,</li>
<li>LINES TERMINATED BY &#8216;\n&#8217; (ou &#8216;\r\n&#8217;) para controlar a quebra de linha</li>
</ul>
<h4>3. Onde o arquivo CSV é criado após a exportação?</h4>
<p>Se não for empregado um caminho absoluto, o arquivo será salvo no diretório de dados do servidor MySQL.<br />
Mas se você deseja salvá-lo outro local, use o caminho completo no INTO OUTFILE e tenha a permissão adequada.</p>
<h4>4. Preciso de permissões especiais para usar INTO OUTFILE?</h4>
<p>Sim, a conta do MySQL precisa da permissão FILE, e o diretório de saída deve permitir que o servidor grave.<br />
Caso contrário, ocorrerá erro de acesso ou de permissão negada .</p>
<h4>5. Como garantir que o arquivo CSV tenha cabeçalho com nomes de colunas?</h4>
<p>O INTO OUTFILE só exporta dados, sem cabeçalhos.<br />
Para incluir nomes de colunas, pode-se usar uma cláusula UNION ou aplicar um SELECT &#8216;col1&#8217;, &#8216;col2&#8217;, … UNION ALL SELECT * … antes do INTO OUTFILE.</p>
<h4>6. INTO OUTFILE sobrescreve arquivos existentes?</h4>
<p>Não. Se o arquivo já existir, o MySQL retorna um erro.<br />
Você deve removê-lo manualmente antes de executar novamente o comando.</p>
<h4>7. Há limitações para exportar via SELECT INTO OUTFILE em conjuntos Unix ou combinados UNION?</h4>
<p>Sim, INTO OUTFILE deve vir no final da instrução SELECT.<br />
Evite colocá-lo dentro de <a href="https://www.bosontreinamentos.com.br/bancos-de-dados/o-que-e-uma-subconsulta-sql-subquery/">subconsultas</a> ou antes de cláusulas UNION para evitar erros</p>
<h4>8. Posso usar INTO DUMPFILE em vez de OUTFILE para CSV?</h4>
<p>Não. A opção INTO DUMPFILE gera um único registro bruto sem delimitadores, sendo útil apenas para binários. Para arquivos CSV, devemos usar a opção INTO OUTFILE.</p>
<h3>Colabore com a Bóson Treinamentos</h3>
<p>Ajude o canal adquirindo meus cursos na Udemy:</p>
<ul>
<li>Bancos de Dados com MySQL Básico: <a href="https://bit.ly/35QdWE4" target="_blank" rel="noopener">https://bit.ly/35QdWE4</a></li>
<li>Lógica de Programação com Português Estruturado: <a href="https://bit.ly/3QKPn22" target="_blank" rel="noopener">https://bit.ly/3QKPn22</a></li>
<li>Programação em Python do Zero: <a href="https://bit.ly/python-boson" target="_blank" rel="noopener">https://bit.ly/python-boson</a></li>
</ul>
<p>Adquira também livros e outros itens na loja da Bóson Treinamentos na Amazon e ajude o canal a se manter e crescer: <a href="https://www.amazon.com.br/shop/bosontreinamentos" target="_blank" rel="noopener">https://www.amazon.com.br/shop/bosontreinamentos</a></p>
<p>O post <a href="https://www.bosontreinamentos.com.br/mysql/como-exportar-dados-de-uma-tabela-como-arquivo-csv-no-mysql/">Como Exportar Tabela MySQL para CSV – Tutorial Prático</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/mysql/como-exportar-dados-de-uma-tabela-como-arquivo-csv-no-mysql/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Como consultar nomes de tabelas e de colunas no MySQL</title>
		<link>https://www.bosontreinamentos.com.br/mysql/como-consultar-nomes-de-tabelas-e-de-colunas-no-mysql/</link>
					<comments>https://www.bosontreinamentos.com.br/mysql/como-consultar-nomes-de-tabelas-e-de-colunas-no-mysql/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Wed, 08 May 2024 18:07:03 +0000</pubDate>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=18248</guid>

					<description><![CDATA[<p>Consultar nomes de tabelas e de colunas no MySQL Consultar os nomes de tabelas e colunas em um banco de dados MySQL é uma tarefa importante para entender a estrutura e o conteúdo dos dados armazenados, principalmente quando trabalhamos em um banco que não conhecemos muito bem. Desta forma, podemos obter uma visão abrangente da organização dos dados e identificar os elementos essenciais para  a execução de consultas subsequentes e operações variadas de manipulação de dados. Neste artigo abordo dois métodos que podem ser empregados para consultar nomes de tabelas e colunas em bancos MySQL, auxiliando a compreensão da estrutura de seus bancos de dados. 1. Mostrar os nomes das tabelas de um banco de dados específico SELECT TABLE NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'db_biblioteca'; Neste exemplo: SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES: Aqui especificamos que queremos selecionar a coluna TABLE_NAME, que contém os nomes das tabelas em um banco de dados. Essa coluna pertence à tabela interna INFORMATION_SCHEMA.TABLES, que é uma tabela especial no MySQL que contém informações sobre as tabelas em um banco de dados WHERE TABLE_SCHEMA = &#8216;db_biblioteca&#8217;;: Esta parte da declaração filtra os resultados para incluir apenas as tabelas que pertencem ao banco de dados especificado, de [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/mysql/como-consultar-nomes-de-tabelas-e-de-colunas-no-mysql/">Como consultar nomes de tabelas e de colunas no MySQL</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Consultar nomes de tabelas e de colunas no MySQL</h2>
<p>Consultar os nomes de tabelas e colunas em um banco de dados MySQL é uma tarefa importante para entender a estrutura e o conteúdo dos dados armazenados, principalmente quando trabalhamos em um banco que não conhecemos muito bem.</p>
<p>Desta forma, podemos obter uma visão abrangente da organização dos dados e identificar os elementos essenciais para  a execução de consultas subsequentes e operações variadas de manipulação de dados.</p>
<p>Neste artigo abordo dois métodos que podem ser empregados para consultar nomes de tabelas e colunas em bancos MySQL, auxiliando a compreensão da estrutura de seus bancos de dados.</p>
<p><strong>1. Mostrar os nomes das tabelas de um banco de dados específico</strong></p>
<pre><span style="color: #ff0000;"><strong>SELECT TABLE NAME FROM INFORMATION_SCHEMA.TABLES</strong></span>
<span style="color: #ff0000;"><strong>WHERE TABLE_SCHEMA = 'db_biblioteca';</strong></span></pre>
<p>Neste exemplo:</p>
<ul>
<li><strong>SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES</strong>: Aqui especificamos que queremos selecionar a coluna TABLE_NAME, que contém os nomes das tabelas em um banco de dados.<br />
Essa coluna pertence à tabela interna INFORMATION_SCHEMA.TABLES, que é uma tabela especial no MySQL que contém informações sobre as tabelas em um banco de dados</li>
<li><strong>WHERE TABLE_SCHEMA = &#8216;db_biblioteca&#8217;;</strong>: Esta parte da declaração filtra os resultados para incluir apenas as tabelas que pertencem ao banco de dados especificado, de nome db_biblioteca no exemplo.<br />
TABLE_SCHEMA é uma coluna na tabela INFORMATION_SCHEMA.TABLES que contém os nomes dos bancos de dados aos quais as tabelas pertencem.</li>
</ul>
<p><strong>Resultado:</strong><img loading="lazy" decoding="async" class="aligncenter wp-image-18249 size-full" title="Descobrir nomes de tabelas em um banco de dados MySQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2022/06/nomes-tabelas-mysql-banco-de-dados.png" alt="Descobrir nomes de tabelas em um banco de dados MySQL" width="97" height="117" /></p>
<p><strong>2. Mostrar os nomes das colunas de uma tabela específica no banco</strong></p>
<pre><span style="color: #ff0000;"><strong>SELECT COLUMN_NAME </strong></span><span style="color: #ff0000;"><strong>FROM INFORMATION_SCHEMA.COLUMNS</strong></span>
<span style="color: #ff0000;"><strong>WHERE TABLE_SCHEMA='db_biblioteca' AND TABLE_NAME='tbl_autores';</strong></span></pre>
<p>Neste exemplo temos que:</p>
<p><strong>SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS</strong>: Vamos consultar os nomes das colunas da tabela INFORMATION_SCHEMA.COLUMNS, que é uma tabela especial no MySQL que contém informações sobre as colunas em todas as tabelas de todos os bancos de dados. </p>
<p><strong>WHERE TABLE_SCHEMA=&#8217;db_biblioteca AND TABLE_NAME=&#8217;tbl_autores&#8221;</strong>: Aqui filtramos os resultados para incluir apenas as tabelas que pertencem ao banco de dados db_biblioteca,combinado com nome da tabela do banco de dados desejada (no caso, tbl_autores) por meio de um operador lógico AND. </p>
<h3>Resultado:<img loading="lazy" decoding="async" class="aligncenter wp-image-18250 size-full" title="Descobrir nomes de colunas em uma tabela de banco de dados MySQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2022/06/nomes-colunas-tabela-mysql-banco-de-dados.png" alt="Descobrir nomes de colunas em uma tabela de banco de dados MySQL" width="130" height="87" /></h3>
<p>É isso aí! Com essas técnicas podemos verificar rapidamente a estrutura de um banco de dados, descobrindo os nomes de suas tabelas e respectivas colunas no MySQL.</p>
<h3>Referências</h3>
<ul>
<li>INFORMATION_SCHEMA Tables. <a href="https://dev.mysql.com/doc/refman/8.0/en/information-schema.html" target="_blank" rel="noopener">https://dev.mysql.com/doc/refman/8.0/en/information-schema.html</a></li>
</ul>
<h3>Colabore com a Bóson Treinamentos</h3>
<p>Ajude o canal adquirindo meus cursos na Udemy:</p>
<ul>
<li>Bancos de Dados com MySQL Básico: <a href="https://bit.ly/35QdWE4" target="_blank" rel="noopener">https://bit.ly/35QdWE4</a></li>
<li>Lógica de Programação com Português Estruturado: <a href="https://bit.ly/3QKPn22" target="_blank" rel="noopener">https://bit.ly/3QKPn22</a></li>
<li>Programação em Python do Zero: <a href="https://bit.ly/python-boson" target="_blank" rel="noopener">https://bit.ly/python-boson</a></li>
</ul>
<p>Adquira também livros e outros itens na loja da Bóson Treinamentos na Amazon e ajude o canal a se manter e crescer: <a href="https://www.amazon.com.br/shop/bosontreinamentos" target="_blank" rel="noopener">https://www.amazon.com.br/shop/bosontreinamentos</a></p>
<p>O post <a href="https://www.bosontreinamentos.com.br/mysql/como-consultar-nomes-de-tabelas-e-de-colunas-no-mysql/">Como consultar nomes de tabelas e de colunas no MySQL</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/mysql/como-consultar-nomes-de-tabelas-e-de-colunas-no-mysql/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Como retornar linhas aleatórias em uma consulta no MySQL</title>
		<link>https://www.bosontreinamentos.com.br/mysql/como-retornar-linhas-aleatorias-em-uma-consulta-no-mysql/</link>
					<comments>https://www.bosontreinamentos.com.br/mysql/como-retornar-linhas-aleatorias-em-uma-consulta-no-mysql/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Thu, 06 Apr 2023 10:47:38 +0000</pubDate>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[Matemática]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=19176</guid>

					<description><![CDATA[<p>Retornar linhas aleatórias em uma consulta no MySQL com função RAND() Suponha uma tabela de banco de dados com uma grande quantidade de registros. Desejamos retornar 10 registros aleatórios dessa tabela, para fins, por exemplo, de pesquisa ou amostragem. Ou ainda, por exemplo, uma tabela com nomes de clientes de uma loja, a partir da qual queremos &#8220;sortear&#8221; um número determinado de usuários. Como retornar esses registros de forma aleatória? Existem diferentes formas de retornar linhas aleatórias de uma tabela em um banco de dados, dependendo do sistema de gerenciamento de banco de dados (SGBD) que estivermos usando. Neste tutorial mostrarei com realizar esse procedimento em um banco MySQL, usando a função RAND(). Como funciona a função RAND() no MySQL A função matemática RAND() no MySQL é utilizada para gerar um número aleatório. Quando a função é chamada sem nenhum argumento, ela retorna um número aleatório de ponto flutuante entre 0 e 1: SELECT RAND(); Essa declaração gera um número aleatório de ponto flutuante no intervalo entre 0 e 1. Se quisermos gerar um número aleatório dentro de um intervalo específico, devemos ajustar a faixa de valores gerados efetuando um calculo com o retorno obtido pela função RAND(). Por exemplo, [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/mysql/como-retornar-linhas-aleatorias-em-uma-consulta-no-mysql/">Como retornar linhas aleatórias em uma consulta no MySQL</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Retornar linhas aleatórias em uma consulta no MySQL com função RAND()</h2>
<p>Suponha uma tabela de banco de dados com uma grande quantidade de registros. Desejamos retornar 10 registros aleatórios dessa tabela, para fins, por exemplo, de pesquisa ou amostragem.</p>
<p>Ou ainda, por exemplo, uma tabela com nomes de clientes de uma loja, a partir da qual queremos &#8220;sortear&#8221; um número determinado de usuários.</p>
<p><em><strong>Como retornar esses registros de forma aleatória?</strong></em></p>
<p>Existem diferentes formas de retornar linhas aleatórias de uma tabela em um banco de dados, dependendo do sistema de gerenciamento de banco de dados (SGBD) que estivermos usando. Neste tutorial mostrarei com realizar esse procedimento em um banco MySQL, usando a <a href="https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_rand" target="_blank" rel="noopener">função RAND()</a>.</p>
<h3>Como funciona a função RAND() no MySQL</h3>
<p>A função matemática RAND() no <a href="http://www.bosontreinamentos.com.br/curso-completo-de-mysql/">MySQL</a> é utilizada para gerar um número aleatório. Quando a função é chamada sem nenhum argumento, ela retorna um número aleatório de ponto flutuante entre 0 e 1:</p>
<pre><strong>SELECT RAND();</strong></pre>
<p>Essa declaração gera um número aleatório de ponto flutuante no intervalo entre 0 e 1.</p>
<p>Se quisermos gerar um número aleatório dentro de um intervalo específico, devemos ajustar a faixa de valores gerados efetuando um calculo com o retorno obtido pela função RAND(). Por exemplo, se quisermos gerar um número aleatório de ponto flutuante entre 1 e 100, podemos usar a seguinte expressão:</p>
<pre><strong>SELECT RAND() * 100;</strong></pre>
<p>Caso desejemos um número aleatório inteiro, podemos combinar a função FLOOR() com a função RAND() para realizar um arredondamento e eliminar as casas decimais:</p>
<pre><strong>SELECT FLOOR(1 + RAND() * 100) AS Numero_Aleatorio;</strong></pre>
<p>Cada vez que a função for invocada irá gerar um número inteiro aleatório diferente.</p>
<p>A função RAND() usa um algoritmo para gerar números <em>pseudoaleatórios</em>. Esse algoritmo usa um valor inicial chamado &#8220;seed&#8221; (&#8220;semente&#8221;) para começar a gerar a sequência de números aleatórios. Se não for especificado um valor de &#8220;seed&#8221;, o MySQL usará o valor atual do relógio do sistema como semente.</p>
<p>No entanto, se quisermos que a sequência de números aleatórios seja a mesma em todas as chamadas da função RAND() durante uma execução do MySQL, podemos especificar um valor de seed empregando a função rand(). Por exemplo:</p>
<pre><strong>SELECT RAND(100) AS Numero_Aleatorio;</strong></pre>
<p>Esta consulta retornará sempre o mesmo número aleatório, desde que seja executada na mesma instância do MySQL com o mesmo valor de seed (100).</p>
<p>Outro exemplo: Retornar um número<strong> decimal</strong> aleatório &gt;= 5 e &lt; 10:</p>
<pre><strong>SELECT 5 + RAND()*(10-5);</strong></pre>
<p>Já para retornar um número <strong>inteiro</strong> aleatório &gt;= 5 e &lt; 10, arredondamos o valor gerado com o emprego da função FLOOR():</p>
<pre><strong>SELECT FLOOR(5 + RAND()*(10-5)) AS 'Inteiro Aleatório';</strong></pre>
<h3>Como retornar registros aleatórios com RAND()</h3>
<p>Uma forma de retornar registros aleatórios é utilizando a função RAND() para gerar um número aleatório para cada registro da tabela, e então ordenar os resultados por esse número com a <a href="http://www.bosontreinamentos.com.br/mysql/mysql-order-by-consultas-com-ordenacao-13/">cláusula ORDER BY</a>. No MySQL, por exemplo, podemos utilizar a seguinte declaração SQL para retornar 3 registros aleatórios de um tabela com dados de livros de nome tbl_Livros:</p>
<pre><strong>SELECT Nome_Livro FROM tbl_Livros ORDER BY RAND() LIMIT 3;</strong></pre>
<p>Neste caso são gerados números aleatórios para cada linha da tabela, e então essas linhas são ordenadas, sendo retornadas 3 delas por conta da limitação com LIMIT 3. Cada vez que a consulta é realizada, um conjunto diferente de três registros é retornado, mostrando que o dataset gerado é aleatório.</p>
<p>Observe que, ao usar a função RAND() combinada com a cláusula ORDER BY, poderá haver uma certa sobrecarga na performance do banco, especialmente para grandes tabelas, pois o MySQL precisa gerar um valor aleatório para cada linha da tabela antes de classificá-la.</p>
<p>Portanto, é importante avaliar o impacto na performance antes de usar essa técnica em uma tabela grande ou em uma consulta que precise ser executada com frequência.</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/mysql/como-retornar-linhas-aleatorias-em-uma-consulta-no-mysql/">Como retornar linhas aleatórias em uma consulta no MySQL</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/mysql/como-retornar-linhas-aleatorias-em-uma-consulta-no-mysql/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Como desinstalar totalmente o MySQL Server do Linux Debian 11 bullseye</title>
		<link>https://www.bosontreinamentos.com.br/mysql/como-desinstalar-totalmente-o-mysql-server-do-linux-debian-11-bullseye/</link>
					<comments>https://www.bosontreinamentos.com.br/mysql/como-desinstalar-totalmente-o-mysql-server-do-linux-debian-11-bullseye/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Tue, 07 Mar 2023 11:52:57 +0000</pubDate>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[SQL]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=18896</guid>

					<description><![CDATA[<p>Desinstalar totalmente o MySQL Server do Linux (Ubuntu, Debian, etc.) Uma tarefa comum ao realizar gerenciamento de um servidor é a desinstalação de pacotes ou serviços, um processo rápido e, normalmente, tranquilo. Porém, nem sempre uma remoção simples é efetiva, pois é comum que, ao remover um serviço do sistema, dependências não mais necessárias e arquivos de configuração ainda permaneçam no servidor, ocupando espaço em disco e, possivelmente, podendo vir a causar problemas caso o serviço precise ser reinstalado no futuro. Neste tutorial vou mostrar como desinstalar totalmente o MySQL Server do Linux Debian 11 &#8220;bullseye&#8221; e outras distros derivadas, como o Linux Mint e o Ubuntu. Desinstalação do MySQL do Linux Vamos aos passos necessários para realizar a desinstalação do MySQL Server do Linux Debian e derivados. 1. Parar o serviço do MySQL $ sudo systemctl stop mysql 2. Desinstalar os pacotes Aqui nós temos duas opções: a. Desinstalar todos os pacotes relacionados ao MySQL, incluindo o servidor, clientes, ferramentas, etc. (objetivo principal do tutorial): $ sudo apt purge mysql* b. Ou então podemos remover apenas o pacote do MySQL Server, mantendo os demais pacotes e configurações: $ sudo apt purge mysql-server 3. Remover dependências não mais utilizadas e [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/mysql/como-desinstalar-totalmente-o-mysql-server-do-linux-debian-11-bullseye/">Como desinstalar totalmente o MySQL Server do Linux Debian 11 bullseye</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Desinstalar totalmente o MySQL Server do Linux (Ubuntu, Debian, etc.)</h2>
<p>Uma tarefa comum ao realizar gerenciamento de um servidor é a desinstalação de pacotes ou serviços, um processo rápido e, normalmente, tranquilo. Porém, nem sempre uma remoção simples é efetiva, pois é comum que, ao remover um serviço do sistema, dependências não mais necessárias e arquivos de configuração ainda permaneçam no servidor, ocupando espaço em disco e, possivelmente, podendo vir a causar problemas caso o serviço precise ser reinstalado no futuro.</p>
<p>Neste tutorial vou mostrar como desinstalar totalmente o <a href="http://www.bosontreinamentos.com.br/curso-completo-de-mysql/">MySQL Server</a> do <a href="https://www.debian.org/" target="_blank" rel="noopener">Linux Debian 11 &#8220;bullseye&#8221;</a> e outras distros derivadas, como o Linux Mint e o Ubuntu.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-18900" title="Desinstalar MySQL do Linux" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/03/MySQL-Server-Logo-Linux-Debian.png" alt="Desinstalar MySQL do Linux" width="501" height="259" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/03/MySQL-Server-Logo-Linux-Debian.png 640w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/03/MySQL-Server-Logo-Linux-Debian-420x217.png 420w" sizes="auto, (max-width: 501px) 100vw, 501px" /></p>
<h3>Desinstalação do MySQL do Linux</h3>
<p>Vamos aos passos necessários para realizar a desinstalação do MySQL Server do Linux Debian e derivados.</p>
<h4>1. Parar o serviço do MySQL</h4>
<pre><strong>$ sudo systemctl stop mysql</strong></pre>
<h4>2. Desinstalar os pacotes</h4>
<p>Aqui nós temos duas opções:</p>
<p>a. Desinstalar todos os pacotes relacionados ao MySQL, incluindo o servidor, clientes, ferramentas, etc. (objetivo principal do tutorial):</p>
<pre><strong>$ sudo apt purge mysql*</strong></pre>
<p>b. Ou então podemos remover apenas o pacote do MySQL Server, mantendo os demais pacotes e configurações:</p>
<pre><strong>$ sudo apt purge mysql-server</strong></pre>
<h4>3. Remover dependências não mais utilizadas e limpar o cache</h4>
<pre><strong>$ sudo apt autoremove</strong>
<strong>$ sudo apt autoclean</strong></pre>
<p>Após a execução desses comandos, o MySQL estará desinstalado o sistema. Porém, existem alguns passos extras opcionais que podemos realizar, para evitar problemas em uma futura nova instalação do MySQL.</p>
<p>Apesar de opcionais, os passos a seguir são altamente recomendados.</p>
<h4>4. Remover as configurações do MySQL</h4>
<p>a. Remover os arquivos de configuração presentes no diretório <strong>/etc/mysql</strong>:</p>
<pre><strong>$ sudo rm -rf /etc/mysql</strong></pre>
<h4>5. Remover dados de bancos de dados</h4>
<p>a. Armazenamento de bancos de dados no diretório <strong>/var/lib/mysql</strong>:</p>
<pre><strong>$ sudo rm -rf /var/lib/mysql</strong></pre>
<h4>6. Verificar o resultado da remoção</h4>
<p>Por fim, verificamos se o mysql realmente foi eliminado do sistema:</p>
<pre><strong>dpkg -l | grep -i mysql</strong></pre>
<p>Após realizar todos os passos, recomendo reiniciar o servidor.</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/mysql/como-desinstalar-totalmente-o-mysql-server-do-linux-debian-11-bullseye/">Como desinstalar totalmente o MySQL Server do Linux Debian 11 bullseye</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/mysql/como-desinstalar-totalmente-o-mysql-server-do-linux-debian-11-bullseye/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Comandos DML SQL e sua sintaxe</title>
		<link>https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-dml-sql-e-sua-sintaxe/</link>
					<comments>https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-dml-sql-e-sua-sintaxe/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 18 Nov 2022 19:53:14 +0000</pubDate>
				<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=18677</guid>

					<description><![CDATA[<p>Comandos DML SQL e sua sintaxe No primeiro artigo da série sobre famílias de comandos SQL, estudamos os comandos DDL (Data Definition Language). Neste segundo artigo discuto os comandos SQL do grupo que chamamos de &#8220;comandos DML&#8221;, ou Data Manipulation Language (Linguagem de Manipulação de Dados), com a sintaxe das principais declarações e exemplos gerais. O que são comandos DML? Os comandos DML são declarações SQL para manipulação de dados em tabelas, o que inclui tarefas para inserção, atualização e exclusão de registros (linhas) em uma tabela. A tabela a seguir sumariza os comandos para manipulação de dados disponíveis em SQL: Declaração DML Descrição INSERT Cria um novo registro (linha) em uma tabela UPDATE Permite modificar registros em uma tabela DELETE Exclui um ou mais registros selecionados de uma tabela SELECT INTO Realiza uma consulta em uma tabela e inclui o resultado como um novo registro em outra tabela MERGE Combina dados de múltiplas tabelas, mesclando elementos das declarações INSERT e UPDATE. Vejamos a sintaxe e um exemplo de uso de algumas dessas declarações SQL. Comandos DML Declaração INSERT Este comando permite realizar a inserção de dados em uma tabela, por meio da criação de um novo registro. Vejamos sua sintaxe [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-dml-sql-e-sua-sintaxe/">Comandos DML SQL e sua sintaxe</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Comandos DML SQL e sua sintaxe</h2>
<p>No primeiro artigo da série sobre famílias de comandos SQL, estudamos os <a href="http://www.bosontreinamentos.com.br/bancos-de-dados/comandos-ddl-sql-e-sua-sintaxe/">comandos DDL (<em>Data Definition Language</em>)</a>. Neste segundo artigo discuto os comandos SQL do grupo que chamamos de &#8220;comandos DML&#8221;, ou <em><strong>Data Manipulation Language</strong></em> (Linguagem de Manipulação de Dados), com a sintaxe das principais declarações e exemplos gerais.</p>
<h3>O que são comandos DML?</h3>
<p>Os comandos DML são declarações SQL para manipulação de dados em tabelas, o que inclui tarefas para inserção, atualização e exclusão de registros (linhas) em uma tabela.</p>
<p>A tabela a seguir sumariza os comandos para manipulação de dados disponíveis em SQL:</p>
<table style="border-collapse: collapse; width: 94.8513%; height: 139px;" border="1">
<thead>
<tr>
<td style="width: 21.3725%; text-align: center;"><strong>Declaração DML</strong></td>
<td style="width: 78.6275%; text-align: center;"><strong>Descrição</strong></td>
</tr>
</thead>
<tbody>
<tr>
<td style="width: 21.3725%;">INSERT</td>
<td style="width: 78.6275%;">Cria um novo registro (linha) em uma tabela</td>
</tr>
<tr>
<td style="width: 21.3725%;">UPDATE</td>
<td style="width: 78.6275%;">Permite modificar registros em uma tabela</td>
</tr>
<tr>
<td style="width: 21.3725%;">DELETE</td>
<td style="width: 78.6275%;">Exclui um ou mais registros selecionados de uma tabela</td>
</tr>
<tr>
<td style="width: 21.3725%;">SELECT INTO</td>
<td style="width: 78.6275%;">Realiza uma consulta em uma tabela e inclui o resultado como um novo registro em outra tabela</td>
</tr>
<tr>
<td style="width: 21.3725%;">MERGE</td>
<td style="width: 78.6275%;">Combina dados de múltiplas tabelas, mesclando elementos das declarações INSERT e UPDATE.</td>
</tr>
</tbody>
</table>
<p>Vejamos a sintaxe e um exemplo de uso de algumas dessas declarações SQL.</p>
<div id="attachment_18684" style="width: 1034px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-18684" class="wp-image-18684 size-large" title="Comandos DML em bancos de dados relacionais" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2022/11/comandos-dml-bancos-dados-boson-1024x471.png" alt="Comandos DML em bancos de dados relacionais" width="1024" height="471" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2022/11/comandos-dml-bancos-dados-boson-1024x471.png 1024w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/11/comandos-dml-bancos-dados-boson-420x193.png 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/11/comandos-dml-bancos-dados-boson-768x353.png 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/11/comandos-dml-bancos-dados-boson.png 1198w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-18684" class="wp-caption-text">Comandos DML</p></div>
<h3>Declaração INSERT</h3>
<p>Este comando permite realizar a inserção de dados em uma tabela, por meio da criação de um novo registro.</p>
<p>Vejamos sua sintaxe geral e alguns exemplos.</p>
<h4>Sintaxe:</h4>
<pre><span style="color: #800080;"><strong>INSERT INTO nome_tabela(coluna1, coluna2, coluna3, ..., colunaN)</strong>
<strong>VALUES (valor1, valor2, valor3, ..., valorN);</strong></span></pre>
<p>Os valores são inseridos em cada coluna na ordem em que são discriminados na lista de valores em VALUES().</p>
<h4>Exemplo: Inserir dados na tabela de livros.</h4>
<pre><strong>INSERT INTO tbl_livros(Nome_Livro, Data_Pub, Preco_Livro, Genero, Autor, Editora)</strong>
<strong>VALUES</strong>
<strong>('Linux Command Line and Shell Scripting', '20150109', 68.35, 1, 5, 4),</strong>
<strong>('SSH, the Secure Shell', '20050517', 58.30, 1, 1, 2),</strong>
<strong>('Using Samba', '20031221', 61.45, 1, 2, 2),</strong>
<strong>('Practical Electronics for Inventors', '20160324', 67.80, 1, 13, 5);</strong></pre>
<h3>Declaração UPDATE</h3>
<p>Com a declaração UPDATE SQL podemos modificar o valor de uma ou mais colunas em um registro.</p>
<h4>Sintaxe</h4>
<pre><span style="color: #800080;"><strong>UPDATE tabela</strong></span>
<span style="color: #800080;"><strong>SET coluna(s) = novo_valor_armazenado</strong></span>
<span style="color: #800080;"><strong>WHERE coluna = valor_filtro;</strong></span></pre>
<p>Obs.: Se não for empregada a cláusula WHERE para filtrar os registros, TODOS os dados da coluna serão alterados para o mesmo valor!</p>
<h4>Exemplo</h4>
<p>Neste exemplo vamos alterar o nome de um livro na tabela tbl_livros, cujo ID é igual a 101, para &#8220;SSH, o Shell Seguro&#8221;:</p>
<pre><strong>UPDATE tbl_Livro</strong>
<strong>SET Nome_Livro = 'SSH, o Shell Seguro'</strong>
<strong>WHERE Id_Livro = 101;</strong></pre>
<h3>Declaração DELETE</h3>
<p>Com a cláusula DELETE podemos excluir registros específicos, indicados (filtrados) por meio de uma condição na cláusula WHERE</p>
<h4>Sintaxe</h4>
<pre><strong><span style="color: #800080;">DELETE FROM tabela</span></strong>
<strong><span style="color: #800080;">WHERE coluna = valor;</span></strong></pre>
<p>Obs.: Assim como acontece coma cláusula UPDATE, se não for empregada a cláusula WHERE para filtrar os registros, TODOS os dados da coluna serão afetados &#8211; no caso, excluídos para sempre! Cuidado!</p>
<h4>Exemplo</h4>
<p>Vamos excluir o autor da tabela de autores cujo id é igual a 5:</p>
<pre><strong>DELETE FROM tbl_autores</strong>
<strong>WHERE Id_Autor = 5;</strong></pre>
<h3>Declaração SELECT INTO</h3>
<p>Seleciona dados de uma ou mais tabelas e os insere em uma tabela diferente.</p>
<p>Pode ser usado, por exemplo, para criar cópias de backup de tabelas, ou ainda tabelas para relatório, contendo campos selecionados especialmente provenientes de várias tabelas distintas..</p>
<h4>Sintaxe</h4>
<pre><span style="color: #800080;"><strong>SELECT coluna(s)</strong></span>
<span style="color: #800080;"><strong>INTO nova_tabela</strong></span>
<span style="color: #800080;"><strong>FROM tabela_atual</strong></span>
<span style="color: #800080;"><strong>[WHERE campo = valor];</strong></span></pre>
<h4>Exemplo</h4>
<p>Criar uma tabela contendo somente os campos Nome_Livro e IdAutor, correspondentes aos livros cujo Id é maior do que 105:</p>
<pre><strong>SELECT Nome_Livro, IdAutor</strong>
<strong>INTO Livro_Autor</strong>
<strong>FROM tbl_livros</strong>
<strong>WHERE IdLivro &gt; 105;</strong></pre>
<p>É isso aí! No próximo artigo vamos explorar os comandos DQL (Data Query Language) em SQL.</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-dml-sql-e-sua-sintaxe/">Comandos DML SQL e sua sintaxe</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-dml-sql-e-sua-sintaxe/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Comandos DDL SQL e sua sintaxe</title>
		<link>https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-ddl-sql-e-sua-sintaxe/</link>
					<comments>https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-ddl-sql-e-sua-sintaxe/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 07 Oct 2022 15:02:11 +0000</pubDate>
				<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Oracle Database]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=18663</guid>

					<description><![CDATA[<p>Comandos DDL SQL e sua sintaxe Neste artigo discuto os comandos SQL do grupo que chamamos de &#8220;comandos DDL&#8221;, ou Data Definition Language (Linguagem de Definição de Dados), com a sintaxe das principais declarações e exemplos gerais. O que são comandos DDL &#8211; Data Definition Language Os comandos DDL são um subconjunto dos comandos da linguagem SQL cujo propósito é definir a estrutura de um banco de dados. Assim, esse comandos são empregados para criar, alterar e excluir objetos do banco, como tabelas, colunas e até mesmo o banco de dados em si. Os comandos DDL que estudaremos são os seguintes: CREATE ALTER DROP RENAME TRUNCATE Comandos DDL Declaração CREATE Este comando permite criar um objeto no banco, como uma nova tabela, visão, índice ou outro elemento estrutural. Vejamos sua sintaxe em diversos SGBDs e alguns exemplos. 1. Para criar um banco de dados no MySQL: CREATE DATABASE [IF NOT EXISTS] nome_banco; O uso dos colchetes na sintaxe indica que a cláusula é opcional. Por exemplo, para criar um banco de dados de nome db_MeusLivros: CREATE DATABASE IF NOT EXISTS db_MeusLivros; A sintaxe para outros sistemas de bancos de dados é a seguinte: Criar banco de dados no SQL Server: CREATE [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-ddl-sql-e-sua-sintaxe/">Comandos DDL SQL e sua sintaxe</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Comandos DDL SQL e sua sintaxe</h2>
<p>Neste artigo discuto os comandos SQL do grupo que chamamos de &#8220;comandos DDL&#8221;, ou <em><strong>Data Definition Language</strong></em> (Linguagem de Definição de Dados), com a sintaxe das principais declarações e exemplos gerais.</p>
<h3>O que são comandos DDL &#8211; Data Definition Language</h3>
<p>Os comandos DDL são um subconjunto dos comandos da linguagem SQL cujo propósito é definir a estrutura de um banco de dados. Assim, esse comandos são empregados para criar, alterar e excluir objetos do banco, como tabelas, colunas e até mesmo o banco de dados em si.</p>
<p>Os comandos DDL que estudaremos são os seguintes:</p>
<ul>
<li>CREATE</li>
<li>ALTER</li>
<li>DROP</li>
<li>RENAME</li>
<li>TRUNCATE</li>
</ul>
<div id="attachment_18687" style="width: 710px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-18687" class="wp-image-18687" title="Comandos DDL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2022/10/comandos-ddl-bancos-dados-boson-1024x470.png" alt="Comandos DDL - Data Definition Language" width="700" height="321" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2022/10/comandos-ddl-bancos-dados-boson-1024x470.png 1024w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/10/comandos-ddl-bancos-dados-boson-420x193.png 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/10/comandos-ddl-bancos-dados-boson-768x352.png 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/10/comandos-ddl-bancos-dados-boson.png 1199w" sizes="auto, (max-width: 700px) 100vw, 700px" /><p id="caption-attachment-18687" class="wp-caption-text">Comandos DDL</p></div>
<h3>Declaração CREATE</h3>
<p>Este comando permite criar um objeto no banco, como uma nova tabela, visão, índice ou outro elemento estrutural.</p>
<p>Vejamos sua sintaxe em diversos SGBDs e alguns exemplos.</p>
<h4>1. Para criar um banco de dados no MySQL:</h4>
<pre>CREATE DATABASE [IF NOT EXISTS] nome_banco;</pre>
<p>O uso dos colchetes na sintaxe indica que a cláusula é opcional.</p>
<p>Por exemplo, para criar um banco de dados de nome db_MeusLivros:</p>
<pre>CREATE DATABASE IF NOT EXISTS db_MeusLivros;</pre>
<p>A sintaxe para outros sistemas de bancos de dados é a seguinte:</p>
<p><strong>Criar banco de dados no SQL Server:</strong></p>
<pre>CREATE DATABASE nome_banco;</pre>
<p><strong>Criar banco de dados no PostgreSQL:</strong></p>
<pre>createdb nome_banco;</pre>
<h4>2. Para criar uma tabela no MySQL:</h4>
<pre>CREATE TABLE [IF NOT EXISTS] nome_tabela (
    coluna1 tipo_dado restrições,
    coluna2 tipo_dado restrições,
    colunaN tipo_dado restrições,
    [restrições extras]
);</pre>
<p>Por exemplo, para criar uma tabela de autores em um banco, contendo as colunas id de autor, nome e sobrenome:</p>
<pre>CREATE TABLE tbl_autores (
    IdAutor SMALLINT AUTO_INCREMENT,
    NomeAutor VARCHAR(30) NOT NULL,
    SobrenomeAutor VARCHAR(60) NOT NULL,
    CONSTRAINT pk_id_autor PRIMARY KEY (IdAutor)
);</pre>
<p>A sintaxe para outros sistemas de bancos de dados é a seguinte:</p>
<p><strong>Criar tabela no SQL Server:</strong></p>
<pre>CREATE TABLE [nome_banco].[nome_esquema].nome_tabela (
    coluna1 tipo_dado restrições,
    coluna2 tipo_dado restrições,
    colunaN tipo_dado restrições,
    [restrições extras]
) ON [Filegroup];</pre>
<p><strong>Criar tabela no PostgreSQL:</strong></p>
<pre>CREATE TABLE [IF NOT EXISTS] nome_tabela (
    coluna1 tipo_dado restrições,
    coluna2 tipo_dado restrições,
    colunaN tipo_dado restrições,
    [restrições extras]
);</pre>
<p><strong>Criar tabela no Oracle Database:</strong></p>
<pre>CREATE TABLE nome_esquema.nome_tabela (
    coluna1 tipo_dado restrições,
    coluna2 tipo_dado restrições,
   colunaN tipo_dado restrições,
    restrições_da_tabela
);</pre>
<p>3. Para criar um índice em uma tabela:</p>
<pre>CREATE INDEX nome_índice ON tabela(colunas);</pre>
<p>Exemplo &#8211; criar um índice na tabela de editoras, na coluna NomeEditora:</p>
<pre>CREATE INDEX idx_editora ON tbl_Editoras(NomeEditora);</pre>
<p>&nbsp;</p>
<h3>Declaração ALTER</h3>
<p>Com a declaração ALTER podemos adicionar, modificar ou excluir colunas em uma tabela. Também é possível alterar outros objetos do banco de dados, como procedimentos armazenados.</p>
<p>Sintaxe e exemplos a seguir.</p>
<p>1. Adicionar uma coluna a uma tabela existente:</p>
<pre>ALTER TABLE tabela
ADD coluna tipo_dados constraints;</pre>
<p>Exemplo &#8211; adicionar a coluna ISBN10 a uma tabela de livros, de nome tbl_livro:</p>
<pre>ALTER TABLE tbl_livro
ADD isbn10 VARCHAR(10) NOT NULL;</pre>
<p>2. Excluir uma coluna de uma tabela:</p>
<pre>ALTER TABLE nome_tabela
DROP COLUMN nome_coluna;</pre>
<p>Exemplo &#8211; excluir a coluna SobrenomeAutor da tabela de autores:</p>
<pre>ALTER TABLE tbl_autores
DROP COLUMN SobrenomeAutor;</pre>
<p>Neste caso combinamos o uso da declaração ALTER com a declaração DROP, que exclui objetos do banco de dados.</p>
<p>3. Alterar o tipo de dados de uma coluna</p>
<p>Podemos alterar colunas, por exemplo mudando o tipo de dados, com a seguinte sintaxe:</p>
<pre>ALTER TABLE nome_tabela
MODIFY COLUMN nome_coluna tipo_dado constraints;</pre>
<p>Exemplo: Vamos alterar o tipo de dado da coluna IdAutor da tabela de livros para o tipo TINYINT:</p>
<pre>ALTER TABLE tbl_livros
MODIFY COLUMN IdAutor TINYINT NOT NULL;</pre>
<p>&nbsp;</p>
<h3>Declaração DROP</h3>
<p>O comando DROP permite excluir objetos do banco de dados (lida com a estrutura ou esquema, não com os registros).</p>
<p>Sintaxe e exemplos a seguir.</p>
<p>1. Excluir um banco de dados existente:</p>
<pre>DROP DATABASE [IF EXISTS] nome_BD;</pre>
<p>2. Excluir tabelas:</p>
<pre>DROP TABLE [IF EXISTS] nome(s)_tabela(s);</pre>
<p>Exemplo: excluir a tabela de editoras:</p>
<pre>DROP TABLE IF EXISTS tbl_editoras;</pre>
<p>3. Excluir um índice configurado em uma tabela:</p>
<pre>DROP INDEX nome_índice ON tabela;</pre>
<p>Por exemplo, para excluir o índice idx_editora executamos o comando:</p>
<pre>DROP INDEX idx_editora ON tbl_Editoras;</pre>
<p>&nbsp;</p>
<h3>Declaração TRUNCATE</h3>
<p>Permite excluir todas as linhas de uma tabela (todos os registros), sem no entanto excluir a tabela em si.</p>
<p>Sintaxe e exemplos a seguir.</p>
<pre>TRUNCATE TABLE nome_tabela;</pre>
<p>Exemplo: Vamos limpar a tabela de editoras:</p>
<pre>TRUNCATE TABLE tbl_editoras;</pre>
<p>A sintaxe para outros sistemas de bancos de dados é a seguinte:</p>
<p>Limpar tabela no SQL Server:</p>
<pre>TRUNCATE TABLE [nome_banco].[esquema].nome_tabela;</pre>
<p>&nbsp;</p>
<p>É isso aí! No próximo artigo vamos explorar os <a href="http://www.bosontreinamentos.com.br/bancos-de-dados/comandos-dml-sql-e-sua-sintaxe/">comandos DML (<em>Data Manipulation Language</em>)</a> em SQL.</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-ddl-sql-e-sua-sintaxe/">Comandos DDL SQL e sua sintaxe</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-ddl-sql-e-sua-sintaxe/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Como carregar um arquivo CSV em tabela no MySQL</title>
		<link>https://www.bosontreinamentos.com.br/mysql/como-carregar-um-arquivo-csv-em-tabela-no-mysql/</link>
					<comments>https://www.bosontreinamentos.com.br/mysql/como-carregar-um-arquivo-csv-em-tabela-no-mysql/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Tue, 28 Jun 2022 12:27:11 +0000</pubDate>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=18265</guid>

					<description><![CDATA[<p>Carregar arquivo CSV em tabela no MySQL Um arquivo .csv (comma-separated values / valores separados por vírgulas) é um arquivo de texto que contém dados tabulares organizados em colunas, separados por um caractere delimitador de campos, que geralmente é uma vírgula (daí seu nome), mas que pode ser outro caractere qualquer, como ponto-e-vírgula, tabulação ou mesmo espaços simples. A grande vantagem de usar arquivos csv é que eles podem ser criados facilmente em qualquer editor de textos, ou mesmo exportados a partir de planilhas eletrônicas, como o Microsoft Excel ou LibreOffice Calc, e assim nos permitem criar arquivos de dados de grande volume com rapidez e simplicidade. Neste tutorial vou mostrar como é possível usar um arquivo csv para carregar (inserir) dados em uma tabela de banco de dados no MySQL. Para tal usaremos a declaração LOAD DATA INFILE. O arquivo .csv Vou usar um arquivo csv simples para carregar dados em uma tabela de autores de livros que contém três campos: ID do autor, Nome do autor e Sobrenome do autor, nesta ordem, usando o banco de dados db_biblioteca que usamos em outras lições. Crie o arquivo usando um editor de textos ou planilha de sua preferência &#8211; mas [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/mysql/como-carregar-um-arquivo-csv-em-tabela-no-mysql/">Como carregar um arquivo CSV em tabela no MySQL</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Carregar arquivo CSV em tabela no MySQL</h2>
<p>Um arquivo <strong>.csv</strong> (<em>comma-separated values</em> / valores separados por vírgulas) é um arquivo de texto que contém dados tabulares organizados em colunas, separados por um caractere delimitador de campos, que geralmente é uma vírgula (daí seu nome), mas que pode ser outro caractere qualquer, como ponto-e-vírgula, tabulação ou mesmo espaços simples.</p>
<p>A grande vantagem de usar arquivos csv é que eles podem ser criados facilmente em qualquer editor de textos, ou mesmo exportados a partir de planilhas eletrônicas, como o Microsoft Excel ou LibreOffice Calc, e assim nos permitem criar arquivos de dados de grande volume com rapidez e simplicidade.</p>
<p>Neste tutorial vou mostrar como é possível usar um arquivo csv para carregar (inserir) dados em uma tabela de <a href="http://www.bosontreinamentos.com.br/curso-completo-de-mysql/">banco de dados no MySQL</a>. Para tal usaremos a declaração <strong>LOAD DATA INFILE</strong>.</p>
<h3>O arquivo .csv</h3>
<p>Vou usar um arquivo csv simples para carregar dados em uma tabela de autores de livros que contém três campos: ID do autor, Nome do autor e Sobrenome do autor, nesta ordem, usando o banco de dados <strong>db_biblioteca</strong> que usamos em outras lições.</p>
<p>Crie o arquivo usando um editor de textos ou planilha de sua preferência &#8211; mas certifique-se de salvá-lo com a extensão <strong>.csv</strong>, ou o processo de importação de registros irá falhar.</p>
<p>A seguir o conteúdo do arquivo de exemplo:</p>
<pre><span style="color: #0000ff;">ID,Nome,Sobrenome</span>
<span style="color: #0000ff;">1,Carl,Sagan</span>
<span style="color: #0000ff;">2,Fábio,dos Reis</span>
<span style="color: #0000ff;">3,Umberto,Eco</span>
<span style="color: #0000ff;">4,Michael,Crichton</span>
<span style="color: #0000ff;">5,Stephen,Hawking</span>
<span style="color: #0000ff;">6,John,Emsley</span></pre>
<p>A primeira linha contém cabeçalhos para identificação do conteúdo de cada coluna (para não nos confundirmos e é opcional &#8211; o MySQL não se importa com isso).</p>
<p>Eu salvei esse arquivo com o nome de &#8220;<em><strong>autores.csv</strong></em>&#8220;, no diretório C:\SQL de meu computador. Salve-o onde achar mais conveniente, mas lembre-se do caminho do arquivo, pois ele será necessário ao rodar a importação dos dados no banco.</p>
<h3>Sintaxe</h3>
<pre><strong><span style="color: #800080;">LOAD DATA INFILE 'caminho/do/arquivo.csv'</span>
<span style="color: #800080;">INTO TABLE nome_tabela</span>
<span style="color: #800080;">FIELDS TERMINATED BY ','</span>
<span style="color: #800080;">ENCLOSED BY '"'</span>
<span style="color: #800080;">LINES TERMINATED BY '\n'</span>
<span style="color: #800080;">IGNORE 1 ROWS;</span></strong></pre>
<p>Onde:</p>
<ul>
<li><strong>LOAD DATA INFILE</strong> – Define o local onde está o arquivo CSV que será importado. Basta alterar o caminho, entre aspas, para apontar para o local correto onde se encontra salvo o arquivo. Caso o arquivo CSV esteja gravado na máquina local, podemos usar também a declaração LOAD DATA LOCAL INFILE.</li>
<li><strong>INTO TABLE</strong> – Esta opção determina a tabela de destino na qual os dados do arquivo CSV serão importados.</li>
<li><strong>FIELDS TERMINATED BY</strong> – Por padrão, arquivos CSV tem seus dados individuais (campos) separados por vírgulas (delimitador). Se o arquivo utilizado usar um delimitador diferente, informe o valor nessa opção.</li>
<li><strong>ENCLOSED BY</strong> – Usado para especificar que aspas duplas &#8220;&#8221; englobam valores de dados(quando fazem parte do valor).</li>
<li><strong>LINES TERMINATED BY</strong> – Especifica o código ou caractere usado para indicar quebra de linha.</li>
<li><strong>IGNORE 1 ROWS</strong> – É comum que arquivos CSV possuam rótulos (nomes) de colunas na primeira linha do arquivo. Evidentemente não queremos importar esses rótulos como dados nas tabelas. Com esta opção informamos ao MySQL que a primeira linha do arquivo deve ser ignorada ao inserir os dados em uma tabela.</li>
</ul>
<p>Observação: a opção LOAD DATA INFILE tem de usar a barra / em vez de \, mesmo no Windows.</p>
<h3>Exemplo</h3>
<p>Vamos ao nosso exemplo. Para carregar os dados presentes no arquivo autores.csv na tabela de autores, usaremos a declaração LOAD DATA INFILE como segue:</p>
<pre><span style="color: #ff0000;"><strong>LOAD DATA INFILE 'C:/SQL/autores.csv'</strong></span>
<span style="color: #ff0000;"><strong>INTO TABLE tbl_autores</strong></span>
<span style="color: #ff0000;"><strong>FIELDS TERMINATED BY ','</strong></span>
<span style="color: #ff0000;"><strong>ENCLOSED BY '"'</strong></span>
<span style="color: #ff0000;"><strong>LINES TERMINATED BY '\n'</strong></span>
<span style="color: #ff0000;"><strong>IGNORE 1 ROWS;</strong></span></pre>
<p>Para verificar se os dados foram realmente carregados na tabela, basta fazer uma <a href="http://www.bosontreinamentos.com.br/mysql/mysql-select-realizar-consultas-simples-em-tabelas-12/">consulta simples com SELECT</a>:</p>
<pre><strong><span style="color: #ff0000;">SELECT * FROM tbl_autores;</span></strong></pre>
<p>Resultado:</p>
<div id="attachment_18270" style="width: 311px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-18270" class="wp-image-18270 size-full" title="Registros inseridos a partir de arquivo CSV no MySQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2022/06/arquivo-csv-mysql-boson.png" alt="Registros inseridos a partir de arquivo CSV no MySQL" width="301" height="193" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2022/06/arquivo-csv-mysql-boson.png 301w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/06/arquivo-csv-mysql-boson-300x193.png 300w" sizes="auto, (max-width: 301px) 100vw, 301px" /><p id="caption-attachment-18270" class="wp-caption-text">Registros inseridos com sucesso.</p></div>
<p>Como podemos ver, os ados foram carregados (inseridos) com sucesso na tabela de autores do banco de dados. Mas, e se quiséssemos realizar o processo inverso &#8211; gerar um arquivo CSV a partir do conteúdo presente em uma tabela qualquer?</p>
<p>É isso o que mostrarei como fazer na próxima lição.</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/mysql/como-carregar-um-arquivo-csv-em-tabela-no-mysql/">Como carregar um arquivo CSV em tabela no MySQL</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/mysql/como-carregar-um-arquivo-csv-em-tabela-no-mysql/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Como criar chave primária em uma tabela do MySQL?</title>
		<link>https://www.bosontreinamentos.com.br/mysql/como-criar-chave-primaria-em-uma-tabela-do-mysql/</link>
					<comments>https://www.bosontreinamentos.com.br/mysql/como-criar-chave-primaria-em-uma-tabela-do-mysql/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Wed, 08 Jun 2022 13:46:52 +0000</pubDate>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[SQL]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=18185</guid>

					<description><![CDATA[<p>Como criar chave primária em uma tabela do MySQL? Neste tutorial vamos mostrar como criar chaves primárias em tabelas de bancos de dados MySQL, com exemplos práticos, além de revisar brevemente a teoria de chaves em modelagem de dados. O que é uma Chave Primária? Chave primária (Primary Key) é um conceito muito importante aplicado a bancos de dados relacionais, e se refere a um campo ou conjunto de campos em uma tabela empregados para identificar de forma única e exclusiva cada linha (registro) na tabela. Uma coluna marcada como chave primária não permite repetição de valores nas linhas, nem tampouco a existência de valores nulos. A coluna de uma tabela que estabelece um relacionamento com a Chave Primária de outra é chamada de Chave Estrangeira. Tipos de Chave Primária Uma chave primária pode ser Simples ou Composta Chave Primária Simples Chave constituída de apenas uma coluna em uma tabela. É o caso mais comum. Quando não existe um campo &#8220;natural&#8221; em uma tabela que possa ser usado com chave primária, criamos uma Chave Surrogada ou Substituta. Chave Surrogada Valor numérico, único, adicionado a uma tabela para servir como chave primária. Não possui significado para os usuários e geralmente fica [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/mysql/como-criar-chave-primaria-em-uma-tabela-do-mysql/">Como criar chave primária em uma tabela do MySQL?</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Como criar chave primária em uma tabela do MySQL?</h2>
<p>Neste tutorial vamos mostrar como criar chaves primárias em tabelas de <a href="http://www.bosontreinamentos.com.br/curso-completo-de-mysql/">bancos de dados MySQL</a>, com exemplos práticos, além de revisar brevemente a teoria de chaves em <a href="http://www.bosontreinamentos.com.br/category/modelagem-de-dados/">modelagem de dados</a>.</p>
<h3>O que é uma Chave Primária?</h3>
<p>Chave primária (Primary Key) é um conceito muito importante aplicado a bancos de dados relacionais, e se refere a um campo ou conjunto de campos em uma tabela empregados para identificar de forma única e exclusiva cada linha (registro) na tabela.</p>
<p>Uma coluna marcada como chave primária não permite repetição de valores nas linhas, nem tampouco a existência de valores nulos.</p>
<p>A coluna de uma tabela que estabelece um relacionamento com a Chave Primária de outra é chamada de Chave Estrangeira.</p>
<h3>Tipos de Chave Primária</h3>
<ul>
<li>Uma chave primária pode ser Simples ou Composta</li>
</ul>
<h4>Chave Primária Simples</h4>
<ul>
<li>Chave constituída de apenas uma coluna em uma tabela. É o caso mais comum.</li>
<li>Quando não existe um campo &#8220;natural&#8221; em uma tabela que possa ser usado com chave primária, criamos uma Chave Surrogada ou Substituta.</li>
</ul>
<h4>Chave Surrogada</h4>
<ul>
<li>Valor numérico, único, adicionado a uma tabela para servir como chave primária.</li>
<li>Não possui significado para os usuários e geralmente fica escondida nas aplicações. São frequentemente usadas no lugar de uma chave primária composta.</li>
</ul>
<h4>Chave Primária Composta</h4>
<ul>
<li>Chave que é constituída de duas ou mais colunas (atributos).</li>
<li>Geralmente empregada quando não é possível utilizar uma única coluna de uma tabela para identificar de forma exclusiva seus registros.</li>
</ul>
<h3>Como criar chave primária em uma nova tabela</h3>
<p>Para executar nossos códigos vamos criar duas tabelas em um banco de dados de teste: Funcionários e Departamentos para exemplificar.</p>
<p><em>Modo 1 &#8211; Constraint em nível de coluna:</em></p>
<pre><strong>CREATE TABLE funcionarios (</strong>
<strong>  id_func smallint PRIMARY KEY AUTO_INCREMENT,</strong>
<strong>  nome_func VARCHAR(30) NOT NULL,</strong>
<strong>  sobrenome_func VARCHAR(50) NOT NULL</strong>
<strong>);</strong></pre>
<p>Conferir a tabela criada e sua chave primária:</p>
<pre><strong>DESCRIBE funcionarios;</strong></pre>
<div id="attachment_18226" style="width: 444px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-18226" class="wp-image-18226 size-full" title="Criar tabela de funcionários - chaves primárias no MySQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2022/06/criar-tabela-funcionarios-mysql.png" alt="Criar tabela de funcionários - chaves primárias no MySQL" width="434" height="95" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2022/06/criar-tabela-funcionarios-mysql.png 434w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/06/criar-tabela-funcionarios-mysql-420x92.png 420w" sizes="auto, (max-width: 434px) 100vw, 434px" /><p id="caption-attachment-18226" class="wp-caption-text">Tabela de funcionários criada com sua chave primária (coluna Key = PRI)</p></div>
<p><em>Modo 2 &#8211; Constraint em nível de tabela (nomeada):</em></p>
<pre><strong>CREATE TABLE departamentos (</strong>
<strong>  id_dep smallint AUTO_INCREMENT,</strong>
<strong>  nome_dep VARCHAR(30) NOT NULL,</strong>
<strong>  CONSTRAINT pk_id_dep PRIMARY KEY(id_dep)</strong>
<strong>);</strong></pre>
<p>Conferir a tabela criada e sua chave primária:</p>
<pre><strong>DESCRIBE departamentos;</strong></pre>
<div id="attachment_18227" style="width: 408px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-18227" class="wp-image-18227 size-full" title="Criar tabela de departamentos - chaves primárias no MySQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2022/06/criar-tabela-departamentos-mysql.png" alt="Criar tabela de departamentos - chaves primárias no MySQL" width="398" height="73" /><p id="caption-attachment-18227" class="wp-caption-text">Tabela de departamentos criada com sua chave primária (coluna Key = PRI)</p></div>
<p>No MySQL o nome fornecido para uma constraint (restrição) <strong>PRIMARY KEY</strong> é ignorado, sendo usada automaticamente sempre a palavra <strong>PRIMARY</strong>. Para outros tipos de constraints o nome fornecido é empregado normalmente.</p>
<h3>Como criar em uma tabela existente, criada sem a chave primária</h3>
<p>Vamos criar mais uma tabela de teste de nome Fornecedores, sem chave primária, para exemplificar.</p>
<pre><strong>CREATE TABLE fornecedores (</strong>
<strong>  id_forn smallint,</strong>
<strong>  nome_forn VARCHAR(30) NOT NULL</strong>
<strong>);</strong></pre>
<p>Conferir a tabela criada:</p>
<pre><strong>DESCRIBE fornecedores;</strong></pre>
<div id="attachment_18228" style="width: 362px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-18228" class="wp-image-18228 size-full" title="Tabela de fornecedores sem a chave primária no MySQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2022/06/criar-tabela-fornecedores-mysql.png" alt="Tabela de fornecedores sem a chave primária no MySQL" width="352" height="73" /><p id="caption-attachment-18228" class="wp-caption-text">Tabela de fornecedores criada sem a chave primária no MySQL &#8211; coluna Key vazia.</p></div>
<p>Vamos adicionar uma restrição de chave primária a uma das colunas &#8211; no caso, à coluna <em>id_forn</em>. Para isso, usaremos a declaração ALTER TABLE com a opção ADD PRIMARY KEY:</p>
<pre><strong>ALTER TABLE fornecedores</strong>
<strong>ADD PRIMARY KEY (id_forn);</strong></pre>
<p>Conferimos agora a alteração realizada na tabela:</p>
<pre><strong>DESCRIBE fornecedores;</strong></pre>
<div id="attachment_18229" style="width: 363px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-18229" class="wp-image-18229 size-full" title="Modificar tabela no MySQL, adicionando chave primária a uma coluna" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2022/06/modificar-tabela-fornecedores-mysql-com-chave-primaria.png" alt="Modificar tabela no MySQL, adicionando chave primária a uma coluna" width="353" height="71" /><p id="caption-attachment-18229" class="wp-caption-text">Agora a tabela de fornecedores possui uma chave primária no MySQL &#8211; coluna Key = PRI.</p></div>
<h3>Como criar uma chave primária composta</h3>
<p>Vamos agora criar uma tabela de Vendas, com chave composta englobando duas colunas: <em>id_produto</em> e <em>id_cliente</em>. Para isso precisamos usar uma constraint em nível de tabela:</p>
<pre><strong>CREATE TABLE vendas (</strong>
<strong>  id_produto smallint,</strong>
<strong>  id_cliente smallint,</strong>
<strong>  qtde smallint,</strong>
<strong>  CONSTRAINT PRIMARY KEY(id_produto,id_cliente)</strong>
<strong>);</strong></pre>
<p>Conferir a chave primária composta criada:</p>
<pre><strong>DESCRIBE vendas;</strong></pre>
<div id="attachment_18230" style="width: 352px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-18230" class="wp-image-18230 size-full" title="Tabela de vendas com chave primária composta no MySQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2022/06/criar-tabela-vendas-mysql.png" alt="Tabela de vendas com chave primária composta no MySQL" width="342" height="90" /><p id="caption-attachment-18230" class="wp-caption-text">Chave primária composta. Note a palavra &#8220;PRI&#8221; em duas colunas no campo Key.</p></div>
<p>É isso aí! Neste artigo aprendemos como criar chaves primárias no MySQL, tanto simples quanto compostas. Para aprender mais sobre bancos de dados, não deixe de conferir nosso <a href="http://www.bosontreinamentos.com.br/curso-completo-de-mysql/">curso completo de MySQL</a>.</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/mysql/como-criar-chave-primaria-em-uma-tabela-do-mysql/">Como criar chave primária em uma tabela do MySQL?</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/mysql/como-criar-chave-primaria-em-uma-tabela-do-mysql/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Declaração MySQL REPLACE &#8211; Inserir ou atualizar linhas em uma tabela</title>
		<link>https://www.bosontreinamentos.com.br/mysql/declaracao-mysql-replace-inserir-ou-atualizar-linhas-em-uma-tabela/</link>
					<comments>https://www.bosontreinamentos.com.br/mysql/declaracao-mysql-replace-inserir-ou-atualizar-linhas-em-uma-tabela/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Sun, 28 Nov 2021 14:43:59 +0000</pubDate>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=18067</guid>

					<description><![CDATA[<p>Declaração MySQL REPLACE A declaração MySQL REPLACE permite inserir um novo registro em uma tabela do MySQL, caso o registro ainda não exista, ou atualizar um registro já existente. Funciona como se fosse uma declaração INSERT, mas sem apresentar erros se tentamos inserir um registro já inserido na tabela &#8211; em vez disso, valores das colunas podem ser alterados. Uma &#8220;combinação&#8221; de INSERT com UPDATE. Para determinar se um registro (linha) já existe na tabela, são usados os valores de chave primária ou coluna com constraint UNIQUE na tabela. Se a tabela não possuir esses índices, a declaração REPLACE funciona como um INSERT simples. Para usar o REPLACE em MySQL é necessário ter privilégios para executar as instruções INSERT e DELETE. Como inserir uma nova linha com REPLACE no MySQL Sintaxe: REPLACE [INTO] nomeTabela(lista_colunas) VALUES(lista_valores); Como podemos ver, uma sintaxe bem parecida com a da declaração INSERT! Vejamos um exemplo. Exemplos Vejamos como inserir e modificar registros em uma tabela no MySQL usando a declaração REPLACE. Primeiramente, criamos uma nova tabela para testes: # Tabela para testes da declaração REPLACE CREATE TABLE paises ( IdPais Tinyint AUTO_INCREMENT, nomePais VARCGAR(25) UNIQUE NOT NULL, nomeCapital VARCGAR(50) NOT NULL, CONSTRAINT pk_id_pais PRIMARY KEY(IdPais) [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/mysql/declaracao-mysql-replace-inserir-ou-atualizar-linhas-em-uma-tabela/">Declaração MySQL REPLACE &#8211; Inserir ou atualizar linhas em uma tabela</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Declaração MySQL REPLACE</h2>
<p>A declaração MySQL REPLACE permite inserir um novo registro em uma tabela do MySQL, caso o registro ainda não exista, ou atualizar um registro já existente. Funciona como se fosse uma <a href="http://www.bosontreinamentos.com.br/mysql/mysql-insert-into-inserir-dados-em-tabelas-11/">declaração INSERT</a>, mas sem apresentar erros se tentamos inserir um registro já inserido na tabela &#8211; em vez disso, valores das colunas podem ser alterados. Uma &#8220;combinação&#8221; de INSERT com <a href="http://www.bosontreinamentos.com.br/mysql/mysql-update-modificar-registros-em-tabelas-20/">UPDATE</a>.</p>
<p>Para determinar se um registro (linha) já existe na tabela, são usados os valores de chave primária ou coluna com <a href="http://www.bosontreinamentos.com.br/mysql/mysql-constraints-restricoes-primary-key-fk-default-etc-06/">constraint UNIQUE</a> na tabela. Se a tabela não possuir esses índices, a declaração REPLACE funciona como um INSERT simples.</p>
<p>Para usar o REPLACE em MySQL é necessário ter privilégios para executar as instruções INSERT e DELETE.</p>
<h3>Como inserir uma nova linha com REPLACE no MySQL</h3>
<p><strong>Sintaxe:</strong></p>
<pre><span style="color: #800080;"><strong>REPLACE [INTO] nomeTabela(lista_colunas)</strong></span>
<span style="color: #800080;"><strong>VALUES(lista_valores);</strong></span></pre>
<p>Como podemos ver, uma sintaxe bem parecida com a da declaração INSERT!</p>
<p>Vejamos um exemplo.</p>
<h3>Exemplos</h3>
<p>Vejamos como inserir e modificar registros em uma tabela no MySQL usando a declaração REPLACE.</p>
<p>Primeiramente, <a href="http://www.bosontreinamentos.com.br/mysql/mysql-criacao-de-tabelas-create-table-07/">criamos uma nova tabela</a> para testes:</p>
<pre><span style="color: #339966;"><strong># Tabela para testes da declaração REPLACE</strong></span>
<strong>CREATE TABLE paises (</strong>
<strong>  IdPais Tinyint AUTO_INCREMENT,</strong>
<strong>  nomePais VARCGAR(25) UNIQUE NOT NULL,</strong>
<strong>  nomeCapital VARCGAR(50) NOT NULL,</strong>
<strong>  CONSTRAINT pk_id_pais PRIMARY KEY(IdPais)</strong>
<strong>);</strong></pre>
<p>Populamos a tabela com alguns registros:</p>
<pre>INSERT INTO paises(nomePais, nomeCapital)
VALUES
('Argentina','Buenos Aires'),('Brasil','Brasilia'),
('Equador','Quito'),('Namíbia','Windhoek'),
('Bélgica','Bruxelas'),('China','Pequim'),
('Espanha','Sevilha'),('Marrocos','Rabat');</pre>
<p>Note que um dos registros tem um valor errado &#8211; a capital da Espanha é Madrid, e não Sevilha. Vamos consertar isso posteriormente.</p>
<p>Vamos visualizar a tabela com seu conteúdo:</p>
<pre>SELECT * FROM paises;</pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-18071 size-full" title="Declaração REPLACE MySQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2021/11/replace-mysql-01.jpg" alt="Declaração REPLACE MySQL" width="197" height="159" /></p>
<p>As linhas foram inseridas com sucesso, mas um dos registros &#8211; Espanha &#8211; foi inserido com valor errado para sua capital, que é Madrid, e não Sevilha. Vamos inserir o registro novamente, como uma nova linha, usando uma declaração INSERT comum:</p>
<pre>INSERT INTO paises(nomePais, nomeCapital)
VALUES ('Espanha','Madrid');</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-18072" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2021/11/replace-mysql-02-1024x23.jpg" alt="Erro REPLACE MySQL" width="1024" height="23" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2021/11/replace-mysql-02-1024x23.jpg 1024w, https://www.bosontreinamentos.com.br/wp-content/uploads/2021/11/replace-mysql-02-420x9.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2021/11/replace-mysql-02-768x17.jpg 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2021/11/replace-mysql-02.jpg 1042w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<p>Note que foi gerado um erro, pois o país Espanha já está cadastrado &#8211; e a coluna nomePais possui a restrição UNIQUE configurada, o que significa que não são aceitos valores repetidos nesta coluna.</p>
<p>Vamos usar agora a instrução REPLACE para trocar os dados do país incorreto:</p>
<pre>REPLACE INTO paises(IdPais, nomePais, nomeCapital)
VALUES (7, 'Espanha', 'Madrid');</pre>
<p>Note que fornecemos nesta declaração o ID do país (7), valor da chave primária do registro, para que o valor atual seja substituído, e não um novo registro criado.</p>
<p>Vamos visualizar a tabela modificada:</p>
<pre>SELECT * FROM paises;</pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-18073 size-full" title="Atualizar dados com REPLACE no MySQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2021/11/replace-mysql-03.jpg" alt="Atualizar dados com REPLACE no MySQL" width="202" height="161" /></p>
<p>Note que o nome da capital foi alterado, sem alterar o valor da chave primária &#8211; exatamente como uma declaração UPDATE faria.</p>
<p>Mas, o que acontece se eu não fornecer a chave primária ao executar um REPLACE? Vamos testar isso.</p>
<p>A capital da Namíbia é Windhoek, como está registrado na tabela. Mas existe um nome aportuguesado para esta cidade: Vinduque. Vamos tentar trocar o nome da capital da Namíbia usando REPLACE, mas agora sem fornecer o valor da chave primária (que é 4):</p>
<pre>REPLACE INTO paises(nomePais, nomeCapital)
VALUES ('Namíbia', 'Vinduque');</pre>
<p>Vejamos o que aconteceu:</p>
<pre>SELECT * FROM paises;</pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-18074 size-full" title="Inserir registros com REPLACE em banco de dados MySQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2021/11/replace-mysql-04.jpg" alt="Inserir registros com REPLACE em banco de dados MySQL" width="199" height="160" /></p>
<p>Neste caso, foi usado o valor padrão da coluna IdPais, pois não fornecemos um valor para a chave primária. E, no caso, trata-se de uma <a href="http://www.bosontreinamentos.com.br/mysql/mysql-auto-incremento-de-valores-em-colunas-08/">coluna de auto incremento</a>, e assim valor padrão é um novo numero na sequência de valores &#8211; ou seja, uma nova chave primária (no caso, 10).</p>
<p>Não ocorreu um update da linha Namíbia, o que podemos ver claramente pois o Id do país (chave primária) mudou &#8211; isso indica que o registro atual foi excluído e um novo registro foi criado.</p>
<p>E se o registro não existisse previamente na tabela? O que ocorreria ao tentar usar o REPLACE?</p>
<p>Neste caso um novo registro é criado. Tente isso com exercício &#8211; use o REPLACE com os seguintes dados:</p>
<ul>
<li>País: <strong>Angola</strong></li>
<li>Capital: <strong>Luanda</strong></li>
</ul>
<p>Se quiser, poste o código usado e o resultado obtido nos comentários aqui abaixo &#8211; e quaisquer dúvidas que vocês tenham!</p>
<p>Até!</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/mysql/declaracao-mysql-replace-inserir-ou-atualizar-linhas-em-uma-tabela/">Declaração MySQL REPLACE &#8211; Inserir ou atualizar linhas em uma tabela</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/mysql/declaracao-mysql-replace-inserir-ou-atualizar-linhas-em-uma-tabela/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Como trabalhar com Transações em MySQL</title>
		<link>https://www.bosontreinamentos.com.br/mysql/como-trabalhar-com-transacoes-em-mysql/</link>
					<comments>https://www.bosontreinamentos.com.br/mysql/como-trabalhar-com-transacoes-em-mysql/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Wed, 26 May 2021 14:37:40 +0000</pubDate>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[Segurança]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=13708</guid>

					<description><![CDATA[<p>Transações em MySQL Uma transação em bancos de dados configura um conjunto de declarações SQL que são combinadas em uma única unidade de trabalho, sendo executadas como se fossem uma única operação. Essa abordagem é empregada para evitar diversos problemas que podem ocorrer em um banco de dados, além de aplicar as propriedades ACID. Propósitos das transações Fornecer unidades de trabalho confiáveis e que permitam a recuperação correta de falhas Manter o banco de dados consistente em caso de falha do sistema ou de operações Fornecer isolamento entre os programas que acessam o banco de forma concorrente. Uma transação deve ser atômica, o que significa que ela deve ser executada de forma completa ou não ter nenhum efeito nas tabela envolvidas &#8211; ou seja, ou ela acontece por inteiro, ou não acontece nada. Na prática, as transações aplicam as quatro propriedades ACID às operações no banco de dados: Atomicidade: Se as operações forem confirmadas, elas acontecerão todas sem exceção. Não ocorre a execução de apenas parte das operações contidas na transação. Consistência: As alterações no banco de dados somente acontecem caso o novo estado do sistema for válido. Se uma mudança inválida for executada, ela irá falhar, e o sistema [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/mysql/como-trabalhar-com-transacoes-em-mysql/">Como trabalhar com Transações em MySQL</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Transações em MySQL</h2>
<p>Uma <a href="http://www.bosontreinamentos.com.br/bancos-de-dados/conceitos-de-bancos-de-dados-o-que-e-uma-transacao/">transação em bancos de dados</a> configura um conjunto de declarações SQL que são combinadas em uma única unidade de trabalho, sendo executadas como se fossem uma única operação. Essa abordagem é empregada para evitar diversos problemas que podem ocorrer em um banco de dados, além de aplicar as propriedades ACID.</p>
<h4>Propósitos das transações</h4>
<ul>
<li>Fornecer unidades de trabalho confiáveis e que permitam a recuperação correta de falhas</li>
<li>Manter o banco de dados consistente em caso de falha do sistema ou de operações</li>
<li>Fornecer isolamento entre os programas que acessam o banco de forma concorrente.</li>
</ul>
<p>Uma transação deve ser atômica, o que significa que ela deve ser executada de forma completa ou não ter nenhum efeito nas tabela envolvidas &#8211; ou seja, ou ela acontece por inteiro, ou não acontece nada.</p>
<p>Na prática, as transações aplicam as quatro <a href="http://www.bosontreinamentos.com.br/bancos-de-dados/conceitos-de-bancos-de-dados-o-que-significa-acid/">propriedades ACID</a> às operações no banco de dados:</p>
<ul>
<li><strong>Atomicidade</strong>: Se as operações forem confirmadas, elas acontecerão todas sem exceção. Não ocorre a execução de apenas parte das operações contidas na transação.</li>
<li><strong>Consistência</strong>: As alterações no banco de dados somente acontecem caso o novo estado do sistema for válido. Se uma mudança inválida for executada, ela irá falhar, e o sistema permanece no seu estado anterior, válido.</li>
<li><strong>Isolamento</strong>: A transação não é visível a outros processos até que ela seja confirmada e persistida no banco.</li>
<li><strong>Durabilidade</strong>: Após a transação ter sido confirmada, ou seja, que suas operações tenham todas sido executadas com sucesso, as alterações são automaticamente persistidas (gravadas no banco), e não é necessário se preocupar em gravar as mudanças.</li>
</ul>
<h4>Exemplo de transação corriqueira</h4>
<p>Um exemplo clássico de transação é a transferência de dinheiro de uma conta bancária para outra, por TED, DOC ou PIX, por exemplo. Para executar a transferência, primeiro deve ser debitado o valor da conta de origem e, logo após, o dinheiro deve ser depositado na conta de destino.</p>
<p>Essa operação deve ser totalmente realizada (bem-sucedida). Se a operação for interrompida no meio do caminho, por exemplo após debitar o dinheiro da conta de origem mas antes de depositar na conta de destino, o valor transferido será perdido, o que evidentemente é um grande problema para os usuários e para a instituição financeira.</p>
<p>No MySQL, as transações são suportadas pelo motor de banco de dados InnoDB, mas não o são pelo motor MyISAM. Desta forma, este tutorial tratará exclusivamente de bancos que utilizem o InnoDB.</p>
<h3>COMMIT e ROLLBACK de transações</h3>
<p>Quando uma transação é efetuada com sucesso (todas as suas operações são bem-sucedidas), o banco de dados é alterado de forma permanente, com os dados envolvidos na transação persistidos (ou seja, salvos em disco); a essa operação damos o nome de&nbsp;<strong>COMMIT</strong>.</p>
<p>Porém, caso haja falha em qualquer uma das operações constituintes da transação, o banco de dados deverá ser retornado ao estado em que se encontrava anteriormente à execução da transação; essa operação é denominada&nbsp;<strong>ROLLBACK</strong>.</p>
<p>Desta forma, caracterizamos as transações da seguinte maneira:</p>
<ul>
<li>Todas as transações possuem início e fim</li>
<li>As transações podem ser salvas (consolidadas no banco de dados &#8211; commit) ou desfeitas (rollback)</li>
<li>Se transação falhar durante a execução de qualquer uma de suas operações constituintes, nenhuma destas operações será salva no banco de dados – nenhuma é comitada e todas são desfeitas.&nbsp;</li>
</ul>
<h3>Autocommit</h3>
<p>Por padrão, o MySQL utiliza o modo autocommit, que significa que declarações INSERT, UPDATE ou DELETE sofrem commit automaticamente quando executadas. Vamos usar transações para que o commit (ou rollback) sejam executados quando nós o quisermos, de modo a ter maior controle sobre a execução das declarações DML.</p>
<p>Podemos verificar se o autocommit está ativado no sistema, executando o comando a seguir:</p>
<pre><strong>SELECT @@autocommit;</strong></pre>
<p>Se for retornado um valor igual a 0 (zero), isso significa que o autocommit está desativado; um valor igual a 1 indica status de autocommit ativo.</p>
<p>Para trabalhar com transações devemos desativar esse comportamento padrão, para que os commits venham a ser executados somente quando for indicado na declaração SQL.</p>
<p>Para forçar MySQL a não executar commit automaticamente, usamos a seguinte declaração:</p>
<pre><strong>SET autocommit = 0;</strong>
<span style="color: #339966;"><strong># ou</strong></span>
<strong>SET autocommit = OFF</strong></pre>
<p>Para habilitar novamente o autocommit usamos a seguinte declaração:</p>
<pre><strong>SET autocommit = 1;</strong>
<span style="color: #339966;"><strong># ou</strong></span>
<strong>SET autocommit = ON;</strong></pre>
<p>Após desativar o commit automático, podemos começar a trabalhar com transações no MySQL Workbench.</p>
<h3>Declaração START TRANSACTION</h3>
<p>A declaração START TRANSACTION identifica o início de uma transação. Essa declaração desabilita temporariamente o modo autocommit, de modo que você deverá programar o momento de efetivar a transação. O modo autocommit é reativado logo após o término da transação.</p>
<p>No geral, criamos transações em procedimentos armazenados que alterem o estado do banco de dados. Vejamos um exemplo, criando uma transação.</p>
<h3>Exemplos de Transações</h3>
<p>Antes de testarmos transações no MySQL, vamos desativar o commit automático:</p>
<pre>SET @@autocommit = OFF;</pre>
<p>Conferimos o valor do autocommit atual:</p>
<pre>SELECT @@autocommit;</pre>
<p>Agora, vamos <a href="http://www.bosontreinamentos.com.br/mysql/mysql-criacao-de-tabelas-create-table-07/">criar um tabela</a> de testes para realizarmos transações envolvendo commits e rollbacks:</p>
<pre><span style="color: #339966;"># Criar tabela para testes</span>
CREATE TABLE Dados_Livro
SELECT NomeLivro,ISBN13, PrecoLivro
FROM tbl_livros;</pre>
<pre><span style="color: #339966;"># Visualizar conteúdo da tabela</span>
SELECT * FROM Dados_Livro;</pre>
<p>Estamos prontos para testar nossos scripts.</p>
<h4>Exemplo 01:&nbsp; Transação com rollback</h4>
<pre>START TRANSACTION;
  DELETE FROM Dados_Livro; <span style="color: #339966;"># apaga todos registros da tabela, "sem querer"</span>
  INSERT INTO Dados_Livro(NomeLivro,ISBN13, PrecoLivro)
    VALUES ('Ciência de Dados com Python','9876532145632',69.88);
  SELECT * FROM Dados_Livro; <span style="color: #339966;"># mostra tabela totalmente vazia</span>
ROLLBACK; <span style="color: #339966;"># desfaz a transação</span>

SELECT * FROM Dados_Livro; <span style="color: #339966;"># mostra os dados normalmente, pois nada foi comitado.</span></pre>
<h4>Exemplo 02: Transação com commit</h4>
<pre>START TRANSACTION;
  DELETE FROM Dados_Livro; <span style="color: #339966;"># apaga todos registros da tabela</span>
  INSERT INTO Dados_Livro(NomeLivro, ISBN13, PrecoLivro)
    VALUES('Ciência de Dados com Python','9876532145632',69.88);
  SELECT * FROM Dados_Livro; <span style="color: #339966;"># mostra tabela vazia</span>
COMMIT; # confirma a transação

SELECT * FROM Dados_Livro; <span style="color: #339966;"># agora os dados foram apagados e apenas o registro do livro "Ciência de Dados com Python" é mostrado, pois a transação foi confirmada.</span></pre>
<h4>Exemplo 03: Transação em Stored Procedure</h4>
<pre>DELIMITER //
CREATE PROCEDURE insere_dados()
BEGIN
DECLARE erro_sql TINYINT DEFAULT FALSE;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET erro_sql = TRUE;
START TRANSACTION;
  INSERT INTO Dados_Livro (NomeLivro, ISBN13, PrecoLivro) VALUES
    ('História da Numismática', '9789865321465', 78.60);
  INSERT INTO Dados_Livro (NomeLivro, ISBN13, PrecoLivro) VALUES
    ('Biologia Marinha', '9784233876972', 177.50);
  INSERT INTO Dados_Livro (NomeLivro, ISBN13, PrecoLivro) VALUES
    ('Química Experimental', '9789563210970', 165.32);
  INSERT INTO Dados_Livro (NomeLivro, ISBN13, PrecoLivro) VALUES
    ('Artes Plásticas', '9784523415974', 98,00); # Aqui há um erro que impedirá o COMMIT e provocará o ROLLBACK.
  IF erro_sql = FALSE THEN
    COMMIT;
    SELECT 'Transação efetivada com sucesso.' AS Resultado;
  ELSE
    ROLLBACK;
    SELECT 'Erro na transação' AS Resultado;
  END IF;
END//
DELIMITER ;</pre>
<p>Para testar, basta chamar o <a href="http://www.bosontreinamentos.com.br/mysql/mysql-procedimentos-armazenados-stored-procedures-basico-34/">procedimento armazenado</a>:</p>
<pre>CALL insere_dados();</pre>
<p>Verificamos o conteúdo da tabela Dados_Livro após sua execução:</p>
<pre>SELECT * FROM Dados_Livro;</pre>
<p>Nenhum dado foi inserido, pois há um erro no último insert: foi usada vírgula para determinar o preço do livro &#8220;Artes Plásticas&#8221;, mas o correto seria usar ponto. Conserte esse erro, altere ou recrie o procedimento armazenado, e o execute novamente, verificando se os dados são inseridos corretamente desta vez.</p>
<h3>Aplicações das Transações</h3>
<p>Use transações sempre que:</p>
<ul>
<li>Existirem declarações DML INSERT, UPDATE ou DELETE que afetem dados que são relacionados</li>
<li>Ao mover dados de uma tabela para outra</li>
<li>E SEMPRE que a falha em uma das declarações DML puder violar a integridade dos dados e incorrer em sua perda.</li>
</ul>
<p>Observação: Após a execução de declarações DDL, como CREATE ou DROP, o commit é executado automaticamente pelo MySQL, <em>independente</em> de se usar transações com START TRANSACTION.</p>
<h3>Referências</h3>
<p>Murach, J. <em><strong>Murach´s MySQL</strong></em>. 2ª Edição. Mike Murach &amp; Associates.</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/mysql/como-trabalhar-com-transacoes-em-mysql/">Como trabalhar com Transações em MySQL</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/mysql/como-trabalhar-com-transacoes-em-mysql/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
