不能。CREATE DATABASE 语句不支持 ENGINE 子句,数据库是逻辑容器,不绑定存储引擎;表的引擎由建表时显式指定或实例默认引擎决定。
不能。CREATE DATABASE 语句本身不支持 ENGINE 子句。MySQL 的数据库(schema)是逻辑容器,不绑定存储引擎;真正决定引擎的是后续创建的表。所谓“建库设 InnoDB”,实际是指让该库下新建的表**默认使用 InnoDB**——这靠的是数据库级别的默认引擎配置,而非建库命令本身。
有且仅有两种可靠方式:
CREATE TABLE t (...) ENGINE=InnoDB;
SHOW VARIABLES LIKE 'default_storage_engine'; 返回 InnoDB 才行MyISAM
my.cnf 或 my.ini),在 [mysqld] 段落添加:default-storage-engine = InnoDB,然后重启 MySQL 服务
注意:default_storage_engine 是动态变量,但某些旧版本(如 5.5 及之前)不支持运行时 SET 修改,必须改配置重启。
那大概率是混淆了语法,或者执行的是带 ENGINE 的 CREATE TABLE,不是 CREATE DATABASE。验证方法很简单:执行 CREATE DATABASE testdb ENGINE=InnoDB;,MySQL 会直接报错:ERROR 1064 (42000): You have an error in your SQL syntax...。任何声称“建库时指定 ENGINE”的写法,要么是误传,要么是把建表当建库用了。
即使全局默认引擎是 InnoDB,仍建议显式声明,尤其在跨环境部署时:
default_storage_engine
ENGINE=InnoDB 可能导致后续 ALTER TABLE ADD FOREIGN KEY 失败最稳妥的做法:建库后第一张表就用完整语法,比如:
CREATE TABLE users (id INT PRIMARY KEY) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;InnoDB 不是建库时选的,而是每张表自己定的;真正要盯住的,是 MySQL 实例的默认引擎配置和建表语句是否显式声明——这两处任一缺失,都可能在上线后突然冒出 MyISAM 表,进而引发事务、锁、外键等连锁问题。