Mysql SQL-创建表时使用“默认值”-是否有必要?

Mysql SQL-创建表时使用“默认值”-是否有必要?,mysql,sql,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; 指定引擎末尾的默认值的用途是什么?有必要吗?我试图在教程网站上找到一个解释,但我没有任何运气 James用

查看标准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;
指定引擎末尾的默认值的用途是什么?有必要吗?我试图在教程网站上找到一个解释,但我没有任何运气


James

用于将ENGINE=InnoDB设置为默认引擎。因此,一种方法是从CREATETABLE语句中删除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;

在MySQL的早期版本中,MyISAM是默认的存储引擎。 根据我们的经验,大多数用户从未更改默认设置。具有 MySQL 5.5,InnoDB成为默认的存储引擎。同样,我们期望 大多数用户不会更改默认设置。但是因为 InnoDB,默认设置提供用户期望的好处 他们的RDBMS:ACID事务、引用完整性和崩溃 恢复

但是,如果您想让INNODB成为您的deafult引擎,那么还有一种方法:

在ini文件的[mysqld]部分下,添加:

default-storage-engine = innodb

它位于/etc/my.cnf中,用于将ENGINE=InnoDB设置为默认引擎。因此,一种方法是从CREATETABLE语句中删除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;

在MySQL的早期版本中,MyISAM是默认的存储引擎。 根据我们的经验,大多数用户从未更改默认设置。具有 MySQL 5.5,InnoDB成为默认的存储引擎。同样,我们期望 大多数用户不会更改默认设置。但是因为 InnoDB,默认设置提供用户期望的好处 他们的RDBMS:ACID事务、引用完整性和崩溃 恢复

但是,如果您想让INNODB成为您的deafult引擎,那么还有一种方法:

在ini文件的[mysqld]部分下,添加:

default-storage-engine = innodb

它在/etc/my.cnf中,你确定这不是错误吗?在CREATETABLE语句中找不到数据库引擎的默认参数的任何引用。此外,您的create table语句在MySQL 5.1和5.5的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关键字,顺便说一句,这实际上是没有意义的,因为它们指定了默认的charset或collate,但是仍然有可能覆盖每列


对于存储引擎来说,这是愚蠢的。单个表没有“默认”存储引擎。只有一个。此外,如果为整个数据库设置默认值,也没有意义。为什么在create table语句中会出现此选项?

您确定这不是错误吗?在CREATETABLE语句中找不到数据库引擎的默认参数的任何引用。此外,您的create table语句在MySQL 5.1和5.5的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关键字,顺便说一句,这实际上是没有意义的,因为它们指定了默认的charset或collate,但是仍然有可能覆盖每列


对于存储引擎来说,这是愚蠢的。单个表没有“默认”存储引擎。只有一个。此外,如果为整个数据库设置默认值,也没有意义。为什么这是create table语句中的一个选项?

因此您只能通过更改ini来设置Inno default,但也可以在create table语句后添加default以设置Inno default?@GolezTrol:-是的,这两种方法都可以。我只是试着给出一个替代方案:我认为您引用的文档没有提到任何关于默认参数的内容。它只是说,由于InnoDB是5.5中的默认值,如果您想使用InnoDB,根本不需要指定引擎。还是我忽略了什么?@GolezTrol:-是的,这是真的。我补充说,只是为了指出一个事实,我们不需要从5.5中明确地添加它。这有误导性吗?我只是说默认关键字根本不应该存在。与MySQL切换默认引擎的事实无关。可以在INI文件中更改默认引擎,但不能在CREATETABLE语句中更改。可以,但只针对表,在这种情况下,它根本不是默认值。它只是那张桌子的唯一引擎。请看我的答案。因此,您只能通过更改ini使Inno成为默认值,但是,您可以使用als
o在create table语句之后添加默认值以使Inno成为默认值?@GolezTrol:-是,两者都可以工作。我只是试着给出一个替代方案:我认为您引用的文档没有提到任何关于默认参数的内容。它只是说,由于InnoDB是5.5中的默认值,如果您想使用InnoDB,根本不需要指定引擎。还是我忽略了什么?@GolezTrol:-是的,这是真的。我补充说,只是为了指出一个事实,我们不需要从5.5中明确地添加它。这有误导性吗?我只是说默认关键字根本不应该存在。与MySQL切换默认引擎的事实无关。可以在INI文件中更改默认引擎,但不能在CREATETABLE语句中更改。可以,但只针对表,在这种情况下,它根本不是默认值。它只是那张桌子的唯一引擎。看看我的答案。