[SQL] 기존 테이블에 기본 키를 추가
SQL기존 테이블에 기본 키를 추가
나는 사람이라는 기존의 테이블이 있습니다. 이 표에서 나는 5 열이 :
나는이 테이블을 만들 때, 나는 PersionId과 PNAME는 기본 키로 설정합니다.
PMID - 지금은 기본 키에 하나 개 더 열을 포함 할. 어떻게이 작업을 수행 할 수있는 ALTER 문을 쓸 수있다? (난 이미 테이블에 1,000 레코드가)
해결법
-
==============================
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.이 같은 뭔가 일을해야한다고 생각
이 같은 뭔가 일을해야한다고 생각
-- 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.
-- 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.당신은 기본 키 제약 조건을 추가하는 경우
당신은 기본 키 제약 조건을 추가하는 경우
ALTER TABLE <TABLE NAME> ADD CONSTRAINT <CONSTRAINT NAME> PRIMARY KEY <COLUMNNAME>
예를 들어 :
ALTER TABLE DEPT ADD CONSTRAINT PK_DEPT PRIMARY KEY (DEPTNO)
-
==============================
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.기본 키 제약 조건 고유 데이터베이스 테이블의 각 레코드를 식별합니다. 기본 키는 고유 값을 포함해야하며 열은 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.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.this- 시도하십시오
this- 시도하십시오
ALTER TABLE TABLE_NAME DROP INDEX `PRIMARY`, ADD PRIMARY KEY (COLUMN1, COLUMN2,..);
-
==============================
9.이 코드를 사용해보십시오 :
이 코드를 사용해보십시오 :
ALTER TABLE `table name` CHANGE COLUMN `column name` `column name` datatype NOT NULL, ADD PRIMARY KEY (`column name`) ;
-
==============================
10.
ALTER TABLE TABLE_NAME ADD PRIMARY KEY(`persionId`,`Pname`,`PMID`)
from https://stackoverflow.com/questions/11794659/add-primary-key-to-existing-table by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 플랫 파일 데이터베이스 [마감] (0) | 2020.07.21 |
---|---|
[SQL] SQL 쿼리를 사용하여 int로 문자열을 변환 (0) | 2020.07.21 |
[SQL] 스택 오버플로 관련 질문 알고리즘 (0) | 2020.07.21 |
[SQL] 에 의해 그룹을 사용하고 절을 가진 (0) | 2020.07.21 |
[SQL] 컬럼의 각 고유 값에 대한 첫 번째 행을 선택하는 방법 (0) | 2020.07.21 |