OBJETIVO: |
|
Ao término deste capítulo, você será capaz de criar tabelas, alterar sua estrutura e eliminá-la do banco de dados. Isso será fundamental para o exercício de sua profissão. E então? Motivado para desenvolver esta competência? Então, vamos lá. Avante!. |
Há duas maneiras de criarmos tabelas em um banco de dados utilizado o SQL: uma delas é por meio do comando de Prompt CREATE TABLE, a outra é utilizando o phpMyAdmin, que é a interface gráfica de gerenciamento de bancos de dados MySQL (NOGUEIRA, 2017b). Ao criar um banco de dados, temos um banco de dados vazio, ou seja, desprovido de tabelas ou quaisquer outras estruturas de dados. O que faremos agora é a estruturação de banco de dados, começando a criação de suas tabelas. Vamos utilizar o exemplo de banco de dados “EscolaPrime”. A ideia é criarmos uma primeira tabela intitulada “funcionários”. Primeiro, abra o banco de dados “EscolaPrime” no phpMyAdmin. Em seguida, clique da aba “Structure” (estrutura) e visualize a página, como pode ser visto na Figura 1.
Figura 1 – “Structure” para criação da primeira tabela
Fonte: Reprodução phpMyAdmin.
Vamos criar uma primeira tabela nesse banco de dados. Então, digite o nome “funcionarios” no campo “Name”, e informe, no campo “Number of columns”, o número 5, uma vez que criaremos a seguinte estrutura de tabela:
Tabela 1 – Massa de dados para a tabela “funcionarios” a ser criada
Matric |
Nome |
Endereço |
Salário |
Depto. |
0001 |
JOÃO ALBERTO SILVA |
RUA VERGUEIRO, 40, APTO. 202 |
R$ 4.800,00 |
DRH |
0002 |
MARIA CYNTHIA COSTA |
AV. SOARES DA VEIGA, 1468, APTO 1301 |
R$ 3.750,00 |
DRH |
0003 |
ANA MARIA CARDOSO |
RUA HOMERO MACEDO, 608, APTO. 101-A |
R$ 6.550,00 |
MKT |
0004 |
SÍLVIO ROMERO DOTAS |
RUA VERGUEIRO, 44 |
R$ 2.850,00 |
MKT |
0005 |
SANDRA MARIA MOTA |
AV. SETE DE SETEMBRO, 1209, APTO. 401 |
R$ 4.200,00 |
MKT |
Fonte: Nogueira (2017b).
Clique em “Go” e visualize a página conforme apresentado na Figura 2, que traz o formulário de estrutura da tabela em foco. Vamos entender como isso funciona.
Figura 2 – Formulário de estrutura da tabela “Funcionarios”
Fonte: Reprodução phpMyAdmin.
Em cada uma das linhas desse formulário você deverá inserir os dados de uma coluna da tabela “funcionarios”. Primeiramente, vamos informar, na primeira linha, os dados do campo (coluna) “Matric” da tabela “funcionarios”.
IMPORTANTE: |
|
Não esqueça de selecionar, previamente, o formato InnoDB, como mostra a Figura 2. |
Na segunda coluna do formulário, selecione o tipo de dado que deve ser aceito pelo campo “Matric”, como mostra a Figura 3.
Figura 3 – Lista de tipos de dados do MySQL
Fonte: Reprodução phpMyAdmin.
Os tipos de dados do MySQL podem ser agrupados em três grandes grupos:
•Tipos numéricos.
•Tipos de data.
•Tipos de cadeia.
Os tipos de dados numéricos são divididos em dois grandes grupos, os inteiros e os reais fracionários (com vírgulas decimais).
•TinyInt: número inteiro com ou sem sinal. Com sinal: seus valores vão desde -128 até 127; sem sinal: a variação passa a ser de 0 até 255.
•Bit ou Bool: número inteiro que só pode ser igual a 0 (zero) ou 1 (um).
•SmallInt: número inteiro similar ao TinyInt, porém com maior margem de variação, podendo ir, com sinal, de -32768 até 32767; e de 0 até 65535 sem sinal.
•MediumInt: também se trata de número inteiro, com uma margem de variação de -8388608 até 8388607 (com sinal); e de 0 a 16777215 (sem sinal).
•Int: inteiro que vai desde -2147483648 até 2147483647, ou, sem sinal, de 0 a 429496295.
•BigInt: esse é o maior tipo de número inteiro suportado, variando desde o valor de -9223372036854775808 até o de 9.223.372.036.854.775.807; sem sinal, a variação é de 0 a 18446744073709551615.
•Float: número real de alta precisão, porém de baixo valor significativo, indo desde -3.402823466E+38 (três vírgula quatro, vezes dez elevado a trinta e oito) até -1.175494351E-38,0 e (menos um vírgula dezessete vezes dez elevado a menos trinta e oito). No caso de não haver sinal, a variação é de 1.75494351E-38 até 3.402823466E+38.
IMPORTANTE: |
|
Perceba que a notação científica de base 10 (dez) é representada pela letra E seguida de um expoente. Observe, ainda, que o MySQL usa o ponto decimal no lugar da vírgula decimal. |
•Double: número real com vírgula (ponto) flutuante de dupla precisão, com faixa de variação de -1.7976931348623157E+308 a -2.2250738585072014E-308, e, sem sinal, de 2.2250738585072014E-308 a 1.7976931348623157E+308.
•Decimal: número com vírgula flutuante desempacotado. O número é armazenado como uma cadeia de caracteres.
Os tipos data se caracterizam da seguinte maneira.
•Date: esse tipo de dado armazena uma data de 1 de janeiro de 1001 até 31 de dezembro de 9999. O formato de armazenamento é o seguinte: ano-mês-dia, por exemplo: “2017-10-28”.
•DateTime: trata-se de uma combinação entre data e hora, que vai de 1 de janeiro de 1001, à 0 hora, 0 minuto e 0 segundo, até 31 de dezembro de 9999, às 23 horas, 59 minutos e 59 segundos. O formato de seu armazenamento é o seguinte: ano-mês-dia horas: minutos: segundos: “2017-10-28 04:03:52.
•TimeStamp: também se refere a uma combinação entre data e hora, indo de 1 de janeiro de 1970 até o ano de 2037. O formato desse tipo de data é variável, dependendo do tamanho definido para o campo. O Quadro 1 mostra os diversos formatos possíveis em função do tamanho do campo.
Quadro 1 – Tamanho e formato da data ou data-hora
Tamanho |
Formato da data ou data-hora |
2 |
AA |
4 |
AAMM |
6 |
AAMMDD |
8 |
AAAAMMDD |
12 |
AAMMDDhhmmss |
14 |
AAAAMMDDhhmmss |
Fonte: Nogueira (2017b).
Veja a legenda do Quadro 1: A = ano, M = mês, D = dia, h = hora, m = minuto e s = segundo.
•Time: esse tipo de dado armazena um período de tempo em horas, e o intervalo de horas, minutos e segundos vai de -838 horas, 59 minutos e 59 segundos a 838 horas, 59 minutos e 59 segundos. O formato de armazenamento é “hhh:mm:ss”.
•Year: trata-se de um tipo de dado que armazena um ano, de 1901 a 2155. O formato desse tipo de campo pode ser “AA” (apenas dois últimos dígitos do ano) ou “AAAA” (quatro dígitos = ano completo).
Agora, veremos as variações existentes entre os tipos de dados alfanuméricos, também conhecidos como “cadeias de caracteres” ou “strings”, quais sejam:
•Char: contém uma cadeia de caracteres de tamanho fixo, podendo armazenar strings de tamanhos que vão de 0 até 255 caracteres.
•VarChar: armazena cadeias de caracteres de tamanho variável, podendo ir de 0 a 255 caracteres. Esse tipo de cadeia pode se diferenciar entre dois subtipos:
•TinyText e TinyBlob: ambos os tipos armazenam dados com tamanho máximo de 255 caracteres.
•Text e Blob: esses tipos de campos alfanuméricos suportam textos com até 65535 caracteres:
•Text: na hora de ser ordenado quanto aos seus dados armazenados, esse subtipo não distingue letras maiúsculas de minúsculas.
•Blob: considera a diferença entre as letras maiúsculas e minúsculas na hora da ordenação.
•MediumBlob e MediumText: suportam textos com um máximo de 16777215 caracteres.
•LongBlob e LongText: suportam textos com até 4294967295 caracteres. Vale salientar que, em virtude de os protocolos de comunicação terem limites de tamanho de pacote, esses textos não devem passar dos 16 Mb de tamanho.
•Enum: tipo de campo que contém um único valor existente em uma lista especificada previamente. Esse tipo de dado suporta até 65535 valores diferentes.
•Set: trata-se de um tipo de campo que pode conter nenhum, um ou mais de um valor de uma lista especificada previamente. Essa lista suporta até 64 valores.
Com base no que aprendemos quanto aos tipos de dados, vamos continuar a preencher a estrutura da tabela “funcionarios”. Depois do tipo de dado (“Type”), o próximo campo a ser preenchido é o “Length/Values” (tamanho e valores). Nesse campo, devemos preencher o tamanho em bytes que aquela coluna ocupará na tabela que está sendo criada (largura da coluna). Se o tipo de dado que está sendo especificado for “Enum” ou “Set”, em vez de informar o tamanho do campo, deve-se informar a lista de valores que aquele dado poderá assumir quando a tabela estiver sendo “alimentada”, separados por vírgula. Por exemplo, se o campo do tipo “Enum” for a sigla dos estados da federação brasileira, deve-se informar o seguinte conteúdo nesse campo do formulário:
‘PE’, ´BA’, ‘CE’, ‘RN’, ‘PB’, ‘AL’, ‘SE’, ‘MA’, ‘PI’, ‘SP’, ‘RJ’, ES’, ‘MG’, ‘RS’, ‘SC’, ‘PR’, ‘DF’, ‘GO’, ‘MT’, ‘MS’, ‘TO’, ‘PA’, ‘AM’, ‘AP’, ‘RR’, ‘RO’, ‘AC’.
O próximo campo do formulário da estrutura da tabela é o valor “default”, ou seja, o dado que aparecerá previamente alimentado no campo quando uma nova linha for inserida na tabela. Por exemplo, se o campo for do tipo inteiro, em vez de zero, podemos querer que o campo não contenha nenhum valor válido, isto é, nulo. Assim, as definições possíveis para aparecerem como defaults em uma nova linha da tabela são as seguintes: None – no caso do tipo “Enum” ou “Set”, o default não será nenhum dado da lista.
Figura 4 – Valores possíveis para aparecerem como default
Fonte: Reprodução phpMyAdmin.
Já “As defined” – o default será o descrito no campo de formulário que irá aparecer quando esta opção for selecionada, como mostra a Figura 5.
Figura 5 – Campo “As defined”
Fonte: Reprodução phpMyAdmin.
Null: no caso de um campo do tipo numérico, em vez de zero, ele receberá o valor nulo (ou nenhum valor) se nada for digitado nele. É importante ter em mente que zero é diferente de nulo. Zero é um indicador de uma escala de valor; nulo é algo que simplesmente não existe. Já com o Current Timestamp, esse caso se aplica ao campo de tipo data ou data-hora. Se esse tipo de default for selecionado, a data de hoje e a hora corrente será automaticamente preenchida quando uma nova linha for inserida na tabela, a menos que o usuário digite outra data e hora por cima do campo no formulário de edição da tabela. No caso de campos do tipo caractere (cadeia/string), esse atributo representa o conjunto de caracteres a ser utilizado quando do preenchimento deste campo. Podemos entender um Collation como sendo um alfabeto selecionado para ser interpretado por um determinado campo do tipo caractere.
Figura 6 – Lista de Collations
Fonte: Reprodução phpMyAdmin.
Par selecionar o Attributes, que é um campo do formulário da estrutura da tabela no qual são aplicados apenas aos dados numéricos. O MySQL suporta uma extensão para, opcionalmente, especificar a largura da exibição de tipos de dados inteiros entre parênteses, seguindo a palavra-chave básica para o tipo. Por exemplo, INT (4) especifica um número inteiro com uma largura de exibição de quatro dígitos. Essa largura de exibição é opcional e pode ser usada por aplicativos para expor valores inteiros com uma largura menor que a largura especificada para a coluna, colocando-os à esquerda e com espaços.
Figura 7 – Opções de atributos para um campo
Fonte: Reprodução phpMyAdmin.
A largura do campo não restringe as faixas de valores que podem ser armazenadas na coluna, também, não impedem que os valores maiores que a largura de exibição da coluna sejam mostrados corretamente. Por exemplo, uma coluna especificada como SMALLINT (3) tem o intervalo SMALLINT usual de -32768 a 32767, e os valores fora do intervalo permitido por três dígitos são exibidos na íntegra usando mais de três dígitos. Quando usado em conjunto com o atributo ZEROFILL (opcional), o preenchimento padrão dos espaços é substituído por zeros. Por exemplo, para uma coluna declarada como INT (4) ZEROFILL, um valor de 12 é recuperado como 0012.
IMPORTANTE: |
|
O atributo ZEROFILL é ignorado quando uma coluna está envolvida em expressões ou consultas UNION. Se você armazenar valores maiores do que a largura de exibição do campo em uma coluna inteira que tem o atributo ZEROFILL, poderá ter problemas quando o MySQL gerar as tabelas temporárias para algumas junções complicadas. Nesses casos, o MySQL assumirá que os valores de dados se enquadram na largura de exibição da coluna. |
Todos os tipos inteiros podem ter um atributo UNSIGNED (opcional). O tipo não assinado (traduzido do inglês) pode ser usado para permitir apenas números não negativos em uma coluna, ou quando você precisa de um intervalo numérico maior para a coluna. Por exemplo, se uma coluna INT for UNSIGNED, o tamanho do alcance da coluna é o mesmo, mas seus pontos de extremidade mudam de -2147483648 e 2147483647 para 0 e 4294967295. Os tipos de pontos flutuante e fixo também podem ser SINCRONIZADOS, tal como acontece com os tipos inteiros. Esse atributo impede que os valores negativos sejam armazenados na coluna. Ao contrário dos tipos inteiros, a faixa superior dos valores das colunas permanece a mesma.
IMPORTANTE: |
|
Se você especificar ZEROFILL para uma coluna numérica, o MySQL adiciona, automaticamente, o atributo UNSIGNED à coluna. |
Após o campo “Attributes” do formulário de estrutura da tabela em foco, temos uma caixa de verificação intitulada “Null”. Marque essa caixa se o campo em questão for aceitar dados nulos gravados na tabela; caso não, deixe-a desmarcada.
Figura 8 – Aceitar ou não dados nulos neste campo
Fonte: Reprodução phpMyAdmin.
Independentemente de um campo ser a chave primária, secundária ou estrangeira de uma tabela, o MySQL permite que seja criado um índice para cada um de seus campos.
Figura 9 – Opções de índices para um campo de tabela
Fonte: Reprodução phpMyAdmin.
A criação de índices alternativos é uma boa estratégia para tornar o acesso à tabela mais rápido. Os tipos de índices que podem ser criados para um campo da tabela são os seguintes:
•Primary: índice primário, ou seja, aquele que é associado à chave primária da tabela. Só pode haver uma chave primária para uma tabela, logo, o índice primário traz dados únicos, sem repetição.
•Unique: índice único, ou seja, aquele que traz apenas dados únicos, sem repetição, mesmo não se tratando da chave primária da tabela. A única diferença entre o índice primário e o único está no fato de o primeiro não aceitar dados nulos, enquanto o segundo os aceita sem problemas.
•Index: trata-se de índice normal (ou alternativo), ou seja, pode ser associado a qualquer tipo de campo, aceitando repetição de dados. Os índices normais também permitem dados nulos, e são utilizados para agilizar o acesso a determinados conjuntos de dados. Por exemplo, o departamento de um funcionário, na tabela de funcionários, é um dado que se repete, pois vários funcionários podem pertencer a um mesmo departamento. No entanto, este é considerado um dado importante para muitas pesquisas de agrupamento e subtotalização, portanto, merece um índice.
•Fulltext: traduzindo do inglês, fulltext significa “texto cheio” (ou completo). Esses índices permitem que sejam obtidas, rapidamente, linhas que contenham determinada palavra de um campo ou conjunto de campos. Esse tipo de índice é fortemente recomendado para mecanismos de busca, uma vez que conseguem recuperar com rapidez as linhas que contêm várias palavras. Isso é possível graças à indexação das palavras mais relevantes para as buscas efetuadas.
IMPORTANTE: |
|
Somente tabelas do tipo MyISAM suportam índices fulltext. Além disso, o suporte é só para colunas do tipo char, varchar e text. A indexação ocorre na coluna toda e, como estamos usando o padrão InnoDB, vamos optar pelo índice normal. |
Ao escolher um tipo de índice, uma caixa de diálogo “pop-up” irá aparecer logo em seguida, solicitando alguns dados adicionais acerca do índice a ser criado. Como podemos observar na Figura a10, no caso de um índice primário, seu nome sempre será igual a “Primary”.
Figura 10 – Caixa de diálogo de criação de índice
Fonte: Reprodução phpMyAdmin.
Para qualquer outro tipo de índice, teremos a liberdade de escolher um nome para ele, como vemos nos exemplos a seguir.
Figura 11 – Criação do índice DEPTO para o campo “Depto”
Fonte: Reprodução phpMyAdmin.
Como dissemos em um exemplo anterior, o campo “Depto” (departamento) é um forte candidato a merecer um índice só para ele. Uma vez que esse campo pode se repetir para vários funcionários, ele se constitui em uma importante chave auxiliar para várias consultas e subtotalizações. No caso específico em tela, é importante que informemos o nome do índice, que, não necessariamente, será igual ao nome do campo, além de confirmarmos a coluna e o seu tamanho em bytes. Depois, para criar o índice, basta clicar no botão “Go”. Por fim, podemos observar as marcações de índices exibidas no formulário de estrutura da tabela “funcionarios”. Veja na Figura 12.
Figura 12 – Formulário de estrutura da tabela com os índices primário e auxiliar criados
Fonte: Reprodução phpMyAdmin.
Em algumas situações, precisamos que a cada nova linha de uma tabela, determinado campo tenha seu valor numérico adicionado de 1 (um), isso se aplica, por exemplo, a campos como código, matrícula, sequencial etc. Para tornar a matrícula do funcionário como um campo de autoincremento, por exemplo, basta marcar a caixa de verificação intitulada “A_I”, como mostra a Figura 13.
Figura 13 – Marcação da matrícula como um campo de autoincremento
Fonte: Reprodução phpMyAdmin.
Para um campo ser de autoincremento, ele precisa ser do tipo numérico e inteiro. Já os comentários, nesse campo do formulário de estrutura da tabela, você poderá descrever, exatamente, o que representa esta coluna para a tabela. O seu preenchimento é opcional, mas é considerado uma boa prática documentar. Isso é de grande valia para a equipe de programação e de administração de dados, que irá fazer a manutenção dos sistemas e do próprio banco de dados.
Alguns campos de uma tabela podem ser considerados como redundância controlada. Por exemplo: determinada coluna pode ser destinada tão somente a receber um cálculo envolvendo outras duas ou três colunas dessa mesma tabela, ou de outras (como é o caso das consultas).
Figura 14 – Campo virtual ou armazenado
Fonte: Reprodução phpMyAdmin.
Desse modo, nesse campo do formulário de estrutura da tabela, você pode sinalizar que se trata de um campo virtual, em vez de um campo armazenado (stored).
Uma vez concluído o preenchimento de todos os campos do formulário de estrutura da tabela, basta clicar em “Go” para que o phpMyAdmin execute o comando CREATE TABLE, correspondente aos dados “alimentados” no referido formulário. A página a seguir será carregada após esta ação.
Figura 15 – Visualização da estrutura da tabela “funcionarios” recém-criada
Fonte: Reprodução phpMyAdmin.
Para alterar os dados referentes a cada uma das colunas da tabela recém-criada, basta clicar sobre o ícone “lápis”, intitulado “change”, cada ícone se refere a uma coluna de forma específica. Você também pode alterar várias colunas de uma só vez, para isso, basta marcar as colunas desejadas e clicar no ícone “Change”, localizado abaixo da estrutura da tabela. Assim como você também pode alterar ou eliminar os índices gerados anteriormente. Para isso, basta clicar no ícone “Change” ou “Drop”, localizados no canto inferior esquerdo da página, para, respectivamente, alterar e eliminar cada índice criado. Como estamos utilizando o padrão InnoDB, que é o formato recomendado para possibilitar o estabelecimento de integridade referencial ente tabelas, como veremos mais adiante, é importantíssimo não especificarmos os tamanhos das colunas-chave. O default do padrão InnoDB para criação de chave primária é o formato INT(11). Assim sendo, deixe esse formato em branco, tanto na coluna da chave primária quanto na especificação do tamanho da chave primária no índice.
RESUMINDO: |
|
E então? Gostou do que lhe mostramos? Aprendeu mesmo tudinho? Agora, só para termos certeza de que você realmente entendeu o tema de estudo deste capítulo, vamos resumir tudo o que vimos. Você deve ter aprendido que precisamos entender um banco de dados como um conjunto de tabelas que podem ou não estar relacionadas entre si. Esse relacionamento se dá por meio de uma ligação lógica entre dados das duas tabelas, de modo que, antes mesmo de qualquer programa tentar inserir, alterar ou excluir linhas, o próprio SGBD estará validando (ou não) tais operações, conforme sejam as regras de negócio implementadas nessas ligações. Tudo isso que tratamos recebe o nome de “integridade referencial”. |
OBJETIVO: |
|
Ao término deste capítulo, você será capaz de inserir linhas em uma tabela de banco de dados. Isso será fundamental para o exercício de sua profissão. E então? Motivado para desenvolver esta competência? Então vamos lá. Avante!. |
Antes de entendermos como funciona o processo de inserção de linhas e atualização de uma tabela, precisamos compreender que, em uma transação, antes de acessarmos qualquer uma das tabelas de um banco de dados, é necessário o abri-lo para uso (NOGUEIRA, 2017a).
Figura 16 – Abrindo o banco de dados
Fonte: Reprodução phpMyAdmin.
Abrir um banco de dados pelo phpMyAdmin é muito simples, basta clicar sobre o seu nome na barra lateral de menu. Na prática, esse simples clique representa a execução de um comando intitulado “USE”.
USE [nome do banco de dados];
A partir do momento em que abrimos um banco de dados, podemos utilizar todos os seus objetos (ou estruturas de dados), como tabelas, consultas gravadas, visões etc.
SAIBA MAIS: |
|
Para se aprofundar nos temas desta aula, recomendamos a leitura do artigo a seguir. Para acessar, clique aqui. |
O MySQL adiciona linhas após a última linha gravada em uma tabela, para isso, ele disponibiliza um comando intitulado INSERT.
INSERT INTO [tabela] ([Campo 1], [Campo 2], [Campo 3],...) VALUES ([Valor Campo 1], [Valor Campo 2], [Valor Campo 3],...);
Em que:
•[tabela]: é o nome da tabela na qual deseja-se adicionar linhas.
•[Campo #]: é o campo que deverá ser preenchido com o [Valor campo #].
•[Valor campo #]: é o dado que deve ser gravado no [Campo #].
O comando INSERT pode ser simulado pelo phpMyAdmin na aba “Insert”, como mostra o exemplo ilustrado na Figura 17.
Figura 17 – Formulário de inserção de linha em uma tabela pelo phpMyAdmin
Fonte: Reprodução phpMyAdmin.
Preencher os dados acima e clicar em “Go” é o mesmo que executar o seguinte comando:
INSERT INTO `funcionarios` (`matric`, `nome`, `depto`, `salario`, `telefone`) VALUES (‘00001’, ‘JOÃO ALBERTO SILVA’, ‘001’, ‘4800’, ‘(81)988776655’);
Após a execução do comando INSERT, a página de retorno do phpMyAdmin será a seguinte, como apresentado na Figura 18.
Figura 18 – Página de retorno (feedback) do phpMyAdmin após a execução do comando INSERT
Fonte: Reprodução phpMyAdmin.
Observe que, mesmo após ter concluído a execução do comando INSERT, o phpMyAdmin ainda deixa o comando editado no formulário para que você possa executá-lo novamente.
Tabela 2 – Massa de dados para a tabela “funcionários” a ser criada
Matric |
Nome |
Endereço |
Salário |
Depto. |
0001 |
JOÃO ALBERTO SILVA |
RUA VERGUEIRO, 40, APTO. 202 |
R$ 4.800,00 |
DRH |
0002 |
MARIA CYNTHIA COSTA |
AV. SOARES DA VEIGA, 1468, APTO 1301 |
R$ 3.750,00 |
DRH |
0003 |
ANA MARIA CARDOSO |
RUA HOMERO MACEDO, 608, APTO. 101-A |
R$ 6.550,00 |
MKT |
0004 |
SÍLVIO ROMERO DOTAS |
RUA VERGUEIRO, 44 |
R$ 2.850,00 |
MKT |
0005 |
SANDRA MARIA MOTA |
AV. SETE DE SETEMBRO, 1209, APTO. 401 |
R$ 4.200,00 |
MKT |
Fonte: Nogueira (2017b).
Agora é momento de exercitar o comando INSERT. Para isso, utilize a massa de dados da Tabela 3, lembrando que já adicionamos o primeiro registro.
RESUMINDO: |
|
E então? Gostou do que lhe mostramos? Aprendeu mesmo tudinho? Agora, só para termos certeza de que você realmente entendeu o tema de estudo deste capítulo, vamos resumir tudo o que vimos. Aqui, foi apresentado um novo comando para inserir registros em uma tabela qualquer, o comando INSERT. Para entendermos melhor como isso funciona, ao inserirmos uma linha em uma tabela, é adicionado um novo conjunto de dados após a última linha gravada na tabela. Por definição, não existem comandos DDL capazes de inserir linhas em meio à tabela, mas sempre ao seu término. Portanto, uma nova linha sempre estará posicionada após a última, e assim por diante. Apenas os índices garantirão o correto posicionamento de determinada linha em uma consulta. |
OBJETIVO: |
|
Ao término deste capítulo, você será capaz de atualizar dados em uma tabela de banco de dados. Isso será fundamental para o exercício de sua profissão. E então? Motivado para desenvolver esta competência? Então, vamos lá. Avante!. |
O comando UPDATE é utilizado para serem efetuadas alterações nos dados que ocupam os campos da tabela, em todas as linhas que obedeçam a determinada expressão condicional. Para testarmos o comando UPDATE em nossa tabela de funcionários, vamos, primeiramente, abrir o banco de dados e clicar sobre o ícone da tabela “funcionarios”, como mostra a Figura 19.
Figura 19 – Abrindo o bando de dados e selecionando a tabela
Fonte: Reprodução phpMyAdmin.
Depois de selecionada a tabela, clique sobre a aba “SQL” e visualize a Figura 20.
Figura 20 – Aba de comandos SQL (e DML) disponível para a tabela “funcionarios”
Fonte: Reprodução phpMyAdmin.
Perceba que o phpMyAdmin já monta um comando de consulta SQL padrão (SELECT) no painel central da página (VOLACO, 2007). Clique no botão “Update” para mudar a sintaxe do comando para o UPDATE. Depois de selecionada a tabela, clique na a aba “SQL”, e perceba que o phpMyAdmin já monta um comando de consulta SQL padrão (SELECT) no painel central da página. Clique em “Update” para mudar a sintaxe do comando para o UPDATE. A sintaxe geral do comando UPDATE é a seguinte:
UPDATE [tabela] SET `campo1`=[valor1],`campo2`=[valor2], `campoN`=[valorN] WHERE [condição];
Em que:
•[tabela]: é o nome da tabela na qual deseja-se atualizar dados.
•[campo#]: é o nome do campo que se deseja alterar.
•[valor#]: é o novo conteúdo que deve ser gravado no respectivo campo.
•[condição]: é a expressão lógica que deve ser codificada para restringir as linhas que devem ser atualizadas.
Para entendermos melhor, imagine que queiramos alterar todos os salários superiores a R$ 4.000,00, aplicando-lhes um aumento de 10%. Vamos considerar, para este exemplo, que a tabela “funcionarios” foi povoada com os seguintes registros (linhas), até o momento, conforme exemplificado na Figura 21.
Figura 21 – Imagem da página contida na aba “Browse” (navegar) do phpMyAdmin
Fonte: Reprodução phpMyAdmin.
Para obter a visualização ilustrada na Figura 21, clique na aba “Browse” (navegar) do phpMyAdmin, com a tabela “funcionarios” selecionada. Note que é possível atualizar, manualmente, os salários pretendidos, bastando, para isso, clicar no botão “Edit” ao lado de cada uma das linhas que se deseja alterar.
SAIBA MAIS: |
|
Para se aprofundar nos temas, recomendamos a leitura da fonte de consulta e aprofundamento a seguir. Para acessar, clique aqui. |
Mas, o que queremos, de fato, é fazer uma alteração em massa, correto? Nesse caso, vamos voltar à aba “SQL” e, mais uma vez, clicar no botão “Update” para o phpMyAdmin formatar um comando UPDATE default. Chegando lá, digite o seguinte comando:
UPDATE funcionarios SET `salario`=salario*1.1 WHERE `salario`>4000;
Ao clicar no botão “Go” (prossiga), o phpMyAdmin irá submeter esse comando ao MySQL, que retornará a seguinte mensagem ao phpMyAdmin, conforme a Figura 22.
Figura 22 – Página de retorno do MySQL para o phpMyAdmin
Fonte: Reprodução phpMyAdmin.
Na prática, os seguintes três registros foram alterados, conforme a Figura 23.
Figura 23 – Três linhas foram alteradas pelo comando UPDATE
Fonte: Reprodução phpMyAdmin.
Agora, vamos exercitar o comando UPDATE alterando os departamentos de código 3 para 2.
Tabela 3 – Massa de dados alterada após dois últimos comandos UPDATE
Matric |
Nome |
Endereço |
Salário |
Depto |
0001 |
JOÃO ALBERTO SILVA |
R. VERGUEIRO, 40, APTO. 202 |
R$ 5.280,00 |
001 |
0002 |
MARIA CYNTHIA COSTA |
AV. SOARES DA VEIGA, 1468, APTO. 1301 |
R$ 3.750,00 |
001 |
0003 |
ANA MARIA CARDOSO |
RUA HOMERO MACEDO, 608, APTO. 101-A |
R$ 7.205,00 |
002 |
0004 |
SÍLVIO ROMERO DOTAS |
RUA VERGUEIRO, 44 |
R$ 2.850,00 |
002 |
0005 |
SANDRA MARIA MOTA |
AV. SETE DE SETEMBRO, 1209, APTO. 401 |
R$ 4.620,00 |
002 |
Fonte: Nogueira (2017a).
É importante salientar que é necessário, primeiro, inserir linhas em uma tabela, para, posteriormente, ser possível atualizar dados em linhas já existentes.
RESUMINDO: |
|
E então? Gostou do que lhe mostramos? Aprendeu mesmo tudinho? Agora, só para termos certeza de que você realmente entendeu o tema de estudo deste capítulo, vamos resumir tudo o que vimos. Você deve ter aprendido que depois de saber como inserir linhas em uma tabela, é possível atualizar dados em linhas já existentes. É o procedimento de alteração dos dados gravados em determinada linha da tabela, por via ambiente de administração de dados ou por meio de um programa escrito em uma linguagem qualquer. O comando DML utilizado para alterar dados em uma tabela é o UPDATE. A principal vantagem desse comando é a sua capacidade de atuar, não apenas em uma, mais em um conjunto de linhas que satisfaça uma determinada condição. Essa condição pode ser simples, por exemplo: alterar todos os salários de quem ganha mais de R$ 1.700,00 com um aumento de 10%. |
OBJETIVO: |
|
Ao término deste capítulo, você será capaz de eliminar linhas em uma tabela em uma tabela de banco de dados. Isso será fundamental para o exercício de sua profissão. E então? Motivado para desenvolver esta competência? Então, vamos lá. Avante!. |
No MySQL, assim como nos demais SGBDs que utilizam o padrão ANSI, o comando para deletar linhas de uma tabela é o DELETE. Sua sintaxe é bastante parecida com a dos demais comandos que vimos anteriormente, ou seja, tem uma cláusula WHERE, seguida de uma condição (RODRIGUES, 2012), como mostra a sintaxe a seguir:
DELETE FROM [tabela] WHERE [condição];
Onde:
•[tabela]: tabela na qual as linhas deverão ser eliminadas.
•[condição]: expressão lógica que expressa a condição que restringe as linhas a serem eliminadas da tabela [tabela].
A cláusula WHERE permite que várias linhas sejam deletadas de uma só vez, contanto que seja atendida a condição descrita naquela cláusula, como no exemplo a seguir.
DELETE FROM `funcionarios` WHERE `depto`=3;
Nesse caso, todos os funcionários que pertencem ao departamento de código 3 serão deletados da tabela “funcionarios”. Utilize o construtor de comandos SQL do phpMyAdmin para testar o comando anterior. Você verá que, após as operações realizadas na massa de dados da tabela “funcionarios”, o resultado da execução desse comando não resultará em eliminação de linha alguma, uma vez que não mais existem funcionários pertencentes ao departamento de código 3. Veja você mesmo o resultado disso no console do phpMyAdmin, conforme ilustra a Figura 24.
Figura 24 – Construção do comando DELETE para eliminar todos os funcionários do departamento 3
Fonte: Reprodução phpMyAdmin.
Após ter digitado o comando DELETE, tal e qual os requisitos explicados anteriormente, basta clicar no botão “Simulate query” (simular consulta) para testar quais linhas, de fato, seriam deletadas caso o comando fosse executado, ou diretamente no botão “Go”. Primeiramente, tente clicar no botão “Simulate query” e visualize a seguinte mensagem do MySQL, por meio da interface do phpMyAdmin, conforme apresentado na Figura 25.
Figura 25 – Mensagem de retorno do MySQL para a deleção dos funcionários do departamento de número 3
Fonte: Reprodução phpMyAdmin.
Como, de fato, havíamos alterado o único funcionário do departamento 3 para o departamento 2, anteriormente, o resultado desse comando não poderia ser outro, senão “Matched rows: 0”, ou seja, a quantidade de linhas correspondentes é igual a zero.
IMPORTANTE: |
|
Como o MySQL não dispõe de comandos de reversão para ações como exclusão de linhas, no caso de uso pelo phpMyAdmin, convém sempre simular a deleção em massa, em vez de eliminar linhas de forma intempestiva, pois uma vez deletada uma linha, não haverá como revertê-la. No caso do uso do MySQL em transações de programas PHP, existem alguns comandos que podem contornar essa situação, como o COMMIT (que confirma a transação) e o ROLLBACK (que a reverte). |
Caso tenha certeza de que, realmente, as linhas a serem deletadas são as que você predefiniu na cláusula WHERE, clique em “Go” e veja a seguinte mensagem de retorno (feedback), conforme apresentado na Figura 26.
Figura 26 – Mensagem de retorno da execução de um comando DELETE
Fonte: Reprodução phpMyAdmin.
Agora, vamos praticar. Exercite o comando DELETE, povoando a tabela “funcionarios” com mais cinco linhas que satisfaçam determinada condição.
SAIBA MAIS: |
|
Falamos a respeito de comandos específicos para reversão ou confirmação de uma transação em uma tabela MySQL. Para saber mais sobre o assunto, leia o artigo a seguir. Para acessar, clique aqui. |
Depois, execute o comando DELETE com uma condição na cláusula WHERE que delete apenas aquilo que você adicionou na tabela.
Tabela 4 – Massa de dados alterada após dois últimos comandos UPDATE, para ser adicionada de cinco linhas
Matric |
Nome |
Endereço |
Salário |
Depto |
0001 |
JOÃO ALBERTO SILVA |
RUA VERGUEIRO, 40, APTO. 202 |
R$ 5.280,00 |
001 |
0002 |
MARIA CYNTHIA COSTA |
AV. SOARES DA VEIGA, 1468, APTO. 1301 |
R$ 3.750,00 |
001 |
0003 |
ANA MARIA CARDOSO |
RUA HOMERO MACEDO, 608, APTO. 101-A |
R$ 7.205,00 |
002 |
0004 |
SÍLVIO ROMERO DOTAS |
RUA VERGUEIRO, 44 |
R$ 2.850,00 |
002 |
0005 |
SANDRA MARIA MOTA |
AV. SETE DE SETEMBRO, 1209, APTO. 401 |
R$ 4.620,00 |
002 |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
Fonte: Nogueira (2017a).
Antes de tudo, é importante conhecer a diferença entre os termos “deleção” e “exclusão” de dados. Aparentemente, eles parecem significar a mesma coisa, mas são procedimentos diferente.
RESUMINDO: |
|
E então? Gostou do que lhe mostramos? Aprendeu mesmo tudinho? Agora, só para termos certeza de que você realmente entendeu o tema de estudo deste capítulo, vamos resumir tudo o que vimos. Você deve ter aprendido a diferença entre os termos “deleção” e “exclusão” de dados. Aparentemente, eles parecem significar a mesma coisa, mas é só aparência, pois ao excluirmos algo do disco rígido, por exemplo, damos um adeus àquela informação excluída. Mas, ao deletarmos essa mesma informação, pedimos ao sistema operacional que a suprima de nossas visualizações. Nesse caso, a informação continua lá, mas invisível para nós. Com a grande maioria dos bancos de dados acontece a mesma situação. Ao deletarmos uma linha de uma tabela, o SGBD muda o status daquela linha para “deletada”. Alguns gerenciadores implementam comandos como RECALL, RESTORE, UNDO etc. para recuperar linhas deletadas. |
REFERÊNCIAS
NOGUEIRA, J. Tecnologias e linguagens de banco de dados: eliminando linhas em uma tabela. Recife: Unissau, 2017a.
NOGUEIRA, J. Tecnologias e linguagens de banco de dados: manipulando estruturas de tabelas. Recife: Unissau, 2017b.
REIS, F. Excluir registros de uma tabela no MySQL com DELETE e TRUNCATE TABLE. Bóson Treinamentos em Ciência e Tecnologia, 2013. Disponível em: http://www.bosontreinamentos.com.br/mysql/mysql-delete-e-truncate-table-excluir-registros-de-uma-tabela-16. Acesso em: 26 fev. 2022.
RODRIGUES, J. Índices MySQL: otimização de consultas. Linha de Código, 2012. Disponível em: http://www.linhadecodigo.com.br/artigo/3620/indices-mysql-otimizacao-de-consultas.aspx. Acesso em: 26 fev. 2022.
SQL. 1Keydata, [20--?]. Disponível em: https://www.1keydata.com/pt/sql/sql-update.php. Acesso em: 26 fev. 2022.
VOLACO, E. B. Instruções SQL para manipulação de dados. DevMedia, 2007. Disponível em: https://www.devmedia.com.br/10-instrucoes-sql-para-manipulacao-de-dados/4832. Acesso em: 26 fev. 2022.