• MySQL基础


    在工作中经常会遇到不少不同的观点,比如对于数据库来说那就是是否要设置外键,设置外键的理由自然不必多说,而不设置外键的理由多半为设置外键影响性能,但就目前工作来讲,还没有涉及到因为外键而引发的数据库瓶颈问题,倒是有因为外键的关系使得数据库迁移稍微需要运用一点小技巧,总体来说还是利大于弊。这里列举一下使用外键的理由,欢迎留言讨论。

    1. 若在客户端层面上实施数据库完整性规则,则每个客户端都要被迫实施这些规则,一定会有一些客户端不实施这些规则。
    2. 除了INSERT之外,在执行UPDATE和DELETE操作时,也必须实施这些规则。
    3. 执行客户端检查是非常耗时的,而DBMS执行这些检查会相对高效。

    谈到外键,不得不先说说约束(constrain),即管理如何插入或处理数据库的规则。DBMS通过在数据库表上施加约束来实施引用完整性。大多数约束是在表定义中定义的,即通过CREATE TABLE或ALTER TABLE语句。与约束类似的还有触发器,但一般来说约束的处理比触发器快,因此在可能的时候,应该尽量使用约束。

    表中任意列只要满足以下条件,都可以用于主键。

    1. 任意两行的主键值都不相同。
    2. 每行都具有一个主键值(即设为主键的列不允许为NULL)。
    3. 包含主键值的列从不修改或更新。(事实上MySQL是允许这样做的,比如修改ID,但是并不推荐这么做)
    4. 主键值不能重用。如果从表中删除某一行,其主键值不分配给新行。

    为表添加主键约束:
    比如为users表添加name字段为主键

    mysql> ALTER TABLE users  ADD CONSTRAINT PRIMARY KEY (name);
    

    为表添加外键约束:
    如为order表添加user_id为外键

    mysql> ALTER TABLE orders ADD CONSTRAINT FOREIGN KEY (user_id) REFERENCES users (user_id); 
    

    唯一性约束:

    唯一约束用来保证一列(或一组列)中的数据是唯一的。类似于外键,但是跟外键存在以下差别:

    1. 表可包含多一个唯一约束,但每个表只允许一个主键。
    2. 唯一约束列可包含NULL值。
    3. 唯一约束列可修改或更新。
    4. 唯一约束列的值可以重复利用。
    5. 与主键不一样,唯一约束不能用来定义外键。

    比如有user_test表,要保证身份证号是唯一的,但是又不想将身份证号作为主键,因为太长了,且不希望该信息容易利用。

  • 相关阅读:
    适配器模式
    控制器的显示注入
    自定义过滤器
    配置路由
    JavaScript判断浏览器类型及版本(新增IE11)
    路径别名
    判断是否是IE浏览器和是否是IE11
    页面视图中的按钮操作指向
    安卓开发环境搭建与环境变量设置
    html中iframe子页面与父页面元素的访问以及js变量的访问
  • 原文地址:https://www.cnblogs.com/dspace/p/6166321.html
Copyright © 2020-2023  润新知