Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mysql menambah kolom secara otomatis dengan satu kunci utama tertentu

Untuk mencapai apa yang Anda cari, Anda harus menggunakan pemicu . Tidak ada cara langsung lain untuk menyelesaikan tugas ini (saya kira).

Saya memang mencoba demo cepat sekarang:

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;

Dan inilah output yang saya dapatkan:

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

Berikut demo .

Setelah melalui Auto_Increment dokumentasi, saya menemukan cara lain untuk mencapai ini tanpa menggunakan pemicu. Idenya adalah tentang membuat Auto_Increment kolom dan tambahkan dengan kolom lain sebagai PRIMARY KEY . Dalam kasus kami akan menjadi UserId dan AUTO_INCREMENT akan menjadi PostNumber dan keduanya membentuk kunci utama. Begini caranya:

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;

Ini akan memberi kita hasil yang sama seperti yang diberikan cara pertama:

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

Dan inilah demo untuk cara kedua.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cara mendapatkan hitungan nilai di mysql

  2. mysql Compress() dengan sqlalchemy

  3. Perbaiki entri duplikat DB (bug MySQL)

  4. EntityFramework 6 Alpha 2 &Konektor MySQL/NET 6.6.4

  5. Mendapatkan induk root