Tengo problemas con la siguiente consulta SQL. El error surge en el campo de estado cuando especifico tinyint como su tipo de datos. ¿Estoy usando la sintaxis incorrecta?

Consulta

create table device_master( 
id INT,
serial_number VARCHAR, 
status TINYINT, 
created_at DATETIME, 
updated_at TIMESTAMP ON UPDATE CURRENT TIMESTAMP, 
created_by INT, 
updated_by INT, primary key(id));

Error

ERROR 1064 (42000): tiene un error en su sintaxis SQL; consulte el manual que corresponde a la versión de su servidor MySQL para conocer la sintaxis correcta para usar cerca de 'status TINYINT, created_at DATETIME, updated_at TIMESTAMP ON UPDATE CURRENT TIM' en la línea 1

0
rahul1205 17 oct. 2017 a las 15:21

3 respuestas

La mejor respuesta

En realidad hay dos errores de sintaxis

  1. Debe especificar la longitud máxima del varchar, p. Ej. VARCHAR(255)
  2. Es ON UPDATE CURRENT_TIMESTAMP (nota la _)

Intenta correr:

create table device_master( 
  id INT,
  serial_number VARCHAR(255), 
  status TINYINT, 
  created_at DATETIME, 
  updated_at TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
  created_by INT, 
  updated_by INT, 
  primary key(id)
);
1
simon.ro 17 oct. 2017 a las 12:36

No, el problema es que no especificó la longitud del campo serial_number. Debe definirse como serial_number VARCHAR(N),, donde N es la longitud máxima en caracteres.

Tenga en cuenta que el extracto del código en el mensaje de error de sintaxis comienza antes de la palabra status, indicando que el error ocurrió mucho antes de que se especifique el tipo de datos tinyint.

2
Shadow 17 oct. 2017 a las 12:30

Creo que no Tinyint es tu problema. Debe declarar la longitud de varchar para el número de serie:

create table device_master( 
id INT,
serial_number VARCHAR(100), 
status TINYINT, 
created_at DATETIME, 
updated_at TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
created_by INT, 
updated_by INT, primary key(id));
2
user8527410 17 oct. 2017 a las 12:34