***tl;dr:** For **select** attributes this cannot be declared directly in the initial `addAttribute()` call; two calls are required.* In order to set the default value, `eav_attribute.default`must be set with the primary key value from the `eav_attribute_option` table At a high level the need for two calls is apparent by looking at the flow and function of the `addAttribute()` and `addAttributeOption()` methods: 1. Prepare values 2. Insert/update into the `eav_attribute` table 3. Insert/update set/group 4. **Call `addAttributeOption()` to insert/update option values** The only hope then would be that `addAttributeOption()` will be able to update the `eav_attribute` record. However, there is no code which does this. The only tables accessed by this method are `eav_attribute_option` and `eav_attribute_option_value`. It is therefore necessary to call `getAttribute()` after the initial `addAttribute()` call, grab the attribute option ID and then call `updateAttribute()`.