Your first example CREATE TABLE statement doesn't have a key*, your second one does. I think your second example is what you want:
CREATE TABLE `thing` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
… other_columns …,
`start_date` datetime NOT NULL,
`end_date` datetime DEFAULT NULL,
PRIMARY KEY (`id`,`start_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
You may or may not want id to be an auto-incrementing column but that's primarily a question of functionality (do you want to be able to generate incrementing values or just insert them yourself) rather than logical design or performance.
*MySQL unfortunately uses the keyword KEY
to designate an index. Keys have to be specified with the UNIQUE KEY
or PRIMARY KEY
syntax.