SQL - "默认#34;在创建表时 - 是否有必要?

时间:2014-09-07 10:20:02

标签: mysql sql

查看标准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”的目的是什么?有什么需要吗?我试着在教程网站上找到它的解释,但我没有运气。

詹姆斯

2 个答案:

答案 0 :(得分:5)

你确定这不是错误吗?我无法在create table语句中找到数据库引擎的default参数的任何引用。此外,在MySQL 5.1和5.5中,您的create table语句在SQLFiddle.com中失败。

我认为您可能会将默认值误解为engine子句的一部分,而实际上它是charsetcollate子句的一部分。例如,这是有效的,因为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;

我猜charsetcollate子句可以有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
)

DEMO

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;

DEMO

来自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