Really, what MySQL is trying to accomplish is the same as a foreign key here. Enum is pretty easy to implement, but like vincent said, they can be downright dangerous.
Now, a real database will do the same thing wiht a little more work up front on your part, and ensure your data doesn't get scramble by you accidentally deleting or editing the wrong field in your foreign key.
Let me give you an example using Postgresql...
create table enum (fieldname text, id serial);
This will create the table that will hold our "enum" data that we would have put in the enum column in mysql.
Let's insert some data to get started.
insert into enum (fieldname) values ('big');
insert into enum (fieldname) values ('med');
insert into enum (fieldname) values ('sml');
so we have big, medium, and small for our enum types.
Next, we create a table that has a foreign key pointing to the enum table.
create table folks (fname text, lname text, id serial, enum_id int constraint enum_check references enum (id));
This creates a table that uses enum to decide which values are "legal" for inserting into the enum_id column.
Now we can insert data into our database like so:
insert into folks (fname, lname, enum_id) values ('Scott','Marlowe',(select id from enum where fieldname='big'));
Notice I used a subselect to decide which id to grab. I.e. I don't need to know the actual number, I let a subselect do it for me.
Now for the interesting part...
delete from enum where fieldname='big';
Yields the following error:
enum_check referential integrity violation - key in enum still referenced from folks
But, this works:
update enum set fieldname='huge' where fieldname='big'
so now we can create a view, that looks at the two tables like one:
create view bigview as (select fname, lname, fieldname as size from folks join enum on (folks.enum_id=enum.id));
Now we can get the data with:
select * from bigview;
fname | lname | size
-------+---------+------
Scott | Marlowe | huge
Enough for now... I gotta get some work done... :-)