Bases de Dados (CC2005), Dep. Ciência de Computadores, FCUP
Eduardo R. B. Marques, DCC/FCUP
DROP TABLE IF EXISTS USER_GROUP;
CREATE TABLE IF NOT EXISTS USER_GROUP
(
Num INT PRIMARY KEY AUTO_INCREMENT,
Creation DATETIME NOT NULL DEFAULT NOW(),
Name VARCHAR(64) UNIQUE NOT NULL,
Description TEXT
);
INSERT INTO USER_GROUP(Num, Creation, Name, Description)
VALUES (1, '2020-01-01 12:34:56', 'Horror Movies', NULL);
Integridade de chave primária:
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
INSERT INTO USER_GROUP(Name,Description)
VALUES ('Azul e branco', 'Adeptos do FCP - grupo alternativo');
Integridade de chave secundária (campo Name tem modificador UNIQUE):
ERROR 1062 (23000): Duplicate entry 'Azul e branco' for key 'Name'
INSERT INTO USER_GROUP(Creation, Name,Description)
VALUES (NULL, 'Horror Movies', 'A group about horror movies');
Integridade de domínio:
ERROR 1048 (23000): Column 'Creation' cannot be null
INSERT INTO USER_GROUP(Creation, Name,Description)
VALUES ('2020-02-31 12:34:56', 'Horror Movies', 'A group about horror movies');
Integridade de domínio (31 de Fevereiro!):
ERROR 1292 (22007): Incorrect datetime value: '2020-02-31 12:34:56' for column 'Creation' at row 1
DROP TABLE IF EXISTS GROUP_MEMBER;
CREATE TABLE IF NOT EXISTS GROUP_MEMBER
(
UNum INT NOT NULL,
GNum INT NOT NULL,
Role ENUM('Admin','Moderator','Member') NOT NULL,
PRIMARY KEY(UNum,GNum),
FOREIGN KEY(UNum) REFERENCES USER(Num),
FOREIGN KEY(GNum) REFERENCES USER_GROUP(Num)
);
ALTER TABLE POST
ADD COLUMN GNum INT DEFAULT NULL;
ALTER TABLE POST
ADD FOREIGN KEY(GNum) REFERENCES USER_GROUP(Num);
ALTER TABLE GROUP_MEMBER
MODIFY Role ENUM('Admin','Moderator','Member','Guest') NOT NULL;
ALTER TABLE USER
ADD UNIQUE(Email);
ALTER TABLE USER
DROP COLUMN Phone;
SELECT Login,Name,BirthDate
FROM USER
WHERE Sex='M'
ORDER BY BirthDate DESC, Login;
SELECT Login,Name,BirthDate
FROM USER
ORDER BY BirthDate DESC, Login
LIMIT 3;
SELECT DISTINCT Tag
FROM HASHTAG
ORDER BY Tag;
SELECT Login, Name
FROM USER
WHERE Sex='F' AND Name Like '%y%'
ORDER BY login;
SELECT Num,Creation,Content
FROM POST
WHERE HOUR(Creation) >= 5 AND HOUR(Creation) < 18
ORDER BY Creation DESC;
SELECT Login,BirthDate
FROM USER
WHERE Sex = 'M'
ORDER BY BirthDate
LIMIT 3;
SELECT
Login,
BirthDate,
TIMESTAMPDIFF(YEAR, BirthDate, '2020-01-10') AS Age
FROM USER
ORDER BY Age
LIMIT 4;