How to create a unique index with only certain values required to be unique?
In versions MySQL 5.7 and MariaDB 5.2+ you can use a (generated) VIRTUAL column to accomplish this. You defineucode as a virtual column and then add a UNIQUE constraint:

CREATE TABLE codes 
  ( product_id  INT NOT NULL,
    code INT NOT NULL,
    ucode BIT AS (CASE WHEN code  = 11 THEN b'1' ELSE NULL END) 
        VIRTUAL,
        -- PERSISTENT,    -- for persistent storage of the value in MariaDB
        -- STORED,        -- for persistent storage of the value in MySQL 
    CONSTRAINT code_11_product_id_unique
        UNIQUE (ucode, product_id)
  ) ;


Test at dbfiddle.uk:




insert into codes
  (product_id, code)
values 
  (1, 11),
  (1, 222),
  (1, 222),
  (1, 333),
  (2, 11),
  (2, 222),
  (2, 222);



✓






select * from codes;



product_id | code | ucode
---------: | ---: | :----
         1 |   11 | 1    
         1 |  222 | null 
         1 |  222 | null 
         1 |  333 | null 
         2 |   11 | 1    
         2 |  222 | null 
         2 |  222 | null 






insert into codes          -- should fail
  (product_id, code)
values 
  (2, 11) ;



Duplicate entry '\x01-2' for key 'code_11_product_id_unique'






select * from codes;



product_id | code | ucode
---------: | ---: | :----
         1 |   11 | 1    
         1 |  222 | null 
         1 |  222 | null 
         1 |  333 | null 
         2 |   11 | 1    
         2 |  222 | null 
         2 |  222 | null