Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Mysql tự động tăng một cột bằng một khóa chính cụ thể

Để đạt được những gì bạn đang tìm kiếm, bạn phải sử dụng trình kích hoạt . Không có cách nào khác trực tiếp để hoàn thành nhiệm vụ này (tôi đoán vậy).

Tôi đã thử một bản demo nhanh ngay bây giờ:

Create Table SoQuestion (
  UserId int,
  PostId int,
  PostNumber int null
 );

 CREATE TRIGGER inc_post_num 
 BEFORE INSERT ON SoQuestion
 FOR EACH ROW
 set New.PostNumber = (select num 
                       From (select count(*) as num 
                             from SoQuestion 
                             where UserId = New.UserId) as b) 
                     + 1;


insert into SoQuestion (UserId, PostId) Values (1,1);
insert into SoQuestion (UserId, PostId) Values (1,10);
insert into SoQuestion (UserId, PostId) Values (1,20);
insert into SoQuestion (UserId, PostId) Values (2,1);
insert into SoQuestion (UserId, PostId) Values (2,10);
insert into SoQuestion (UserId, PostId) Values (3,1);
insert into SoQuestion (UserId, PostId) Values (4,1);

select * FROM SoQuestion;

Và đây là kết quả mà tôi nhận được:

UserId | PostId | PostNumber |
==============================  
1      | 1      | 1          |
1      | 10     | 2          |
1      | 20     | 3          |
2      | 1      | 1          |
2      | 10     | 2          |
3      | 1      | 1          |
4      | 1      | 1          |

Đây là bản trình diễn .

Sau khi xem qua Auto_Increment tài liệu, tôi đã tìm thấy một cách khác để đạt được điều này mà không cần sử dụng trình kích hoạt. Ý tưởng là về việc tạo một Auto_Increment và thêm nó với một cột khác dưới dạng PRIMARY KEY . Trong trường hợp của chúng tôi, nó sẽ là UserIdAUTO_INCREMENT sẽ là PostNumber và cả hai đều tạo thành khóa chính. Đây là cách:

Create Table SoQuestion (
  UserId int,
  PostId int,
  PostNumber int NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (UserId, PostNumber)
 );

insert into SoQuestion (UserId, PostId) Values (1,1);
insert into SoQuestion (UserId, PostId) Values (1,10);
insert into SoQuestion (UserId, PostId) Values (1,20);
insert into SoQuestion (UserId, PostId) Values (2,1);
insert into SoQuestion (UserId, PostId) Values (2,10);
insert into SoQuestion (UserId, PostId) Values (3,1);
insert into SoQuestion (UserId, PostId) Values (4,1);

select * FROM SoQuestion;

Điều này sẽ cung cấp cho chúng tôi kết quả tương tự như cách đầu tiên đã đưa ra:

UserId | PostId | PostNumber |
==============================  
1      | 1      | 1          |
1      | 10     | 2          |
1      | 20     | 3          |
2      | 1      | 1          |
2      | 10     | 2          |
3      | 1      | 1          |
4      | 1      | 1          |

Và đây là bản trình diễn cho cách thứ hai.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql - Làm thế nào để so sánh hai đối tượng Json?

  2. Làm cách nào để thực hiện di chuyển trong laravel 5.5?

  3. Chỉ mục đa ngôn ngữ với Laravel Scout và Algolia

  4. php xóa các hàng liên kết khỏi cơ sở dữ liệu mysql

  5. PostgreSQL so với MySQL