Is better to create a table for each room or make a single table that handles all the rooms in my case?
Here's one approach:

create table users
( username ... not null primary key
, &lt;additional attributes&gt;
) engine = innodb;

create table rooms
( room_name ... not null primary key
, creator ... not null
, &lt;additional attributes&gt;
, constraint ... foreign key (creator) references users (username)
) engine = innodb;

create table conversations
( room_name ... not null
, username ... not null
, &lt;additional attributes&gt;
, constraint ... primary key (room_name, username)
, constraint ... foreign key (room_name) references rooms (room_name)
, constraint ... foreign key (username) references users (username)
) engine = innodb;


Assuming users are already created, a user can create a room. A conversation is a room with one or more users. To find out who is having conversation in a room:

select username from conversations where room_name = ?


Whether this is a good approach or not depends on your requirements. Personally I like to write down facts about my business and extract a logical model from that.

I would definitely stay away from changing the model as a consequence of a user action (example create a table for a new room).