关于MySQL数据库的建议

时间:2017-12-10 17:42:26

标签: mysql

我的讲师给了我一个mySQL数据库架构来创建一个银行应用程序。有些部分我不明白。

CREATE SCHEMA Banking;


/* Customer Table */

DROP TABLE IF EXISTS Banking.Customer;

CREATE TABLE Banking.Customer(
    custId  int(11)     AUTO_INCREMENT,
    name        varchar(50)     NOT NULL,
    address     varchar(300) NOT NULL,
    email       varchar(100) NOT NULL,
    phone       int(11) DEFAULT NULL,
    PRIMARY KEY (custId)
)   ENGINE=InnoDB AUTO_INCREMENT=210590 DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS Banking.Account;

CREATE TABLE Banking.Account (
    accountNo int(11) NOT NULL AUTO_INCREMENT,
    cId       int(11) NOT NULL,
    balance   int(11) NOT NULL,
    sortCode  int(11) NOT NULL,
    PRIMARY KEY (accountNo),
    KEY cId (cId),
    KEY sortCode (sortCode),
    CONSTRAINT account_ibfk_1 
    FOREIGN KEY (cid) REFERENCES Banking.CUSTOMER(custId)
)   ENGINE=InnoDB AUTO_INCREMENT=816410 DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS Banking.Transaction;

CREATE TABLE Banking.Transaction (
  _id           int(11)         NOT NULL AUTO_INCREMENT,
  accountNo     int(11)         NOT NULL,
  amount        int(11)         NOT NULL,
  postBalance   int(11)         NOT NULL,
  type          varchar(255)    DEFAULT NULL,
  PRIMARY KEY   (_id),
  KEY accountNo (accountNo),
  CONSTRAINT transaction_ibfk_2 
  FOREIGN KEY (accountNo) REFERENCES Account (accountNo)
) ENGINE=InnoDB AUTO_INCREMENT=229377 DEFAULT CHARSET=utf8;

我的问题是为什么将ENGINE设置为InnoDB

transaction_ibfk_2和CONSTRAINT account_ibfk_1正在做什么约束。

也是WORD Key。

为什么元素在既不是主键/外键时又称为KEY?

由于

1 个答案:

答案 0 :(得分:1)

  

为什么ENGINE设置为InnoDB

MySQL支持多个引擎(实际读取和写入数据的DB部分),InnoDB支持数据库事务,这在银行应用程序中非常有用(与MyISAM引擎不同,如果您没有明确指定一个,则通常是默认引擎。

  

transaction_ibfk_2和CONSTRAINT account_ibfk_1正在做什么约束。

它们只是下一行后面的外键的名称,而不是独立的。

  

还有单词KEY。为什么元素在既不是主键/外键时也称为KEY?

这样的普通KEY只会创建一个索引,因此在某些情况下按该列搜索会更快。使用同义词INDEX也可以创建相同的东西,这可能更明显。除了表现之外,它不会对事情产生太大影响。

还有PRIMARY KEY,FOREIGN KEY和UNIQUE KEY;你似乎知道前两个,而后者确保每个值只出现在一行中,这有时是一个有用的约束。有关详细信息,请参阅this question