<p><img src="https://i.imgur.com/D01Fpky.png" alt="" title="Entre no nosso site e veja nossos cursos"></p> <h1> <img class="emoji" alt="" src="https://image.flaticon.com/icons/png/128/2906/2906274.png"> BD Essencial - Aula 5 </h1> <p>O objetivo desse curso &eacute; capacitar o aluno a entrar no mercado de trabalho executando as atividades primordiais que s&atilde;o solicitadas no desenvolvimento, manuten&ccedil;&atilde;o, ou atualiza&ccedil;&atilde;o de bancos de dados dos mais diferentes tipos de sistemas.</p> <p>Focamos na execu&ccedil;&atilde;o, e n&atilde;o em cria&ccedil;&atilde;o de diagramas - atividade essa que &eacute; desenvolvida por profissionais mais experientes.</p> <p>Nas nossas prieiras aulas, utilizamos o Gerenciador de Bancos de Dados Relacionais <strong>MySQL</strong> nesse nosso curso de Banco de Dados Essencial, porque essa ferramenta &eacute; gratuita e de f&aacute;cil utiliza&ccedil;&atilde;o - entretanto, todo o nosso conte&uacute;do pode ser aplicado em qualquer Gerenciador de Bancos de Dados Relacionais, apenas com algumas m&iacute;nimas diferen&ccedil;as.</p> <p>Na segunda parte do curso, utilizamos o Gerenciador de Bancos de Dados Relacionais <strong>PostgreSQL</strong>.</p> <blockquote style="border-left-color: red;"> <p><span class="color" data-color="red"></span><span> </span><small><i class="fa fa-user"></i> Prof Fernando Gomes - fernandojnr@gmail.com</small></p></blockquote> <h2 id="-Tema-da-aula" data-id="-Tema-da-aula"><a class="anchor hidden-xs" href="#-Tema-da-aula" title="-Tema-da-aula"><span class="octicon octicon-link"></span></a><img class="emoji" alt=":book:" src="https://cdn.jsdelivr.net/npm/@hackmd/emojify.js@2.1.0/dist/images/basic/book.png"> <span> Tema da aula:</span></h2><span> <p>Nessa quinta aula, vamos comaçar a trabalhar com <strong>PostgreSQL</strong>. Vamos falar sobre</p> <ul> <li>SERIAL;</li> <li>INHERITANCE;</li> <li>\c, \l, \dt, \d</li> <li>Collation, CTYPE;</li> <li>datname;</li> <li>sequence;</li> <li>nextval, currval;</li> <li>except;</li> <li>check [para usar com valores pr&eacute;-definidos];</li> <li>trigger;</li> <li>function;</li> </ul> <p>&nbsp;</p> ```sql= create database banco10; -- use banco10 \c banco10 select current_database(); -- Mostra o banco corrente (banco10) \l -- lista os bancos de dados -- onde Collation eh um conjunto de regras que diz -- ao software gerenciador de banco de dados -- como comparar e classificar os dados de caracteres; -- CTYPE eh um conjunto de regras complementares -- que tratam de comparacao quando ha letras maiusculas -- e minusculas; -- listando apenas os nomes dos bancos de dados -- e listando bancos de dados com nomes contando 'banco' SELECT datname FROM pg_database; datname ----------- template1 template0 postgres banco10 (4 rows) SELECT datname FROM pg_database where datname like'banco%'; datname --------- banco10 (1 row) select version(); select version(); version -------------------------------------- PostgreSQL 9.5.25, compiled by Visual C++ build 1800, 64-bit \dt -- mostra as tabelas do banco create table pessoa( id SERIAL primary key, nome varchar (50)); create table cliente( email varchar (50), sexo varchar (1)) inherits (pessoa); \d cliente; Column | Type --------+----------------------- id | integer nome | character varying(50) email | character varying(50) sexo | character varying(1) Inherits: pessoa insert into pessoa (nome) values ('luis'), ('Carlos'), ('manoela'); -- inSert INCORRETO insert into cliente values (3,'manoela','manoela@gmail.com','f'); insert into cliente values (1,'luis','luis@gmail.com','m'); select * from cliente; id | nome | email | sexo ----+---------+-------------------+------ 3 | manoela | manoela@gmail.com | f 1 | luis | luis@gmail.com | m (2 rows) select * from pessoa; id | nome ----+--------- 1 | luis 2 | Carlos 3 | manoela 3 | manoela 1 | luis (5 rows) delete from pessoa; delete from cliente; -- inserts corretos: "de baixo para cima" insert into cliente (nome, email, sexo) values ('manoela','manoela@gmail.com','f'), ('luis','luis@gmail.com','m'); create table pessoa2( id int primary key, nome varchar (50)); create sequence seq_pessoa2; insert into pessoa2 values (nextval('seq_pessoa2'),'luis'); insert into pessoa2 values (nextval('seq_pessoa2'),'Carlos'); insert into pessoa2 values (nextval('seq_pessoa2'),'manoela'); select * from pessoa2; id | nome ----+--------- 1 | luis 2 | Carlos 3 | manoela (3 rows) select currval('seq_pessoa2'); currval --------- 3 (1 row) create table clientePJ( cnpj int unique) inherits (cliente); \d clientePJ \d clientePJ Column | Type --------+----------------------- id | integer nome | character varying(50) email | character varying(50) sexo | character varying(1) cnpj | integer insert into clientePJ values (40,'lu pinturas','luciana@gmail.com','f',101101); delete from clientePJ; insert into clientePJ (nome, email, sexo, cnpj) values ('lu pinturas','luciana@gmail.com','f',101101); insert into clientePJ values (40,'lu pinturas','luciana@gmail.com','f',101101); select * from clientePJ; id | nome | email | sexo | cnpj ----+-------------+-------------------+------+-------- 40 | lu pinturas | luciana@gmail.com | f | 101101 (1 row) delete from clientePJ; insert into clientePJ (nome, email, sexo, cnpj) values ('lu pinturas','luciana@gmail.com','f',101101); select * from clientePJ; id | nome | email | sexo | cnpj ----+-------------+-------------------+------+-------- 12 | lu pinturas | luciana@gmail.com | f | 101101 (1 row) select * from cliente; id | nome | email | sexo ----+-------------+-------------------+------ 10 | manoela | manoela@gmail.com | f 11 | luis | luis@gmail.com | m 12 | lu pinturas | luciana@gmail.com | f (3 rows) select * from pessoa; id | nome ----+------------- 10 | manoela 11 | luis 12 | lu pinturas (3 rows) select id, nome, email, sexo from cliente except select id, nome, email, sexo from clientePJ; -- ATENCAO! as colunas precisam ser as mesmas -- precisa haver uma chave primaria select id, nome, email, sexo from clientePJ; id | nome | email | sexo ----+---------+-------------------+------ 11 | luis | luis@gmail.com | m 10 | manoela | manoela@gmail.com | f (2 rows) drop database banco20; create database banco20; \c banco20; create table Cliente(idCliente int primary key, nome varchar (35), email varchar (50) unique, sexo varchar (1) check (sexo in ('m','f'))); create table Venda (idVenda int primary key, valorVenda float, produto varchar (35), data date, id_Cliente int, foreign key(id_Cliente) references Cliente(idCliente)); create sequence seq_cliente; create sequence seq_venda; insert into cliente values (nextval('seq_cliente'),'lu','lu@gmail.com','f'), (nextval('seq_cliente'),'paulo','paulo@gmail.com','m'), (nextval('seq_cliente'),'wallace','wallace@gmail.com','m'); select * from cliente; idcliente | nome | email | sexo -----------+---------+-------------------+------ 1 | lu | lu@gmail.com | f 2 | paulo | paulo@gmail.com | m 3 | wallace | wallace@gmail.com | m (3 rows) create table log(cod serial primary key, data date, autor varchar (35), alteracao varchar (50), codigocliente int, codigoVenda int ); -- usando Trigger para escrever em uma tabela de log -- qualquer insert, update ou delete na tabela venda -- fica registrada no log -- funcao q executa o registro no log create function gera_log() returns trigger as $$ begin insert into log (data ,autor,alteracao, codigocliente,codigovenda) values (now(), user , TG_OP, new.id_Cliente, new.idVenda); return new; end; $$ language 'plpgsql'; -- trigger q dispara a funcao create trigger tr_gera_log after insert or update or delete on Venda for each row execute procedure gera_log(); insert into venda values (nextval('seq_venda'), 1000, 'movel', now(), 3); -- idVenda, valorVenda, produto, data, id_Cliente select * from log; cod | data | autor | -----+------------+----------+- 1 | 2021-03-28 | postgres | alteracao | codigocliente | codigovenda ----------+---------------+------------- INSERT | 3 | 1 ``` <!-- <h3> Tipos de Dados Numéricos do MySQL </h3> <p> Na tabela abaixo vemos os tipos da dados numéricos aceitos no MySQL. Utilizamos, BIT ou TINYINT(1) para armazenar um campo booleano. Além dessa situação, os mais utilizados são TINYINT, INT, e DOUBLE. Por padrão, os campos admitem números com sinal, portanto, o padrão [default] é SIGNED. </p> ![](https://i.imgur.com/ctbQVW0.png) --> <blockquote style="border-left-color: red;"> <p><span class="color" data-color="red"></span><span> </span><small><i class="fa fa-user"></i> Prof Fernando Gomes - fernandojnr@gmail.com</small></p></blockquote> <br> <div class="alert alert-info"> <blockquote style="border-left-color: blue;"> <p><span class="color" data-color="blue"></span><span> </span><small><i class="fa fa-user"></i> E.B. Cursos https://www.cursoseb.com.br/</small><br> <span class="color" data-color="blue"></span><span> </span><small><i class="fa fa-user"></i> E.B. Cursos EAD https://edsonbelemtreinamento.com.br/ead/</small></p> </blockquote> </div>