Predefined rows conflicting with user entered rows
Reflection, not an answer.




  define a color whose R,G,B value are already used in a predefined color


I cannot find a reason to forbid for a user to create his own color name for some color. So (R,G,B) must NOT be unique.


  use a name that is already in use by a predefined color


I cannot find a reason to forbid for a user to create his own color for some color name. So (color_name) must NOT be unique.



As I see there is to exist additional field user, which allows each user to create his own colors collection. user field is nullable, Null value means this is a color available to all users (predefined colors, for example). But:


  hide predefined colors he's not interested into


means that there must be another method - while creating user you must copy all predefined colors to him personally. To mark any color as not interesting for current user you may add additional field or use any another method (for example, add some char - asterisk or minus sign, etc. - in front of color's name which is not allowed as first char for active color name). 

Alternatively you can create a table with base colors and a table with color aliases personal for each user. Each new color created by some user is inserted in both tables whereas any existing color is inserted in second table only.