Java 如何使JDBCMySQL中的主键区分大小写?

Java 如何使JDBCMySQL中的主键区分大小写?,java,sql,database,jdbc,primary-key,Java,Sql,Database,Jdbc,Primary Key,我有一个定义为字符串值的主键。因此,主键为“Hello”和“Hello”的两个元组不可能存在,因为主键不区分大小写 创建主键不区分大小写的表的sql语句是什么?您基本上需要使用子查询的检查约束。但由于检查约束中不允许子查询,因此可以编写一个函数来运行查询并返回 结果:(假设您的PK被称为ID) 然后在主键的检查约束中使用此函数 CHECK check_id(ID) = 0 试试这个,让我知道。尚未验证它的语法。有一个由约束调用的用户定义函数是一种方法。缺点是每次插入一行时都必须执行一次完整的表

我有一个定义为字符串值的主键。因此,主键为“Hello”和“Hello”的两个元组不可能存在,因为主键不区分大小写


创建主键不区分大小写的表的sql语句是什么?

您基本上需要使用子查询的检查约束。但由于检查约束中不允许子查询,因此可以编写一个函数来运行查询并返回 结果:(假设您的PK被称为ID)

然后在主键的检查约束中使用此函数

CHECK check_id(ID) = 0

试试这个,让我知道。尚未验证它的语法。

有一个由约束调用的用户定义函数是一种方法。缺点是每次插入一行时都必须执行一次完整的表扫描,或者我想每次更新键字段时都必须执行,但这种情况不应该经常发生。此外,开发可由约束引用的udf并不总是容易的。即使在允许的情况下,函数也必须满足关于确定性和不改变数据状态的严格要求。有些数据库管理系统使这相对容易,而另一些数据库管理系统……则不然

另一种选择是定义“阴影”字段。此字段由insert和update触发器填充,将是ID字段的内容,转换为大写或小写。阴影场上的唯一约束将满足您的需要。这也可以实现为一个计算列,如果它们存在的话,但是触发器会更好。在重复的情况下,触发器可以拦截异常并抛出自己的异常,ID字段而不是阴影被称为罪魁祸首

这种方法的缺点是,包含关键数据所需的空间增加了一倍。这可能重要,也可能不重要


有趣的是,Oracle 12c引入了“隐形”列。它的作用与任何其他列一样,只是它必须被显式引用,例如,它不会显示在
select*
中。这对于这样一个不可见的列来说是一个完美的用法。

阅读有关检查约束的内容:我应该使用什么检查约束?
CHECK check_id(ID) = 0