如何在mysql中创建一个常量表,该表将匹配一个类型(使用int来区分不同类型)与该类型的全名。常量表应该是只读的,并且预计不需要仅更改或更新读数。
CREATE TABLE Accounts (
AccountType INT,
...
);
CREATE TABLE AccountTypes (
TypeId INT,
TypeName VARCHAR(255),
);
在Java中有ImmutableMap<Integer><String>
(在Guava中)或带有整数实例变量的枚举,在C ++中还有枚举或static const string[...] ... = { ... }
,其中类型整数是索引。
这可能,还是有更好的选择?
答案 0 :(得分:2)
看起来你需要类似的东西:
CREATE TABLE AccountType (
TypeId INT PRIMARY KEY,
TypeName VARCHAR(255),
TypeShortName VARCHAR(255)
);
INSERT INTO AccountType VALUES
(1, 'Foo', 'F'),
(2, 'Bar', 'Br'),
(3, 'Baz', 'Bz');
CREATE TRIGGER AccountTypeInsertTrigger BEFORE INSERT ON AccountType FOR EACH ROW
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Cannot INSERT - the AccountType table is read-only.';
CREATE TRIGGER AccountTypeUpdateTrigger BEFORE UPDATE ON AccountType FOR EACH ROW
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Cannot UPDATE - the AccountType table is read-only.';
CREATE TRIGGER AccountTypeDeleteTrigger BEFORE DELETE ON AccountType FOR EACH ROW
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Cannot DELETE - the AccountType table is read-only.';
基本上,您只需定义一个普通表并用数据填充,然后使用触发器禁止任何更改。
根据MySQL documentation:要发信号通用SQLSTATE值,请使用“45000”,表示“未处理的用户定义的异常。”
或者,REVOKE除适当用户的SELECT之外的所有权限。
答案 1 :(得分:0)
如果您想拥有多种帐户类型,每种帐户类型都包含一些详细信息(例如名称),并且每个帐户都应与一种帐户类型相关联,则可以创建表格,如
CREATE TABLE Accounts (
AccountId INT(10) PRIMARY KEY,
AccountType INT(10) NOT NULL, FOREIGN KEY (AccountType) REFERENCES AccountTypes (TypeId),
...
);
CREATE TABLE AccountTypes (
TypeId INT(10) PRIMARY KEY,
TypeName VARCHAR(255),
);
这将确保添加到Accounts的所有行都具有与已注册的某个帐户类型相对应的AccountType。