Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Error script creacion base de datos (https://www.clubdelphi.com/foros/showthread.php?t=52216)

jorgegetafe 14-01-2008 17:19:43

Error script creacion base de datos
 
Estoy creando el script de una base de datos, cuando importo a mysql me da errores de sintaxis, a ver si me podeis ayudar a corregirlos, gracias:


Código SQL [-]
/*
Created: 13/01/2008
Modified: 14/01/2008
Model: MySQL 5.0
Database: MySQL 5.0
*/
-- Drop tables section ---------------------------------------------------
drop table if exists `PERSONA`;
-- Create tables section -------------------------------------------------
-- Table PERSONA
CREATE TABLE `PERSONA`
(
  `Nombre` Char(20),
  `Apellido1` Char(20),
  `Apellido2` Char(20),
  `DNI` Char(9),
  `FechaNacimiento` Date,
  `Direccion` Char(50),
  `Ciudad` Char(20),
  `Provincia` Char(20) DEFAULT 'Madrid',
  `Movil` Char(9),
  `Fax` Char(10),
  `Correo` Char(40),
  `CorreoTrabajo` Char(40) DEFAULT,
  `TelefonoTrabajo` Char(20),
  `Sexo` Enum('Hombre','Mujer') NOT NULL,
  `NumeroHijos` Enum('0','1','2','3','4','5','6','7','8','9','10') DEFAULT '0',
  `Comentario` Char(200),
  `Apodo` Char(20),
  `PaginaWeb` Char(40),
  `CodigoPostal` Char(5),
  `Pais` Char(20) DEFAULT 'España',
  `Codigo` Char(5) NOT NULL AUTO_INCREMENT,
  `TipoContacto` Enum('Amig@', 'Familiar', 'Trabajo', 'Otro', 'Estudios', 'Cliente', 'Proveedor') NOT NULL,
  `Telefono` Char(10),
  `Telefono2` Char(10),
  `DireccionTrabajo` Char(50),
  `Direccion2` Char(50),
  `NumeroHermanos` Enum('0','1','2','3','4','5','6','7','8','9','10') DEFAULT '0',
  `Movil2` Char(9),
  `Zodiaco` Enum('Aries','Tauro','Géminis','Cáncer','Leo','Virgo','Libra','Escorpio','Sagitario','Capricornio','  Acuario','Piscis')
);
ALTER TABLE `PERSONA` ADD PRIMARY KEY  (`Codigo`);

maeyanes 14-01-2008 17:33:30

Hola...

Te aconsejo algo... para campos de texto que sean variables, usa varchar en lugar de char, esto te puede ahorrar mucho espacio en la base de datos...

En esta línea:

Código SQL [-]
`CorreoTrabajo` Char(40) DEFAULT,

usas DEFAULT pero no especificas cual es el valor.



Saludos...

jorgegetafe 14-01-2008 17:35:17

Muchas gracias por lo de varchar, es muy buena idea y gracias por el error se me había pasado :-(

jorgegetafe 14-01-2008 17:37:16

Estoy cambiando tal y como dices los tipos de datos, utilizo toad data modeler, si elijo varchar al lado sigue apareciendo el campo de longitud, como he puesto varchar que longitud pongo cero?

Lepe 14-01-2008 17:46:18

Debes poner un número que indica la cantidad de caracteres (como máximo) que puede albergar ese campo.

Si ya pensaste en ello y crees que el nombre más largo que puedas almacenar es 20 letras incluidos espacios, varchar(20) será lo correcto.

La dirección, si es del tipo:
"Avda Nuestra Señora del Rosario, nº 11, bloque 3, escalera 4, izquierda" (71 letras) me parece que no te cabe ;) aunque se puede abreviar, habrá direcciones más largas.
La página web si lo veo pequeño con 40, yo pondría 80.

Saludos

jorgegetafe 14-01-2008 17:58:18

Sin hacer caso de las longitudes de los campos que los tengo que cambiar, a ver si me podeis decir como subsanar este error, muchas gracias:


Código SQL [-]
 
-- Create tables section -------------------------------------------------
-- Table PERSONA
CREATE TABLE `PERSONA` ( `Nombre` Varchar( 0 ) ,
`Apellido1` Varchar( 0 ) ,
`Apellido2` Varchar( 0 ) ,
`DNI` Char( 9 ) ,
`FechaNacimiento` Date,
`Direccion` Varchar( 0 ) ,
`Ciudad` Varchar( 0 ) ,
`Provincia` Varchar( 0 ) DEFAULT 'Madrid',
`Movil` Char( 9 ) ,
`Fax` Char( 10 ) ,
`Correo` Varchar( 0 ) ,
`CorreoTrabajo` Varchar( 0 ) ,
`TelefonoTrabajo` Char( 20 ) ,
`Sexo` Enum( 'Hombre', 'Mujer' ) NOT NULL ,
`NumeroHijos` Enum( '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10' ) DEFAULT 0,
`Comentario` Varchar( 0 ) ,
`Apodo` Varchar( 0 ) ,
`PaginaWeb` Varchar( 0 ) ,
`CodigoPostal` Char( 5 ) ,
`Pais` Varchar( 0 ) DEFAULT 'Espana',
`Codigo` Smallint NOT NULL AUTO_INCREMENT ,
`TipoContacto` Enum( 'Amigo', 'Familiar', 'Trabajo', 'Otro', 'Estudios', 'Cliente', 'Proveedor' ) NOT NULL ,
`Telefono` Char( 10 ) ,
`Telefono2` Char( 10 ) ,
`DireccionTrabajo` Varchar( 0 ) ,
`Direccion2` Varchar( 0 ) ,
`NumeroHermanos` Enum( '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10' ) DEFAULT 0,
`Movil2` Char( 9 ) ,
`Zodiaco` Enum( 'Aries', 'Tauro', 'Géminis', 'Cáncer', 'Leo', 'Virgo', 'Libra', 'Escorpio', 'Sagitario', 'Capricornio', 'Acuario', 'Piscis' ) 
);


MySQL ha dicho:
#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key

maeyanes 14-01-2008 18:54:50

Hola...

El error te dice que el campo que definiste como AUTO_INCREMENT debe ser tu clave primaria, cosa que en tu definición no es así...

Código SQL [-]
`Codigo` Smallint NOT NULL AUTO_INCREMENT ,

Ese campo es el que debería ser tu clave primaria...



Saludos...

jorgegetafe 14-01-2008 20:56:04

Entiendo lo que me dices, pero no veo que ningun campo, aparte de mi clave (Codigo) tenga tambien el autoincremento... ¿Me puedes ayudar?

Gracias

Código SQL [-]
/*
Created: 13/01/2008
Modified: 14/01/2008
Model: MySQL 5.0
Database: MySQL 5.0
*/
-- Drop tables section ---------------------------------------------------
DROP TABLE if exists `PERSONA`;
-- Create tables section -------------------------------------------------
-- Table PERSONA
CREATE TABLE `PERSONA`
(
  `Nombre` Varchar(20),
  `Apellido1` Varchar(20),
  `Apellido2` Varchar(20),
  `DNI` Char(9),
  `FechaNacimiento` Date,
  `Direccion` Varchar(80),
  `Ciudad` Varchar(20),
  `Provincia` Varchar(20) DEFAULT 'Madrid',
  `Movil` Char(9),
  `Fax` Char(10),
  `Correo` Varchar(80),
  `CorreoTrabajo` Varchar(80),
  `TelefonoTrabajo` Char(20),
  `Sexo` Enum('Hombre','Mujer') NOT NULL,
  `NumeroHijos` Enum('0','1','2','3','4','5','6','7','8','9','10') DEFAULT 0,
  `Comentario` Varchar(400),
  `Apodo` Varchar(20),
  `PaginaWeb` Varchar(80),
  `CodigoPostal` Char(5),
  `Pais` Varchar(20) DEFAULT 'Espana',
  `Codigo` Smallint NOT NULL AUTO_INCREMENT,
  `TipoContacto` Enum('Amigo', 'Familiar', 'Trabajo', 'Otro', 'Estudios', 'Cliente', 'Proveedor') NOT NULL,
  `Telefono` Char(10),
  `Telefono2` Char(10),
  `DireccionTrabajo` Varchar(80),
  `Direccion2` Varchar(80),
  `NumeroHermanos` Enum('0','1','2','3','4','5','6','7','8','9','10') DEFAULT 0,
  `Movil2` Char(9),
  `Zodiaco` Enum('Aries','Tauro','Géminis','Cáncer','Leo','Virgo','Libra','Escorpio','Sagitario','Capricornio','  Acuario','Piscis')
);
ALTER TABLE `PERSONA` ADD PRIMARY KEY  (`Codigo`);

fide 14-01-2008 23:45:06

Oyeme, por que no quitas todos esos char y pones todo en varchar???

fide 14-01-2008 23:46:30

Ademas, si tienes duda de como se hace todo eso, pues ve y hazlo manuelmente en MySql, despues dile que te genere las sentencias SQL para dicha tabla y ya esta.

jorgegetafe 15-01-2008 13:58:34

Cita:

Empezado por fide (Mensaje 258118)
Ademas, si tienes duda de como se hace todo eso, pues ve y hazlo manuelmente en MySql, despues dile que te genere las sentencias SQL para dicha tabla y ya esta.

Los char los dejo porque es un tamaño fijo.

He hecho lo que me has dicho, con el gestor de BBDD lo he puesto a mi gusto, pero como le digo que me gener el codigo correspondiente? no se hacerlo, gracias.

Lepe 15-01-2008 19:35:16

Cita:

Empezado por jorgegetafe (Mensaje 258182)
Los char los dejo porque es un tamaño fijo.


OK, pero después no vengas con pegas.
Si guardas el nombre: 'Juan Gómez'
y después al leer de la base de datos y al hacer búsquedas
te encuentras que realmente ha guardado :
Código:

'Juan Gómez                                      '  (con todos
esos espacios en blanco), no te quejes ;)

Saludos

maeyanes 15-01-2008 19:49:36

Hola...

El se refiere a que los que dejó como Char(n) son los campos que sabe van a tener un tamaño fijo... como Telefonos, DNI, etc...

Si te fijas en su último mensaje, verás que los otros campos ya están declarados como Varchar(n).


Saludos...

Emilio 15-01-2008 21:46:23

Prueba con esto...

Código SQL [-]
CREATE TABLE `PERSONA`
(
  `Nombre` Char(20),
  `Apellido1` Char(20),
  `Apellido2` Char(20),
  `DNI` Char(9),
  `FechaNacimiento` Date,
  `Direccion` Char(50),
  `Ciudad` Char(20),
  `Provincia` Char(20) DEFAULT 'Madrid',
  `Movil` Char(9),
  `Fax` Char(10),
  `Correo` Char(40),
  `CorreoTrabajo` Char(40) DEFAULT 'no@tengo.com',
  `TelefonoTrabajo` Char(20),
  `Sexo` Enum('Hombre','Mujer') NOT NULL,
  `NumeroHijos` Enum('0','1','2','3','4','5','6','7','8','9','10') DEFAULT '0',
  `Comentario` Char(200),
  `Apodo` Char(20),
  `PaginaWeb` Char(40),
  `CodigoPostal` Char(5),
  `Pais` Char(20) DEFAULT 'España',
  `Codigo` smallint NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `TipoContacto` Enum('Amig@', 'Familiar', 'Trabajo', 'Otro', 'Estudios', 'Cliente', 'Proveedor') NOT NULL,
  `Telefono` Char(10),
  `Telefono2` Char(10),
  `DireccionTrabajo` Char(50),
  `Direccion2` Char(50),
  `NumeroHermanos` Enum('0','1','2','3','4','5','6','7','8','9','10') DEFAULT '0',
  `Movil2` Char(9),
  `Zodiaco` Enum('Aries','Tauro','Géminis','Cáncer','Leo','Virgo','Libra','Escorpio','Sagitario','Capricornio','  Acuario','Piscis')
);


La franja horaria es GMT +2. Ahora son las 00:28:35.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi