> For the complete documentation index, see [llms.txt](https://learnsql.gitbook.io/lernmysql/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://learnsql.gitbook.io/lernmysql/welcome-to-the-mysql-tutorial/tao-khoa-chinh-primary-key-trong-mysql.md).

# Tạo khóa chính (Primary key) trong MySQL

Thông thường chúng ta có hai cách tạo khóa chính đó là tạo luôn trong quá trình tạo bảng ([create table](https://freetuts.net/lenh-tao-bang-create-table-trong-mysql-314.html)) hoặc là tạo bảng trước rồi tạo khóa chính sau. Sau đây là các ví dụ về hai cách này.

#### Tạo trong lệnh tạo bảng Create Table <a href="#goto-h3-0" id="goto-h3-0"></a>

Để chọn field cho khóa chính ta sẽ đặt từ khóa **primary key** đằng sau column đó, ví dụ:

```
CREATE TABLE users (
  id INT(10) UNSIGNED NOT NULL PRIMARY KEY,
  email VARCHAR(70) NOT NULL
) ENGINE = INNODB;
```

Hoặc ta sẽ dùng lệnh `PRIMARY KEY(field)`  đặt ở cuối các fields trong lệnh tạo bảng, ví dụ:

```
CREATE TABLE users (
  id INT(10) UNSIGNED NOT NULL,
  email VARCHAR(70) NOT NULL,
  PRIMARY KEY(id)
) ENGINE = INNODB;
```

#### Chọn nhiều fields làm khóa chính <a href="#goto-h3-1" id="goto-h3-1"></a>

Để chọn nhiều fields làm khóa chính thì ta sử dụng lệnh `PRIMARY KEY(field1, field2, ..)`và đặt nó ở cuối danh sách các field trong lệnh tạo bảng, ví dụ:

```
CREATE TABLE users (
  id INT(10) UNSIGNED NOT NULL,
  email VARCHAR(70) NOT NULL,
  PRIMARY KEY(id, email)
) ENGINE = INNODB;
```

#### &#x20;Sử dụng lệnh alter để tạo khóa chính <a href="#goto-h3-2" id="goto-h3-2"></a>

Thông thường cách này sử dụng trong trường hợp ta tạo bảng trước rồi sau đó tạo khóa chính sau. Ta sẽ sử dụng cú pháp sau để tạo:

```
ALTER TABLE table_name ADD PRIMARY KEY(primary_key_column);
```

```
CREATE TABLE users (
  id INT(10) UNSIGNED NOT NULL,
  email VARCHAR(70) NOT NULL
) ENGINE = INNODB;
ALTER TABLE users ADD PRIMARY KEY(id)
```

#### Sử dụng CONSTRAINT đặt tên cho khóa chính <a href="#goto-h3-3" id="goto-h3-3"></a>

Cách này **khuyến khích sử dụng** khi sử dụng lệnh `CONSTRAINT` chúng ta có thể tạo tên cho khóa chính, nhờ đó sau này ta sẽ dễ quản lý hơn. Sau đây là một số ví dụ sử dụng `CONSTRAINT`để tạo khóa chính:

```
CREATE TABLE users (
  id INT(10) UNSIGNED NOT NULL,
  email VARCHAR(70) NOT NULL,
  CONSTRAINT pk_user PRIMARY KEY(id)
) ENGINE = INNODB;
```

**Hoặc**:

```
CREATE TABLE users (
  id INT(10) UNSIGNED NOT NULL,
  email VARCHAR(70) NOT NULL
) ENGINE = INNODB;
 
ALTER TABLE users ADD CONSTRAINT pk_user PRIMARY KEY (id)
```

### Xóa khóa chính (Drop Primary Key) <a href="#goto-h2-2" id="goto-h2-2"></a>

Để xóa khóa chính thì chúng ta sử dụng lệnh `ALTER TABLE` kết hợp với `DROP`, ví dụ:

```
ALTER TABLE users DROP PRIMARY KEY
```
