복붙노트

[SQL] 기존 테이블에 기본 키를 추가

SQL

기존 테이블에 기본 키를 추가

나는 사람이라는 기존의 테이블이 있습니다. 이 표에서 나는 5 열이 :

나는이 테이블을 만들 때, 나는 PersionId과 PNAME는 기본 키로 설정합니다.

PMID - 지금은 기본 키에 하나 개 더 열을 포함 할. 어떻게이 작업을 수행 할 수있는 ALTER 문을 쓸 수있다? (난 이미 테이블에 1,000 레코드가)

해결법

  1. ==============================

    1.제약 조건을 삭제하고 다시 작성

    제약 조건을 삭제하고 다시 작성

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

    편집하다:

    당신은 쿼리 아래를 사용하여 제한 조건 이름을 찾을 수 있습니다 :

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

    2.이 같은 뭔가 일을해야한다고 생각

    이 같은 뭔가 일을해야한다고 생각

    -- 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
    
  3. ==============================

    3.

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

    당신이 primary_key와의 이름을 제어 할 수 있기 때문에 더 나은 솔루션입니다.

    그냥 사용하는 것보다 낫다

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

    이는 금리가 이름을 무작위 및 데이터베이스를 스크립팅 또는 비교하는 문제가 발생할 수 있습니다

  4. ==============================

    4.당신은 기본 키 제약 조건을 추가하는 경우

    당신은 기본 키 제약 조건을 추가하는 경우

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

    예를 들어 :

    ALTER TABLE DEPT ADD CONSTRAINT PK_DEPT PRIMARY KEY (DEPTNO)
    
  5. ==============================

    5.테이블에 기본 키가 이미 있습니다. 당신은 그렇지 않으면 오류가 발생합니다, 기본 키를 추가 할 수 없습니다. SQL 테이블에 대한 기본 키가 있기 때문에.

    테이블에 기본 키가 이미 있습니다. 당신은 그렇지 않으면 오류가 발생합니다, 기본 키를 추가 할 수 없습니다. SQL 테이블에 대한 기본 키가 있기 때문에.

    첫째, 기존의 기본 키를 삭제해야합니다.

    MySQL은 :

    ALTER TABLE Persion
    DROP PRIMARY KEY;
    

    SQL 서버 / 오라클 / MS 액세스 :

    ALTER TABLE Persion
    DROP CONSTRAINT 'constraint name';
    

    둘째, 기본 키를 추가합니다.

    MySQL은 / ​​SQL 서버 / 오라클 / MS 액세스 :

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

    아래에 하나 더

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

    이것은 개발자가 제약 조건 이름을 설정할 수 있습니다. 이 테이블을 유지하기 위해 더 쉽게합니다.

    난 모든 대답을 보였을 때 나는 약간의 혼동을 얻었다. 그래서 나는 모든 세부 사항을 찾을 수있는 몇 가지 문서를 연구. 이 대답은 다른 SQL 초보자를 도울 수 있기를 바랍니다.

    참조 : HTTPS : //www.w3schools.com/sql/sql_primarykey.asp

  6. ==============================

    6.기본 키 제약 조건 고유 데이터베이스 테이블의 각 레코드를 식별합니다. 기본 키는 고유 값을 포함해야하며 열은 NULL 값을 포함 할 수 없습니다.

    기본 키 제약 조건 고유 데이터베이스 테이블의 각 레코드를 식별합니다. 기본 키는 고유 값을 포함해야하며 열은 NULL 값을 포함 할 수 없습니다.

      -- 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)
    
  7. ==============================

    7.Necromancing. 이런 경우에 누구는 좋은 나를으로 작업 할 스키마를 가지고 ... 다음은 올바르게 수행하는 방법입니다 :

    Necromancing. 이런 경우에 누구는 좋은 나를으로 작업 할 스키마를 가지고 ... 다음은 올바르게 수행하는 방법입니다 :

    이 예에서, 테이블 이름 dbo.T_SYS_Language_Forms이고, 컬럼 이름이다 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 
    
  8. ==============================

    8.this- 시도하십시오

    this- 시도하십시오

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

    9.이 코드를 사용해보십시오 :

    이 코드를 사용해보십시오 :

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

    10.

    ALTER TABLE TABLE_NAME ADD PRIMARY KEY(`persionId`,`Pname`,`PMID`)
    
  11. from https://stackoverflow.com/questions/11794659/add-primary-key-to-existing-table by cc-by-sa and MIT license