MySQL banco de dados relacional
sqldatabasemysql
🚀 Conexão & Setup
| Conectar ao MySQL | mysql -u root -p |
| Conectar a banco específico | mysql -u user -p -h localhost mydb |
| Criar banco de dados | CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; |
| Listar bancos | SHOW DATABASES; |
| Criar usuário | CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'password'; |
| Dar permissões | GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost'; |
| Ver versão | SELECT VERSION(); |
| Iniciar serviço | sudo systemctl start mysql |
📋 DDL - Estrutura
| Criar tabela | CREATE TABLE users ( |
| Adicionar coluna | ALTER TABLE users ADD COLUMN age INT; |
| Criar índice | CREATE INDEX idx_users_email ON users(email); |
| Foreign key | ALTER TABLE posts ADD CONSTRAINT fk_user |
| Criar view | CREATE VIEW active_users AS |
| Auto increment custom | ALTER TABLE users AUTO_INCREMENT = 1000; |
| Enum type | ALTER TABLE users ADD COLUMN status ENUM('active', 'inactive', 'banned') DEFAULT 'active'; |
🔍 Consultas & Joins
| JOIN com agregação | SELECT u.name, COUNT(p.id) as posts |
| Subquery | SELECT * FROM users |
| Window functions | SELECT name, salary, |
| Full-text search | ALTER TABLE articles ADD FULLTEXT(content); |
| JSON operations | SELECT JSON_EXTRACT(data, '$.name') as name, |
| Pagination | SELECT * FROM users |
⚡ Performance & Otimização
| EXPLAIN query | EXPLAIN SELECT * FROM users WHERE email = 'test@example.com'; |
| Ver índices | SHOW INDEX FROM users; |
| Analyze table | ANALYZE TABLE users; |
| Ver status do InnoDB | SHOW ENGINE INNODB STATUS; |
| Ver conexões ativas | SHOW PROCESSLIST; |
| Cache hit ratio | SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%'; |
| Tamanho das tabelas | SELECT table_name, data_length, index_length |
🔄 Backup & Restore
| Backup completo | mysqldump -u root -p mydb > backup.sql |
| Backup comprimido | mysqldump -u root -p mydb | gzip > backup.sql.gz |
| Backup de estrutura apenas | mysqldump -u root -p --no-data mydb > schema.sql |
| Restore de backup | mysql -u root -p mydb < backup.sql |
| Backup remoto | mysqldump -h remote.host -u user -p mydb > backup.sql |
| Backup incremental | mysqlbinlog --start-datetime="2023-01-01 00:00:00" /var/log/mysql/mysql-bin.000001 > incremental.sql |
🔧 Administração
| Ver variáveis globais | SHOW GLOBAL VARIABLES; |
| Alterar variável | SET GLOBAL innodb_buffer_pool_size = 268435456; |
| Ver status | SHOW GLOBAL STATUS; |
| Ver logs de erro | tail -f /var/log/mysql/error.log |
| Ver tamanho do banco | SELECT table_schema "Database", |
| Flush privileges | FLUSH PRIVILEGES; |
| Reset root password | ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword'; |