我正在开发一个小的爱好应用程序。虽然我以前使用过 MySQL 和 PostgreSQL,但我在这里更像是一个 n00b,希望能得到任何帮助。
我的 MySQL 数据库中有一个名为“TECH”的表。该表有两列:“ID”(主键)和“名称”(技术名称 - 不是任何类型的键)。以下是几个示例行:
+----+--------+
| ID | name |
+----+--------+
| 1 | Python|
| 2 | ASP |
| 3 | java |
+----+--------+
这是创建的代码TECH
:
CREATE TABLE TECH (
id INT(5) ,
name VARCHAR(20),
PRIMARY KEY (id)
);
我开发了一个 html 表单供用户输入新技术到TECH
. 但是,我想确保TECH
. 例如,不应允许用户输入“Python”以分配 ID 4。此外,也不应允许用户在另一个 ID 处输入“pYthon”(或任何大写变体)。
目前,我有以下代码(在 PHP 端,而不是 MySQL 端):
// I discovered that MySQL is not case sensitive with TECH.name
$rows = 0;
$result = $mysql_query("SELECT * FROM tech AS T WHERE T.name='python'");
while ($row = mysql_fetch_array($result)) {
$rows += 1;
}
if ($rows != 0) {
echo "'python' cannot be inserted as it already exists";
} else {
// insertion code
}
现在,我知道执行此操作的正确方法是通过UNIQUE (name)
在 PHP 端执行并捕获“插入错误”来将 TECH.name 约束为 UNIQUE。但是,关于这个过程,我有以下两个问题:
- 定义 UNIQUE 约束是否保持上述明显的不区分大小写?
- 如何在 PHP 端准确捕获这样的插入错误?
我将不胜感激这方面的任何帮助或任何人的任何更好的想法。