我的讲师给了我一个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?
由于
答案 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。