Archive for the ‘MySQL’ Category

Crear base de datos MySQL

miércoles, octubre 29th, 2014

Aqui presento un video para la creación de una base de datos en MySQL, el script crea una base de datos llamada bdprueba con un login y password del mismo nombre.

El script del video


CREATE DATABASE bdprueba DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
use bdprueba;
CREATE USER 'bdprueba'@'localhost' IDENTIFIED BY 'bdprueba';
GRANT ALL PRIVILEGES ON bdprueba.* TO 'bdprueba'@'localhost';
FLUSH PRIVILEGES;


SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;



-- --------------------------------------------------------

--
-- Table structure for table `sso_rol`
--

CREATE TABLE IF NOT EXISTS `sso_rol` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Identificador del rol',
  `nombre` varchar(32) NOT NULL COMMENT 'Nombre del rol',
  `ins_fc` date NOT NULL COMMENT 'Fecha de insercion del rol',
  `upd_fc` date NOT NULL COMMENT 'Fecha de actualizacion',
  `activo` varchar(1) NOT NULL DEFAULT 'S' COMMENT 'Indica si esta activo',
  `system` varchar(1) DEFAULT NULL COMMENT 'Indica si el registro es de sistema o no. Esto para evitar eliminarlo si lo es. No debiese aparecer en la intefaz como eliminable',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;

--
-- Dumping data for table `sso_rol`
--

INSERT INTO `sso_rol` (`id`, `nombre`, `ins_fc`, `upd_fc`, `activo`, `system`) VALUES
(1, 'SSO_ADMIN', '2014-07-20', '2014-07-20', 'S', 'S');

-- --------------------------------------------------------

--
-- Table structure for table `sso_rol_usuario`
--

CREATE TABLE IF NOT EXISTS `sso_rol_usuario` (
  `id_usuario` int(11) NOT NULL COMMENT 'Identificador del Usuario',
  `id_rol` int(11) NOT NULL COMMENT 'Identificador del Rol',
  `ins_fc` date NOT NULL COMMENT 'Fecha de insercion de la relacion',
  `upd_fc` date NOT NULL COMMENT 'Fecha de actualizacion',
  `activo` varchar(1) NOT NULL DEFAULT 'S' COMMENT 'Indica si esta o no activo',
  `system` varchar(1) DEFAULT NULL COMMENT 'Indica si el registro es de sistema o no. Esto para evitar eliminarlo si lo es. No debiese aparecer en la intefaz como eliminable',
  PRIMARY KEY (`id_usuario`,`id_rol`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Mantiene los roles de los usuarios';

--
-- Dumping data for table `sso_rol_usuario`
--

INSERT INTO `sso_rol_usuario` (`id_usuario`, `id_rol`, `ins_fc`, `upd_fc`, `activo`, `system`) VALUES
(1, 1, '2014-07-20', '2014-07-20', 'S', 'S');

-- --------------------------------------------------------

--
-- Table structure for table `sso_usuario`
--

CREATE TABLE IF NOT EXISTS `sso_usuario` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Identificador del usuario',
  `login` varchar(32) NOT NULL COMMENT 'Login o nombre de usuario utilizado para acceder a la aplicacion',
  `passwd` varchar(128) NOT NULL COMMENT 'Clave del usuario',
  `email` varchar(128) NOT NULL COMMENT 'Email del usuario',
  `ins_fc` date NOT NULL COMMENT 'Fecha de creacion del usuario',
  `upd_fc` date NOT NULL COMMENT 'Fecha de actualizacion del usuario',
  `activo` varchar(1) NOT NULL DEFAULT 'S' COMMENT 'Indica si esta activo',
  `nombre` varchar(50) DEFAULT NULL COMMENT 'Nombre del usario',
  `validator` varchar(100) DEFAULT NULL COMMENT 'Cadena de validación enviada por email',
  `system` varchar(1) DEFAULT 'N' COMMENT 'Indica si el registro es de sistema o no. Esto para evitar eliminarlo si lo es. No debiese aparecer en la intefaz como eliminable',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='Mantiene la lista de usuarios.' AUTO_INCREMENT=21 ;

--
-- Dumping data for table `sso_usuario`
--

INSERT INTO `sso_usuario` (`id`, `login`, `passwd`, `email`, `ins_fc`, `upd_fc`, `activo`, `nombre`, `validator`, `system`) VALUES
(1, 'admin', '21232f297a57a5a743894a0e4a801fc3', 'gonzalo@aro.cl', '2014-07-20', '2014-07-20', 'S', 'Administrador', NULL, 'S');

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Permiso para acceder a MySQL desde un servidor remoto

martes, noviembre 27th, 2012

Para acceder desde fuera de localhost como un usuario debe ejecutarse en MySQL

GRANT ALL PRIVILEGES ON *.* TO nombre_usuario@'%' IDENTIFIED BY 'PASSWORD';
FLUSH PRIVILEGES;

Transacciones ACID

miércoles, julio 25th, 2012

En el contexto de transacciones de bases de datos, ACID es un acrónimo de Atomico (Atomic), Consistente (Consistent), Aislado (Isolation) y Durabilidad(Durable). Las transacciones proporcionan un modelo sencillo de éxito o fracaso una o un conjunto de operaciones en la base de datos. Una transacción se compromete (es decir, todas sus acciones se ejecutaron de forma correcta), o se anula (es decir, si una accion fallo, entonces todas sus acciones hechas hasta ese momento se deshacen). Los atributos de una transacción ACID son las siguientes:

Atomicidad

Una transacción permite la agrupación de uno o más cambios en las tablas y filas en la base de datos para formar una operación atómica e indivisible. Es decir, o bien se producen todos los cambios o ninguno de ellos. Si por alguna razón la transacción no puede completarse, la operación debe restablecer el estado de la base de datos al momento en que estaba antes del inicio de la transacción a través de una operación de reversa (rollback).

Consistencia

Las transacciones siempre operan en una visión coherente de los datos y cuando terminan deben también dejar los datos en un estado coherente. Mientras que una transacción se ejecuta se generan inconsistencias momentaneas dentro de la base de datos, pero la transaccion no puede dejar ver estas inconsistencias; al finalizar, debido a que en la finalización todas las inconsistencias deben son eliminadas, la transaccion libera los datos para que puedan ser leídos/escritos nuevamente.

Aislamiento

Para una operación determinada, debería ser como si ésta se estuviese ejecutando sola en la base de datos. Los efectos de la ejecución simultánea de las transacciones son invisibles para esta transacción, y los efectos de esta transacción son invisibles para los demás hasta que la transacción ha comprometido su trabajo.

Durabilidad

Una vez que se confirma una transacción y sus efectos, se garantiza que persista incluso en el caso de fallos posteriores del sistema. Hasta antes de que se confirme la transacción, los cambios realizados por esa transacción no son durables, y no persisten en la cara de un fallo del sistema, al recuperarse de un fallo se deshacen las inconsistencias provocas por la ejecución no terminada de la transaccion.

La simplicidad de las transacciones ACID es especialmente importante en un entorno de base de datos distribuida, donde las transacciones se realizan de forma simultánea.

Bug de MySQL cuando se establece SET columna= null

miércoles, marzo 30th, 2011

Existe un error reportado a MySQL (https://bugs.mysql.com/bug.php?id=16494) que sucede en el momento que se establece una columna a NULL. En muchos de los casos sucede que envía el error que la columna no existe.

Dependiendo del tipo de dato se debe tener una forma de resolver el problema. Aun cuando no es lo mismo establecer NULL a una columna String que establecer » (vacío), pero debes considerarlo como solución cuando te aparezca el problema.