Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

la tabla se me resiste!!

Estas en el tema de la tabla se me resiste!! en el foro de Bases de Datos General en Foros del Web. ola amigos, ace tiempo k no me paso por aki.. xDD pero oi os traigo un problemon, para mi claro... xDD me descargue una web ...
  #1 (permalink)  
Antiguo 25/12/2008, 15:25
 
Fecha de Ingreso: enero-2008
Mensajes: 10
Antigüedad: 16 años, 3 meses
Puntos: 0
Pregunta la tabla se me resiste!!

ola amigos, ace tiempo k no me paso por aki.. xDD pero oi os traigo un problemon, para mi claro... xDD

me descargue una web y venia con muxas .sql para extraer en navicat

pues funcionan todas menos 1, k sin esa no va la web...

ayuda por favor...

Código:
CREATE TABLE `accounts_extend` (
  `accounts_id` varchar(45) NOT NULL,
  `email` varchar(320) NOT NULL DEFAULT  'youname@domain',
  `joindate` decimal(20,0) DEFAULT NULL,
  `referrals` varchar(45) DEFAULT NULL,
  `points_tmp` varchar(5) NOT NULL DEFAULT ''',
  PRIMARY KEY  (`accounts_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


INSERT INTO `accounts_extend` (`accounts_id`) SELECT accounts.login FROM accounts;
esto es lo k viene dentro del .sql podeis decirme k falla? o postearlo otra vez, ya correcto...

MUXISIMAS GRACIAS.
  #2 (permalink)  
Antiguo 26/12/2008, 03:07
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: la tabla se me resiste!!

Un par de cosas que no entiendo:

`joindate` decimal(20,0) DEFAULT NULL,
Un decimal con 20,0, es decir, con 0 decimal. Usa para esos INT(20) unsigned si no quieres decimales, pero poner decimal exige, creo añadir un número de decimales que siempre aparecerá. De todas formas, ese no parece ser el problema al que te refieres.


`points_tmp` varchar(5) NOT NULL DEFAULT '''

Si quieres poner por defecto una comilla escribe
`points_tmp` varchar(5) NOT NULL DEFAULT '\''

Si lo que quieres es espacio en blanco, te sobre una comilla.
`points_tmp` varchar(5) NOT NULL DEFAULT ''

Última edición por jurena; 26/12/2008 a las 08:24
  #3 (permalink)  
Antiguo 26/12/2008, 04:08
 
Fecha de Ingreso: enero-2008
Mensajes: 10
Antigüedad: 16 años, 3 meses
Puntos: 0
Pregunta Respuesta: la tabla se me resiste!!

esk si te digo la verdad, no se lo k kiero... xDD lo k kiero esk se pueda añadir a la db con el navicat o con el phpmyadmin

esa tabla es de una web k me baje... nose lo k pretende dixa tabla...

POR FAVOR AYUDA!!.
  #4 (permalink)  
Antiguo 26/12/2008, 08:29
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: la tabla se me resiste!!

Otra cosa: ahí falta una tabla, concretamente la tabla accounts con sus datos, los que quieres insertar en tu tabla accounts_extend. Al parecer quieres insertar los login que hay en accounts en la tabla accounts_extend. Primero deberías tener los datos de ambas y luego lanzar el insert.


INSERT INTO `accounts_extend` (`accounts_id`) SELECT accounts.login FROM accounts;

Dices que no sabes lo que quieres, y pareces haber tomado esa tabla de algún sitio. Comprueba que todo está tal y como le ves en la tabla que quieres copiar.
Necesitarás dos tablas, una de ellas con datos, concretamente esa tabla accounts, en la que el campo login contendrá algunos datos.
Pero de eso no veo nada.

Quizás esté creada antes la tabla accounts y poblada con datos mediante insert. Habría que ver ese archio SQL.
  #5 (permalink)  
Antiguo 26/12/2008, 15:34
 
Fecha de Ingreso: enero-2008
Mensajes: 10
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: la tabla se me resiste!!

la tabla acccounts ya la tengo creada con datos dentro, y existe una columna llamada login, pero al poner esa linea me da error...

me da este error...

Cita:
[Err] 1364 - Field 'email' doesn't have a default value
[Err] INSERT INTO `accounts_extend` (`accounts_id`) SELECT accounts.login FROM accounts;
[Msg] Finished - Unsuccessfully
--------------------------------------------------
  #6 (permalink)  
Antiguo 29/12/2008, 05:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: la tabla se me resiste!!

Estás intentando crear un registro pero no estás poniendo el valor a almacenar en el campo "email", que está definido como NOT NULL.
Cuando defines NOT NULL un campo en la creación de la tabla, MySQL ignorará toda clausula DEFAULT impuesta para ese campo, porque asume que SIEMPRE se enviará un valor. Por eso la constraint DEFAULT no funciona.
Para que la cosa funcione, debes poner
Cita:
`email` varchar(320) NULL DEFAULT 'youname@domain',
.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 01/01/2009, 13:36
 
Fecha de Ingreso: enero-2008
Mensajes: 10
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: la tabla se me resiste!!

ok, lo pruebo aora mismo... luego te cuento..
  #8 (permalink)  
Antiguo 01/01/2009, 13:44
 
Fecha de Ingreso: enero-2008
Mensajes: 10
Antigüedad: 16 años, 3 meses
Puntos: 0
Pregunta Respuesta: la tabla se me resiste!!

mecachis!!! xDDDD

me pongo a acgregar la tabla con el nuevo valor k me diste, osea este...

Código:
CREATE TABLE `accounts_extend` (
  `accounts_id` varchar(45) NOT NULL,
  `email` varchar(320) NULL DEFAULT 'youname@domain',
  `joindate` decimal(20,0) DEFAULT NULL,
  `referrals` varchar(45) DEFAULT NULL,
  `points_tmp` varchar(5) NOT NULL DEFAULT ''',
  PRIMARY KEY  (`accounts_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
y me sale este error:

Código:
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '''',
  PRIMARY KEY  (`accounts_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8' at line 6
[Err] CREATE TABLE `accounts_extend` (
  `accounts_id` varchar(45) NOT NULL,
  `email` varchar(320) NULL DEFAULT 'youname@domain',
  `joindate` decimal(20,0) DEFAULT NULL,
  `referrals` varchar(45) DEFAULT NULL,
  `points_tmp` varchar(5) NOT NULL DEFAULT ''',
  PRIMARY KEY  (`accounts_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
[Msg] Finished - Unsuccessfully
--------------------------------------------------
  #9 (permalink)  
Antiguo 01/01/2009, 17:50
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: la tabla se me resiste!!

Estás tratando de hacer que te ponga un apóstrofe (') como valor por default en un campo. El apóstrofe, como te imaginarás, es un caracter reservado para encerrar cadenas de texto, por lo que esto: '', significa caracter vacío (no NULL, vacío). Pero tu estás poniendo: ''', lo que implica que estás indicando primero un caracter vacío y luego abriendo una cadena de texto... que no se cierra, por lo que todo el texto siguiente, es decir:
Cita:
,
PRIMARY KEY (`accounts_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
está siendo tomado como contenido de la cadena de texto....

Esto es simplemente porque para poder indicar que una cadena de texto contiene un caracter reservado, se deben usar caracteres de escape.
Así, para hacer que la cosa funcione, el código de SQL necesario sería:
Código sql:
Ver original
  1. CREATE TABLE  `accounts_extend` (
  2.   `accounts_id` VARCHAR(45) NOT NULL,
  3.   `email` VARCHAR(320) DEFAULT 'youname@domain',
  4.   `joindate` DECIMAL(20,0) DEFAULT NULL,
  5.   `referrals` VARCHAR(45) DEFAULT NULL,
  6.   `points_tmp` VARCHAR(5) NOT NULL DEFAULT '\'',
  7.   PRIMARY KEY  (`accounts_id`)
  8. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Por lo demás, ¿para qué quieres poner un apóstrofe en ese campo?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:42.