查看标准SQL布局的示例,我看到了:
CREATE TABLE IF NOT EXISTS siteUser (
id int(11) AUTO_INCREMENT PRIMARY KEY,
email varchar(64) NOT NULL UNIQUE KEY,
password varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT;
指定引擎结束时“DEFAULT”的目的是什么?有什么需要吗?我试着在教程网站上找到它的解释,但我没有运气。
詹姆斯
答案 0 :(得分:5)
你确定这不是错误吗?我无法在create table语句中找到数据库引擎的default
参数的任何引用。此外,在MySQL 5.1和5.5中,您的create table语句在SQLFiddle.com中失败。
我认为您可能会将默认值误解为engine
子句的一部分,而实际上它是charset
或collate
子句的一部分。例如,这是有效的,因为default
是charset子句前面的可选关键字:
CREATE TABLE IF NOT EXISTS siteUser (
id int(11) AUTO_INCREMENT PRIMARY KEY,
email varchar(64) NOT NULL UNIQUE KEY,
password varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET = utf8;
我猜charset
和collate
子句可以有default
关键字(顺便说一下,它实际上没有意义),因为它们指定了默认的字符集或排序规则,但仍有有可能在每列上覆盖这个。
对于存储引擎而言,这将是愚蠢的。没有'默认'单个表的存储引擎。只有一个。此外,如果它将设置整个数据库的默认值也没有意义。为什么这是create table语句中的一个选项?
答案 1 :(得分:0)
用于将ENGINE = InnoDB设置为默认引擎。因此,一种方法是从create table语句中删除Engine = INNODB
CREATE TABLE IF NOT EXISTS siteUser (
id int(11) AUTO_INCREMENT PRIMARY KEY,
email varchar(64) NOT NULL UNIQUE KEY,
password varchar(255) NOT NULL
)
或GolezTrol
建议的另一种方式:
CREATE TABLE IF NOT EXISTS siteUser (
id int(11) AUTO_INCREMENT PRIMARY KEY,
email varchar(64) NOT NULL UNIQUE KEY,
password varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT charset = utf8;
来自Manual: InnoDB as the Default MySQL Storage Engine
在以前的MySQL版本中,MyISAM是默认的存储引擎。 根据我们的经验,大多数用户从未更改默认设置。同 MySQL 5.5,InnoDB成为默认的存储引擎。我们再次期待 大多数用户不会更改默认设置。但是,因为 InnoDB,默认设置提供用户期望的好处 他们的RDBMS:ACID事务,参照完整性和崩溃 回收
但是如果你想让INNODB成为你的愚蠢引擎,那么还有另外一种方法:
在你的ini文件的[mysqld]部分下,添加:
default-storage-engine = innodb
它位于/etc/my.cnf