Introducción a SQL y MySQL — Fundamentos para SQL Injection

Este módulo introduce la inyección SQL usando MySQL. Es esencial comprender SQL y el funcionamiento de MySQL para entender cómo se ejecutan las inyecciones SQL correctamente.
A continuación se explican los conceptos base, sintaxis y ejemplos usados en MySQL/MariaDB.


🧾 Lenguaje SQL (Structured Query Language)

La sintaxis SQL puede variar entre RDBMS, pero todos siguen el estándar ISO.
Aquí usaremos la sintaxis de MySQL/MariaDB.

SQL permite:


💻 Línea de Comando para MySQL

El comando principal es mysql.
-u define el usuario.
-p pide la contraseña (se recomienda dejarlo vacío para seguridad).

mysql -u root -p

Evitar pasar la contraseña directamente en el comando, pero es posible:

mysql -u root -p<password>

Importante: No debe haber espacio entre -p y la contraseña.

Para conectarte a un host remoto:

mysql -u root -h <host> -P <port> -p

{4611C83F-3063-44BD-B1AE-B5A3CA8372A9}.png
Nota:
Puerto por defecto de MySQL = 3306
-P mayúscula es para el puerto
-p minúscula es para la contraseña


🗄️ Crear una Base de Datos

Dentro del cliente MySQL, podemos crear una base de datos:

CREATE DATABASE users;

Listar bases de datos:

SHOW DATABASES;

{9D49B005-C496-4D47-BD39-FEBE018472BA}.png
Entrar a una base de datos:

USE users;

Las sentencias SQL NO son sensibles a mayúsculas, pero los nombres de bases y tablas sí.


📚 Tablas en MySQL

Las tablas consisten en filas y columnas.
Cada columna tiene un tipo de dato, como:

Ejemplo: crear tabla logins:

CREATE TABLE logins (
    id INT,
    username VARCHAR(100),
    password VARCHAR(100),
    date_of_joining DATETIME
);

Listar tablas:

SHOW TABLES;

Describir tabla:

DESCRIBE logins;

{F3D1E966-01E9-4DCC-84F1-2D453CCC84EC}.png


⚙️ Propiedades Importantes de Columnas

AUTO_INCREMENT
Incrementa automáticamente el ID.

id INT NOT NULL AUTO_INCREMENT,

NOT NULL
Impide valores vacíos.

UNIQUE
Evita duplicados.

username VARCHAR(100) UNIQUE NOT NULL,

DEFAULT
Define un valor por defecto.

date_of_joining DATETIME DEFAULT NOW(),

PRIMARY KEY
Clave principal, identifica un registro de manera única.

PRIMARY KEY (id)

Tabla final completa:

CREATE TABLE logins (
    id INT NOT NULL AUTO_INCREMENT,
    username VARCHAR(100) UNIQUE NOT NULL,
    password VARCHAR(100) NOT NULL,
    date_of_joining DATETIME DEFAULT NOW(),
    PRIMARY KEY (id)
);