MySQL常量表

MySQL常量表,mysql,database-design,constants,Mysql,Database Design,Constants,我如何在mysql中创建一个常量表,使之与类型的全名相匹配(使用int来区分不同的类型)。常量表应该是只读的,不需要更改或更新只读 创建表帐户( AccountType INT, ... ); 创建表AccountType( TypeId INT, TypeName VARCHAR(255), ); 在java中有 IUMATABLAMAP< /Go>(在番石榴中),或者Enums具有整数实例变量,C++中也有EnUM或静态const字符串……=…{…}其中整数类型是索引 这是可能的,还是有更

我如何在mysql中创建一个常量表,使之与类型的全名相匹配(使用int来区分不同的类型)。常量表应该是只读的,不需要更改或更新只读

创建表帐户(
AccountType INT,
...
);
创建表AccountType(
TypeId INT,
TypeName VARCHAR(255),
);

在java中有<代码> IUMATABLAMAP< /Go>(在番石榴中),或者Enums具有整数实例变量,C++中也有EnUM或<代码>静态const字符串……=…{…}其中整数类型是索引


这是可能的,还是有更好的替代方案?

如果您想拥有多个帐户类型,每个帐户都有一些详细信息(如名称),并且每个帐户都应该与一个帐户类型关联,您可以创建如下表:

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),
);
这将确保添加到帐户的所有行都将具有与注册的帐户类型之一对应的AccountType


看看

看起来你需要类似的东西:

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.';
本质上,您只需定义一个普通表并用数据填充它,然后使用触发器禁止任何更改

根据:要发出通用SQLSTATE值的信号,请使用“45000”,这意味着“未处理的用户定义异常”



或者,除了从适当的用户中选择外,所有权限都可以。

您不能只使用MySQL吗?@BrankoDimitrijevic ENUM可以工作,但前提是AccountsType表中没有更多列。如果我需要例如帐户的缩写(例如“checking”=“CHK”)以及全名等,它将不起作用。是的,你是对的,我忘了在示例中添加FK/PK约束。然而,我正在寻找一个只读表或类似的东西谢谢这正是我需要的:D!