Voeg primaire sleutel toe aan bestaande tabel

Ik heb een bestaande tabel met de naam Persion. In deze tabel heb ik 5 kolommen:

  • persionId
  • Pnaam
  • PMid
  • Pbeschrijving
  • Pamt

Toen ik deze tabel maakte, stelde ik PersionIden Pnamein als de primaire sleutel.

Ik wil nu nog een kolom opnemen in de primaire sleutel – PMID. Hoe kan ik hiervoor een ALTER-statement schrijven? (Ik heb al 1000 records in de tabel)


Antwoord 1, autoriteit 100%

beperking laten vallen en opnieuw maken

alter table Persion drop CONSTRAINT <constraint_name>
alter table Persion add primary key (persionId,Pname,PMID)

bewerken:

u kunt de naam van de beperking vinden door de onderstaande zoekopdracht te gebruiken:

select OBJECT_NAME(OBJECT_ID) AS NameofConstraint
FROM sys.objects
where OBJECT_NAME(parent_object_id)='Persion'
and type_desc LIKE '%CONSTRAINT'

Antwoord 2, autoriteit 43%

Ik denk dat zoiets als dit zou moeten werken

-- drop current primary key constraint
ALTER TABLE dbo.persion 
DROP CONSTRAINT PK_persionId;
GO
-- add new auto incremented field
ALTER TABLE dbo.persion 
ADD pmid BIGINT IDENTITY;
GO
-- create new primary key constraint
ALTER TABLE dbo.persion 
ADD CONSTRAINT PK_persionId PRIMARY KEY NONCLUSTERED (pmid, persionId);
GO

Antwoord 3, autoriteit 20%

-- create new primary key constraint
ALTER TABLE dbo.persion 
ADD CONSTRAINT PK_persionId PRIMARY KEY NONCLUSTERED (pmid, persionId);

is een betere oplossing omdat je controle hebt over de naamgeving van de primaire_sleutel.


Het is beter dan alleen

ALTER TABLE Persion ADD PRIMARY KEY(persionId,Pname,PMID)

wat willekeurige namen oplevert en problemen kan veroorzaken bij het scripten of vergelijken van databases


Antwoord 4, autoriteit 14%

Als u een primaire sleutelbeperking toevoegt

ALTER TABLE <TABLE NAME> ADD CONSTRAINT <CONSTRAINT NAME> PRIMARY KEY <COLUMNNAME>  

bijvoorbeeld:

ALTER TABLE DEPT ADD CONSTRAINT PK_DEPT PRIMARY KEY (DEPTNO)

Antwoord 5, autoriteit 9%

Er is al een primaire sleutel in uw tabel. U kunt niet zomaar een primaire sleutel toevoegen, anders zal er een fout optreden. Omdat er één primaire sleutel is voor sql-tabel.

Eerst moet u uw oude primaire sleutel verwijderen.

MySQL:

ALTER TABLE Persion
DROP PRIMARY KEY;

SQL Server / Oracle / MS Access:

ALTER TABLE Persion
DROP CONSTRAINT 'constraint name';

U moet de naam van de beperking in uw tabel vinden. Als je had
gegeven beperkingsnaam toen u de tabel maakte, kunt u gemakkelijk gebruiken
de beperkingsnaam (ex:PK_Persion).

Tweede,Voeg primaire sleutel toe.

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persion ADD PRIMARY KEY (PersionId,Pname,PMID);

of de betere hieronder

ALTER TABLE Persion ADD CONSTRAINT PK_Persion PRIMARY KEY (PersionId,Pname,PMID);

Hiermee kan de naam van de beperking per ontwikkelaar worden ingesteld. Het is gemakkelijker om de tafel te onderhouden.

Ik raakte een beetje in de war toen ik alle antwoorden had bekeken. Dus ik onderzoek een document om elk detail te vinden. Ik hoop dat dit antwoord andere SQL-beginners kan helpen.

Referentie:https://www.w3schools.com/sql/sql_primarykey.asp


Antwoord 6, autoriteit 2%

Necromancing.
Voor het geval iemand net zo’n goed schema heeft om mee te werken als ik…
Hier leest u hoe u het correct doet:

In dit voorbeeld is de tabelnaam dbo.T_SYS_Language_Forms en is de kolomnaam LANG_UID

-- First, chech if the table exists...
IF 0 < (
    SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_TYPE = 'BASE TABLE'
    AND TABLE_SCHEMA = 'dbo'
    AND TABLE_NAME = 'T_SYS_Language_Forms'
)
BEGIN
    -- Check for NULL values in the primary-key column
    IF 0 = (SELECT COUNT(*) FROM T_SYS_Language_Forms WHERE LANG_UID IS NULL)
    BEGIN
        ALTER TABLE T_SYS_Language_Forms ALTER COLUMN LANG_UID uniqueidentifier NOT NULL 
        -- No, don't drop, FK references might already exist...
        -- Drop PK if exists (it is very possible it does not have the name you think it has...)
        -- ALTER TABLE T_SYS_Language_Forms DROP CONSTRAINT pk_constraint_name 
        --DECLARE @pkDropCommand nvarchar(1000) 
        --SET @pkDropCommand = N'ALTER TABLE T_SYS_Language_Forms DROP CONSTRAINT ' + QUOTENAME((SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
        --WHERE CONSTRAINT_TYPE = 'PRIMARY KEY' 
        --AND TABLE_SCHEMA = 'dbo' 
        --AND TABLE_NAME = 'T_SYS_Language_Forms' 
        ----AND CONSTRAINT_NAME = 'PK_T_SYS_Language_Forms' 
        --))
        ---- PRINT @pkDropCommand 
        --EXECUTE(@pkDropCommand) 
        -- Instead do
        -- EXEC sp_rename 'dbo.T_SYS_Language_Forms.PK_T_SYS_Language_Forms1234565', 'PK_T_SYS_Language_Forms';
        -- Check if they keys are unique (it is very possible they might not be)        
        IF 1 >= (SELECT TOP 1 COUNT(*) AS cnt FROM T_SYS_Language_Forms GROUP BY LANG_UID ORDER BY cnt DESC)
        BEGIN
            -- If no Primary key for this table
            IF 0 =  
            (
                SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
                WHERE CONSTRAINT_TYPE = 'PRIMARY KEY' 
                AND TABLE_SCHEMA = 'dbo' 
                AND TABLE_NAME = 'T_SYS_Language_Forms' 
                -- AND CONSTRAINT_NAME = 'PK_T_SYS_Language_Forms' 
            )
                ALTER TABLE T_SYS_Language_Forms ADD CONSTRAINT PK_T_SYS_Language_Forms PRIMARY KEY CLUSTERED (LANG_UID ASC)
            ;
        END -- End uniqueness check
        ELSE
            PRINT 'FSCK, this column has duplicate keys, and can thus not be changed to primary key...' 
    END -- End NULL check
    ELSE
        PRINT 'FSCK, need to figure out how to update NULL value(s)...' 
END 

Antwoord 7, autoriteit 2%

De PRIMARY KEY-beperking identificeert op unieke wijze elk record in een databasetabel.
Primaire sleutels moeten UNIEKE waarden bevatten en de kolom mag geen NULL-waarden bevatten.

 -- DROP current primary key 
  ALTER TABLE tblPersons DROP CONSTRAINT <constraint_name>
  Example:
  ALTER TABLE tblPersons 
  DROP CONSTRAINT P_Id;
  -- ALTER TABLE tblpersion
  ALTER TABLE tblpersion add primary key (P_Id,LastName)

Antwoord 8

Probeer dit-

ALTER TABLE TABLE_NAME DROP INDEX `PRIMARY`, ADD PRIMARY KEY (COLUMN1, COLUMN2,..);

Antwoord 9

Probeer deze code te gebruiken:

ALTER TABLE `table name` 
    CHANGE COLUMN `column name` `column name` datatype NOT NULL, 
    ADD PRIMARY KEY (`column name`) ;

Antwoord 10

ALTER TABLE TABLE_NAME ADD PRIMARY KEY(`persionId`,`Pname`,`PMID`)

Antwoord 11

tabel wijzigen[Persoon]
ID toevoegen int primaire sleutel IDENTITEIT (1,1)

Hiermee wordt de primaire sleutel en de indentity seed toegevoegd en de nieuwe kolom gevuld.

Other episodes