zoukankan      html  css  js  c++  java
  • python进阶(八、mysql:完整性约束)

    3.mysql数据库
    3.6 完整性约束
    约束某一字段:
    3.6.1. 无符号(+-):数值型 unsigned
    3.6.2. 不能为空:not null
    1)建表:

    2)插入数据:

    设置严格模式后,非空字段不赋值会新增失败。

    3)设置严格模式:
    不支持对not null字段插入null值
    不支持对自增长字段插入””值
    不支持text字段有默认值
    方法一:直接在mysql中生效(重启失效):
    mysql>set sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";

    方法二:配置文件(my.ini)添加(永久失效):
    sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    注意:最好用pycharm或Notepad++打开“my.ini”,不要更改文件的utf-8编码方式

    非空字段赋值后,数据添加成功

    3.6.3. 默认值:default
    1)建表

    2)插入数据

    3.6.4. 唯一约束:unique
    唯一约束,指定某列或几列组合不能重复。mysql可以写入多个空(NULL)
    1)建表


    Key PRI(主键):第一个非空且唯一(not null unique)的字段

    2)插入数据

    3)mysql可以写入多个空(NULL)
    字段id约束唯一,但添加多个数据时没有赋值id,可以添加成功

    4)联合唯一

    (1)建表

    (2)插入数据

    3.6.5. 主键:primary key
    主键:表中的每一条数据的该字段都是表格中的唯一值。
    主键要求:唯一 + 非空

    1)默认主键
    第一个非空且唯一的字段会成为这张表的primary key(主键),每张表只有一个主键。

    2)指定主键 primary key

    3)联合主键(很少使用)
    主键可以包含一个字段或多个字段。当主键包含多个栏位时,称为联合主键。

    查看建表详细信息,定义联合主键后ip和port被赋予默认值’’(空字符串)。

    联合主键要求联合后的数据不为空且唯一。

    修改数据后,添加成功

    3.6.6. 自增:auto_increment
    自增只对数值类型的字段有效。
    自增至少要在unique(唯一)约束之后,可在primary key之后。
    自增主要用于id字段,当新增数据时,可能不知道最后的id是多少,查出来再加一很麻烦,直接使用自增即可。

    1)建表

    通常使用时,设置主键并自增。

    2)添加数据

    自增字段赋值后,再新增数据会在赋值的基础上继续自增。

    自增字段赋值后,再新增数据会在最大值基础上继续自增。

    最大值数据被删除后,再新增数据。自增字段的数值会在原来最大值的基础上增加。

    注意:设置了自增,建议不要手动赋值。容易造成数据混乱。
    如果自增从某一数值(例如:10001)开始,可以在新增第一条数据时进行赋值,后面的数据自增

    3.6.7. 外键:foreign key
    1)外键的使用条件:
    (1)两个表必须是InnoDB表,MyISAM表暂时不支持外键
    (2)外键关系的两个表的字段必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以

    2)外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作。

    3)外键的使用:
    (1)创建表单时,先创建被关联的表单
    (2)被关联的字段,即references指定的另外一个表的字段,必须保证唯一(unique或primary key)
    (3)创建数据时,先创建被关联的数据


    (4)要先删除关联数据,才能删除被关联数据。

    (5)修改被关联字段报错

    4)级连更新和级连删除
    cascade方式:在父表上update/delete记录时,同步update/delete掉子表的匹配记录



    注意:on delete cascade尽量不用,容易误删除数据

  • 相关阅读:
    overflow:hidden三个作用
    git提交代码步骤以及创建issue事项
    Vue3.0中setup函数的使用
    样式rpx
    js函数
    数据类型
    进制转换
    事件绑定
    微信小程序基础
    “AI+”改变世界!不同领域的5大人工智能趋势
  • 原文地址:https://www.cnblogs.com/bdzxh/p/14084079.html
Copyright © 2011-2022 走看看