Seguramente el problema es que no estás utilizando el motor InnoDB. Cuando creas bases de datos relacionales con claves foráneas has de utilizar el motor InnoDB siempre.
InnoDB es una tecnología de almacenamiento de datos de fuente abierta para la base de datos MySQL, incluido como formato de tabla estándar en todas las distribuciones de MySQL AB a partir de las versiones 4.0. Su característica principal es que soporta transacciones de tipo ACID y bloqueo de registros e integridad referencial. InnoDB ofrece una fiabilidad y consistencia muy superior a MyISAM, la anterior tecnología de tablas de MySQL, si bien el mejor rendimiento de uno u otro formato dependerá de la aplicación específica.
De modo que tendrías que hacer lo siguiente:
DROP DATABASE IF EXISTS conferencia;
CREATE DATABASE conferencia;
USE conferencia;
DROP TABLE IF EXISTS conferencias;
CREATE TABLE conferencias(
exp_id INT ,
temas VARCHAR(20) NOT NULL,
desc_corta VARCHAR(30) NOT NULL,
total_part INT NOT NULL,
costo DECIMAL(5,2) ,
horario datetime NOT NULL,
lugar VARCHAR(10) NOT NULL,
PRIMARY KEY (exp_id,temas,costo)
) ENGINE=InnoDB;
DROP TABLE IF EXISTS expositores;
CREATE TABLE expositores(
exp_id INT ,
Nombre VARCHAR(12) NOT NULL,
ApellidoP VARCHAR(12) NOT NULL,
ApellidoM VARCHAR(12) NOT NULL,
Fecha_Nac datetime NOT NULL,
salario DECIMAL(6,2) NOT NULL,
FOREIGN KEY (exp_id) REFERENCES conferencias (exp_id)
) ENGINE=InnoDB;
DROP TABLE IF EXISTS precios;
CREATE TABLE precios(
temas VARCHAR(20) NOT NULL ,
costo DECIMAL(5,2) ,
precio_dsc VARCHAR(10) ,
FOREIGN KEY (temas) REFERENCES conferencias (temas)
) ENGINE=InnoDB;
Además al instalar el MySql debes de marcar la casilla de: Enable InnoDB sino no funcionará aunque crees bien la sentencia SQL ya que el motor no estará instalado.
Si estás utilizando AppServ es bastante sencillo:
Justo en esta pantalla debes marcar la casilla Enable InnoDB y ya está. Con eso no tendrías que tener problemas para utilizar las claves foráneas.
Un saludo!