zoukankan      html  css  js  c++  java
  • 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表,要保证身份证号是唯一的,但是又不想将身份证号作为主键,因为太长了,且不希望该信息容易利用。

  • 相关阅读:
    linux下安装EJBCA 搭建私有CA服务器
    PHP 设计模式之观察者模式
    PHP 设计模式之三种工厂模式
    PHP 设计模式之单例模式
    解決 VMware Workstation 与 Device/Credential Guard 不相容,无法启动虚拟机的问题
    Mac 外接鼠标不好用?这个软件解决你的痛点
    PHP Trait 解决 PHP 单继承问题
    Wordpress 添加图片点击放大效果
    PHP 实现 WebSocket 协议
    Web 网页直接打开 Windows 软件
  • 原文地址:https://www.cnblogs.com/dspace/p/6166321.html
Copyright © 2011-2022 走看看