ver valor una tablas tabla propiedades nombre modificar insertar descripcion datos crear como columnas columna codigo campo cambiar agregar sql postgresql types auto-increment database-table

sql - valor - Columna de tabla de incremento automático



modificar columna sql server (4)

Utilizando Postgres, estoy tratando de usar AUTO_INCREMENT para numerar mi clave principal automáticamente en SQL. Sin embargo, me da un error.

CREATE TABLE Staff ( ID INTEGER NOT NULL AUTO_INCREMENT, Name VARCHAR(40) NOT NULL, PRIMARY KEY (ID) );

El error:

********** Error ********** ERROR: syntax error at or near "AUTO_INCREMENT" SQL state: 42601 Character: 63

¿Alguna idea de por qué?


Postgres 10 o posterior

Considere una columna de IDENTITY . Postgres 10 implementa esta función de SQL estándar.

CREATE TABLE staff ( staff_id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY , staff text NOT NULL );

Sintaxis básica e información en el manual de CREATE TABLE .
Explicación detallada en esta entrada del blog de su autor principal, Peter Eisentraut.

Para agregar una columna de IDENTITY a una tabla preexistente (rellenada con filas o no):

ALTER TABLE staff ADD COLUMN staff_id int GENERATED BY DEFAULT AS IDENTITY;

Para hacerlo también PK al mismo tiempo (la tabla no puede tener un PK todavía):

ALTER TABLE staff ADD COLUMN staff_id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY;

Hubo un error en las primeras versiones, que podría conducir a un mensaje de error como:

ERROR: column "staff_id" contains null values

Esto fue arreglado con Postgres 10.2. Detalles:

Postgres 9.6 o anterior

Utilice serial lugar el tipo de pseudodato serial :

CREATE TABLE staff ( staff_id serial PRIMARY KEY, , staff text NOT NULL );

Crea y adjunta el objeto de secuencia automáticamente y establece el DEFAULT en nextval() de la secuencia. Hace todo lo que necesitas.

También uso solo identificadores minúsculas en mi ejemplo. Hace que tu vida con Postgres sea más fácil.

Y mejor utilizar nombres de columna descriptivos. "id" como nombre es un antipatrón, utilizado por algunos medios, pero no es descriptivo. Similar con "nombre".


En la base de datos del servidor SQL puede usar Identity(1,1) esta manera:

CREATE TABLE Staff ( ID INT IDENTITY(1,1) NOT NULL, Name VARCHAR(40) NOT NULL, PRIMARY KEY (ID) );


No especifica qué RDBMS está utilizando, sin embargo, en SQL Server puede usar esta sintaxis:

CREATE TABLE [dbo].[Staff] ( [ID] [int] IDENTITY(1,1) NOT NULL, [Name] VARCHAR(40) NOT NULL, CONSTRAINT [ID] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO


PostgreSQL: si absolutamente debe tener su propio valor de incremento automático:

Luego usa una secuencia:

ericlesc_schools=> drop table yar; DROP TABLE ericlesc_schools=> drop sequence user_id_seq; DROP SEQUENCE ericlesc_schools=> create sequence user_id_seq; CREATE SEQUENCE ericlesc_schools=> create table yar( id int default nextval(''user_id_seq''), foobar varchar); CREATE TABLE ericlesc_schools=> insert into yar (foobar) values(''hey alex''); INSERT 0 1 ericlesc_schools=> insert into yar (foobar) values(''hey what derick''); INSERT 0 1 ericlesc_schools=> insert into yar (foobar) values(''I look like a hushpuppy''); INSERT 0 1 ericlesc_schools=> select * from yar; id | foobar ----+----------------- 1 | hey alex 2 | hey what derick 3 | I look like a hushpuppy (3 rows)