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

Constraint de tabla en mysql

Estas en el tema de Constraint de tabla en mysql en el foro de Mysql en Foros del Web. Hola a todos, tengo una pregunta a ver si me pueden ayudar. Hice una bdd en mysql con sus respectivas tablas, hay una en la ...
  #1 (permalink)  
Antiguo 19/06/2009, 13:34
 
Fecha de Ingreso: mayo-2008
Mensajes: 7
Antigüedad: 15 años, 10 meses
Puntos: 0
De acuerdo Constraint de tabla en mysql

Hola a todos, tengo una pregunta a ver si me pueden ayudar.
Hice una bdd en mysql con sus respectivas tablas, hay una en la que me gustaría crear un constraint de tabla similar a lo que se hace en oracle..ejem:
create table miTabla (
campo1 varchar2(25) not null primary key,
campo2 number(4,2) not null,
campo3 integer(40) not null,
campo4 varchar(35) not null,
campo5 varchar(35) not null,
constraint Campos_Repetidos (campo2, campo3, campo4)
); // Este ejemplo es de una tabla hecha en oracle, por eso tiene esos tipos de datos y demás
O sea que lo que quiero hacer es que no se repita en un registro los tres campos a la vez, es decir, el alumno puede registrar su materia para recuperar (hasta 3), pero no 2 veces la misma. Esto yo lo haría con dos tablas haciendo un primary key en la matricula del alumno y despues otra tabla para la solicitud de sus examenes, lo sé, pero la cosa está en que no tengo la bdd de los alumnos, entonces el registro es "al vuelo" y me las tengo que ingeniar para no aceptar más de 2 registros iguales en la tabla. O sea puede el alumno poner su matrícula, nombre, apellidos, materia, y demás, pero yo restringiría en el constraint a matricula, materia, y carrera que no fueran las mismas.
Espero haber sido lo suficientemene claro con mi problema.
Gracias !!

Última edición por sickpsique; 19/06/2009 a las 13:35 Razón: comentario
  #2 (permalink)  
Antiguo 19/06/2009, 14:01
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Constraint de tabla en mysql

Según te entuiendo debes hacer algo así:

Código sql:
Ver original
  1. CREATE TABLE ejemplo
  2. (campo1 INTEGER,
  3. campo2 VARCHAR(10),
  4. campo3 DATE,
  5. CONSTRAINT uk_const UNIQUE KEY(id,nom,fecha));

De esta forma, no es posible ingresar los valores repetidos en un mismo registro, ya que entre las 3 deben ser unicas.

Es lo que necesitas?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 19/06/2009, 14:11
 
Fecha de Ingreso: mayo-2008
Mensajes: 7
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Constraint de tabla en mysql

Afirmativo !!
Así es como quiero hacerlo exactamente de hecho así es como lo hago en Oracle 10g, pero no sabía que igual lo podía hacer aquí, espero que funcione en la versión 4.1 de mysql
Gracias
  #4 (permalink)  
Antiguo 20/06/2009, 00:15
 
Fecha de Ingreso: mayo-2008
Mensajes: 7
Antigüedad: 15 años, 10 meses
Puntos: 0
De acuerdo Respuesta: Constraint de tabla en mysql

Otra cosa...fíjate que yo uso la versión 5.0 de MySQL y en el server que tengo la web está es la:
mysql
MySQL Support enabled
Active Persistent Links 2
Active Links 2
Client API version 3.23.49
MYSQL_MODULE_TYPE builtin
MYSQL_SOCKET /tmp/mysql.sock
MYSQL_INCLUDE no value
MYSQL_LIBS no value
Ahora me gustaría saber si tienen opciones para insertar esta tabla allí porque al parecer es muy precámbrica esta versión de MySQL por favor:
CREATE TABLE IF NOT EXISTS `arecup` (
`id` int(10) NOT NULL auto_increment,
`carrera` char(25) character set utf8 collate utf8_spanish2_ci default NULL,
`matricula` char(25) character set utf8 collate utf8_spanish2_ci default NULL,
`nombre` char(25) character set utf8 collate utf8_spanish2_ci default NULL,
`apellidos` char(45) character set utf8 collate utf8_spanish2_ci default NULL,
`clave` int(12) default NULL,
`materia` char(85) character set utf8 collate utf8_spanish2_ci default NULL,
`maestro` char(75) character set utf8 collate utf8_spanish2_ci default NULL,
`fecha` date default NULL,
`fechaSolicitud` timestamp NOT NULL default CURRENT_TIMESTAMP,
`comentario` text character set utf8 collate utf8_spanish2_ci NOT NULL,
`pagado` varchar(2) character set utf8 collate utf8_spanish2_ci default NULL COMMENT 'Aquí se marcará si el alumno ha pagado ya su curso de recuperación',
PRIMARY KEY (`id`),
UNIQUE KEY `Datos_Duplicados` (`carrera`,`matricula`,`nombre`,`materia`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Encontré la solución:

CREATE TABLE `arecup` (
`id` int(10) NOT NULL auto_increment,
`carrera` char(25) default NULL,
`matricula` char(25) default NULL,
`nombre` char(25) default NULL,
`apellidos` char(45) default NULL,
`clave` int(12) default NULL,
`materia` char(85) default NULL,
`maestro` char(75) default NULL,
`fecha` date default NULL,
`fechaSolicitud` timestamp NOT NULL,
`comentario` text NOT NULL,
`pagado` varchar(2) default NULL COMMENT 'Aquí se marcará si el alumno ha pagado ya su curso de recuperación',
PRIMARY KEY (`id`),
UNIQUE KEY `Datos_Duplicados` (`carrera`,`matricula`,`nombre`,`materia`)
) TYPE=InnoDB AUTO_INCREMENT=1 ;

Última edición por sickpsique; 20/06/2009 a las 00:19 Razón: Solución
  #5 (permalink)  
Antiguo 20/06/2009, 06:17
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, 4 meses
Puntos: 2658
Respuesta: Constraint de tabla en mysql

En realidad, la solución que encontraste en más vieja que la primera versión. La primera es sintaxis de MySQL 5.0 y posteriores; la segunda es el realidad la versión de MySQL 4.0.2, con lo que en realidad es más vieja.
Ese es el dato que no estabas diciendo al dar los datos del server de MySQL: QUué versión era.
__________________
¿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 05:02.