我刚刚安装了 Wamp 服务器 2,我得到了以下 4 个默认的 MySQL 用户:
USER FROM HOST
<anonymous> localhost
root localhost
root 127.0.0.1
root ::1
::1 是什么意思?
我刚刚安装了 Wamp 服务器 2,我得到了以下 4 个默认的 MySQL 用户:
USER FROM HOST
<anonymous> localhost
root localhost
root 127.0.0.1
root ::1
::1 是什么意思?
假设我有一个子表单,在多条记录的数据表视图中,它使用户可以完全控制特定 MySQL 表的 CRUD。(记录由父表单过滤)。
选项 1 是简单地创建一个链接表并将其设置为子表单的记录源。这当然需要很少的工作。
选项 2 是创建一组存储过程,用于从 MySQL 表向/从本地临时表插入、删除、更新和读取记录。然后将子表单的记录源设置为本地表,并将适当的表单事件绑定到适当的存储过程调用。显然,这比选项 1 需要做更多的工作。
现在明显的问题是为什么选择选项 2?好吧,我一直在尝试用存储过程替换链接表,并且发现速度提高相当可观,尤其是在慢速网络上。我也做了一些侦探工作,并在 MySQL 日志文件中四处挖掘,我注意到链接表方法会生成数量惊人的 SQL 调用。这解释了我认为的性能差异。
无论如何,我现在正在考虑用存储过程选项替换所有链接表(也许只是重要的表)。有没有其他人有这种经验?有什么想法或建议吗?
我正在使用 MySQL5.5,对于这个问题,我有 3 个简单的表 t1、t2 和 t3,设计如下:
+------------+ +------------+ +------------+
| t1 | | t2 | | t3 |
+------------+ +------------+ +------------+
| t1_id (PK) | | t2_id (PK) | | t3_id (PK) |
+------------+ | some_value | | t1_id (FK) |
+------------+ | t2_id (FK) |
+------------+
PK=主键,FK=外键,所有字段都是INT类型
我遇到的问题是我想向涉及该字段的表 t3 添加一个约束t2.some_value
。基本上我希望 和 的组合t1.t1_id
在t2.some_value
表 t3 中是唯一的。例如,这是我想避免的情况:
t1 t2 t3
+-------+ +-------+------------+ +-------+-------+-------+
| t1_id | | t2_id | some_value | | t3_id | t1_id | t2_id |
+-------+ +-------+------------+ +-------+-------+-------+
| 10 | | 20 | 1 | | 30 | 10 | 20 | <-- t2.some_value = 1
| 11 | | 21 | 2 | | 31 | 10 | 21 |
+-------+ | 22 | 3 | | 32 | 10 | 22 |
| 23 | 1 | | 33 | 10 | 23 | <-- t2.some_value = 1
+-------+------------+ | 34 | 11 | 23 |
+-------+-------+-------+
这里的问题是 t3 中的两个记录将相同的 t1 记录 (t1_id=10) 链接到具有相同some_value
. 有什么办法可以防止这种情况发生吗?据我所知,MySql 不允许定义跨多个表的约束。
我可以想到一种解决方案,但这涉及复制some_value
表 t3 中的字段,因此我可以直接在其上强制执行唯一键。这显然违反了归一化设计规则,但有没有其他办法呢?