<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 é capacitar o aluno a entrar no mercado de trabalho executando as atividades primordiais que são solicitadas no desenvolvimento, manutenção, ou atualização de bancos de dados dos mais diferentes tipos de sistemas.</p>
<p>Focamos na execução, e não em criação de diagramas - atividade essa que é 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 é gratuita e de fácil utilização - entretanto, todo o nosso conteúdo pode ser aplicado em qualquer Gerenciador de Bancos de Dados Relacionais, apenas com algumas mínimas diferenç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é-definidos];</li>
<li>trigger;</li>
<li>function;</li>
</ul>
<p> </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>

-->
<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>