Ayuda con creación de tabla

Hola nuevamente, resulta que cree un archivo sql con toda la estructuras de las tablas para luego cargar dicho archivo en phpmyadmin o pegar la instrucción sql, en ambos casos por ejemplo al intentar crear la tabla cliente con la siguiente instrucción:
create table cliente(
idcli bigint not null auto_increment,
rut varchar(20) not null,
dv varchar(1),
nombre varchar(100) not null,
apellidos varchar(100) not null,
direccion varchar(100) not null,
idciudad bigint not null,
fono varchar(10),
celular varchar(10),
fax varchar(10),
mail varchar(30),
obs varchar(40),
PRIMARY KEY (idcli),
foreign key (idciudad) references ciudades (idciudad) on delete  restrict on update  restrict
)engine=innodb;
me arroja el siguiente error:
#1005 - Can't create table '.\sistema\cliente.frm' (errno: 150)
Sera pq no tengo creada aun la tabla ciudades ya q como hago mencio a un campo de dicha tabla....nose..
Espero tus comentarios.

1 respuesta

Respuesta
1
Cuando tu creas las tablas con integridad referencial se pueden crear de dos maneras
1: Crear la tabla e inmediatamente adicionarle la integridad referencial, que es el caso como se esta creando en el script de la tabla que envías.
Para este caso debes tener en cuenta que debes ir en orden de creación es decir si vas a crear la tabla CLIENTE, y esta referencia la tabla CIUDADES, debes de haber creado inicialmente la tabla CIUDADES.
2: Crear todas las tablas sin agregarles la integridad referencial y a final cuando estén todas, hacer un alter a cada tabla y agregarle las foreign key.
Slds
Sabes, revisando la tabla clientes me di cuante de que al comenzar a rellenar la tabla no me genera el valor autonumérico para el campo idcli, revise el resto de las tablas y en todas sucede lo mismo...
¿Qué pasa, porque sucede esto, como lo soluciono..?
Espero tus comentarios... y gracias...
Asegurate que al crear las tablas, la instrucción sql del campo autonumérico sea la siguiente
idcli bigint not null auto_increment
Donde
bigint = tipo de dato, puede ser int tambien
not null = lo hace obligatorio
auto_increment = instruccion para que sea autoincrementable por defecto de 1 en 1
Esta es ni tabla clientes...
create table cliente(
idcli bigint not null auto_increment,
id_estado_cliente bigint not null,
fecha_estado date null,
rut varchar(20) not null,
dv varchar(1),
nombre varchar(100) not null,
apellidos varchar(100) not null,
direccion varchar(100) not null,
idciudad bigint not null,
fono varchar(10),
celular varchar(10),
fax varchar(10),
mail varchar(30),
obs varchar(40),
PRIMARY KEY (idcli),
foreign key (idciudad) references ciudades (idciudad) on delete  restrict on update  restrict,
foreign key (id_estado_cliente) references estadocliente (id_estado_cliente) on delete  restrict on update  restrict
)engine=innodb;
Espero segerencias....
La instrucción para el campo esta bien,
como estas creando el insert para ejecución.
Cargue la bd... en un programa llamado phprunner... el cual me genera los script para manupular la tabla... pero lo he hecho con otrabas bds y ningún problema...
Hmm la verdad no lo he utilizado, pero acabo de crear esa tabla en mi sistema y le hago un insert y me genera los id automáticamente, revisa las instrucciones.
¿Cómo agrego un registro desde phpmyadmin?
en phpmyadmin tu puedes ejecutar codigo sql,
y familiarizate con las instrucciones DDL y DML que son para manipular los objetos de las base de datos y para manipular informacion, por ejemplo un codigo para insertar podria ser
INSERT INTO `cliente` (`idcli`,`rut`,`dv`,`nombre`,`apellidos`,`direccion`,`idciudad`,`fono`,`celular`,`fax`,`mail`,`obs`) VALUES (NULL,'1','1','1','1','1',1,'1','1','1','1','1')
Cambiando los 1 por información verdadera, y si notas el campo idcli se le asigna un NULL porque ese campo se genera automáticamente, o simplemente lo excluyes de la sentencia
Y pq al idcli le insertas un valor NULL cuando en el diseño se indica not null?
porque el campo esta definido como auto_increment,
para que no te confundas como este campo y en los campos que esten definidos con esta instruccion, los omites de la instruccion asi
INSERT INTO `cliente` (`rut`,`dv`,`nombre`,`apellidos`,`direccion`,`idciudad`,`fono`,`celular`,`fax`,`mail`,`obs`) VALUES ('1','1','1','1','1',1,'1','1','1','1','1')
Ya que este código sera generado automáticamente por el auto_increment
Tenias razón, como el programa me generar los formularios mantenedores, inicialmente me solicita todos los campos a rrellenar, inclusive el id... simplemente desactive el campo id cuando agrego datos y listo... luego revise el listado clientes y el id se autonumero bien...
Eres genial...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas