首页 > 数据库 >MYSQL 字段约束条件

MYSQL 字段约束条件

时间:2022-11-24 17:01:28浏览次数:37  
标签:约束条件 varchar int 32 key MYSQL table id

字段的约束条件

创建表:
    create table t19(id int,name varchar(32));
往表中添加数据:
    insert into t19(name,id) values('tom',1);    # 可以自定义字段顺序
    insert into t19 values(2,'ami');
查看表数据:
    select * from t19;

# 1.无负号unsigned
         create table t20(id int unsigned,name varchar(32));
# 2.零填充zerofill
         create table t20(id int zerofill,name varchar(32));
# 3.非空not null
         create table t20(id int,name varchar(32) not null);
               # 所有字段类型不加约束条件的情况下默认都可以为空
# 4.默认值default
         create table t20(id int,name varchar(32) default 'jason');
# 5.唯一值unique
         # 单列唯一  : 使用后所在的字段名数据不能重复
         create table t20(id int unique,name varchar(32));
         # 联合唯一  使用后组合后的数据不能重复
         create table t20(id int,name varchar(32) default 'jason');               

主键

# 1.主键设置   primary key
        create table t1(id int primary key,name varchar(32));
        # -1. 单从约束层面上而言主键相当于not null + unique(非空且唯一)
        # -2. InnoDB引擎规定一张表只能有一个主键
               - 1.如果创建的表没有设置主键,非空且唯一的字段会被默认设为主键,
非空且唯一的的字段也没有,InnoDB会将隐藏的字段作为主键 id int not null unique - 2.主键可以加快数据查询 - 3.创建表的时候都需要有id字段,并且id字段应设为主键 - 4.单列主键 id int primary key - 5.联合主键 id1 int,id2 int,primary key(id1,id2) # 2.主键自增 auto_increment # -1.主键的自增作为约束条件要跟在键的后面,无法单独使用 create table t(id int primary key auto_increment,name varchar(32)); # -2.特点:在删除数据时,自增操作不会回退与重置,要想重置主键,需要对表格式化 truncate 表名; # # 删除表数据并重置主键值

外键

# 1.外键用于记录表与表之间的数据关系
      数据的关系有四种:
           1. 一对一的关系
           2. 一对多的关系
           3. 多对多的关系
           4. 没有关系
    """对于表关系如何判定呢: 换位思考他们的关系几对几"""

# 2.外键的创建位置
      1. 针对'一对多'的关系,外键字段建在多的一方 
      2. 针对'多对多'的关系,外键需要开设第三张关系表存储数据关系
      3. 针对'一对一'的关系,外键可以建在任何一方,但是一般选择建在查询频率较高的表

# 3.外键设置的关键字: foreign key
      - 必须基于多张表关系才可以设置表关系

        create table t4(
            id int primary key auto_increment,
            name varchar(32),
            t5_id int,
            foreign key(t5_id) references t5(id));       

        create table t5(
            id int primary key auto_increment,
            t5_name varchar(32),
            t5_desc varchar(64));

表关系创建

# 1.一对多
   - 创建一对多的表关系数据
       1.先写普通字段
       2.然后再写外键字段   
          create table dep(
                id int primary key auto_increment,
                dep_name varchar(32),
                dep_desc varchar(32)
          );
          create table emp(
                id int primary key auto_increment,
                name varchar(32),
                gender enum('male','female','others') default 'male',
                dep_id int,
                foreign key(dep_id) references dep(id)
         );
操作可能出现的问题:
    1.创建表的时候需要先创建没有外键的表,然后是有外键的表
    2.插入表数据的时候,外键字段只能写关联表字段里的数据值
    3.被关联字段的操作限制性太强,无法进行修改与删除

如何解决:  使用级联更新,级联删除
    on update cascade  # 级联更新 
    on delete cascade   # 级联删除
    """被关联数据一旦变动,关联的数据同步变动"""
    create table emp1(
          id int primary key auto_increment,
          name varchar(32),
          gender enum('male','female','others') default 'male',
                 dep_id int,
                 foreign key(dep_id) references dep1(id) 
                 on update cascade  
                 on delete cascade  
    ); 
    create table dep1(
          id int primary key auto_increment,
          dep_name varchar(32),
          dep_desc varchar(32)
    );

"""
- 在实际工作中,很多时候可能并不会使用外键
      因为外键增加了表之间的耦合度 不便于单独操作 资源消耗增加
- 我们为了能够描述出表数据的关系,又不想使用外键
      自己通过写SQL,建立代码层面的关系
"""



# 2.多对多
   - 创建多对多的表关系数据
     * 不能直接创建,需要单独开设第三张关系表。存储数据关系
         create table book(
               id int primary key auto_increment,
               title varchar(32)
         );
        create table author(
              id int primary key auto_increment,
              name varchar(32)
        );
        create table bookauthor(
              id int primary key auto_increment,
              book_id int,
              foreign key(book_id) references book(id) 
              on update cascade  # 级联更新 
              on delete cascade, # 级联删除
              author_id int,
              foreign key(author_id) references author(id) 
              on update cascade  # 级联更新 
              on delete cascade  # 级联删除
        );



# 3.一对一
   - 创建一对一的表关系数据
          create table userDetail(
                id int primary key auto_increment,
                phone bigint
          );
          create table user(
                id int primary key auto_increment,
                name varchar(32),
                detail_id int unique,
                foreign key(detail_id) references userDetail(id) 
                on update cascade  
                on delete cascade  
          );

# 4.没有关系

 

标签:约束条件,varchar,int,32,key,MYSQL,table,id
From: https://www.cnblogs.com/juzijunjun/p/16922433.html

相关文章

  • MySQL数据库基础3
    今日内容概要主题:字段约束条件无符号零填充非空默认值唯一值主键自增外键今日内容详细无符号零填充unsigned无符号 idintunsignedzerofill零填充......
  • MySQL数据库管理
    一、MySQL数据库管理1.1库和表库是由一个个相互联系的二维表组成的表是由一行行记录和一列列的字段组成的行(记录):用来描述一个对象的信息列(字段):用来描述对象的一个属......
  • hive和mysql的笔记-反向overwrite,避免重复插入数据,量表关联更新
    hive和mysql的笔记-反向overwrite,避免重复插入数据,量表关联更新1反向overwrite操作->解决错误的插入数据的问题。描述:​ 例如​ 学生表:student<id,name,createtime......
  • MySQL---InnoDB数据存储结构(区_段_碎片区_表空间)
    区_段_碎片区为什么要有区?为什么要有段?为什么要有碎片区?区的分类 表空间 独立表空间系统表空间......
  • 总结我的 MySQL 学习历程,给有需要的人看
    作者|慕课网精英讲师马听你好,我是马听,现在是某零售公司的MySQLDBA,身处一线的我表示有很多话要讲。我的MySQL学习历程在我大三的时候,就开始接触到MySQL了,当时我也是从......
  • mysql的配置文件和逻辑架构
    二进制日志log-bin——主从复制——log-bin=mysql-bin错误日志log-error——默认是关闭的,记录严重的警告和错误信息,每次启动和关闭的详细信息等。——log-error=var/log/m......
  • mysql 表字段约束条件
    目录无符号、零填充非空默认值唯一值主键自增外键前戏关系的判断一对多的关系外键字段的建立多对多关系一对一关系无符号、零填充unsigned idintunsignedzerofill i......
  • MySQL数据库管理
    一、MySQL数据库管理1、库和表行(记录):用来描述一个对象的信息列(字段):用来描述对象的一个属性2、常用的数据类型int:整型float:单精度浮点4字节32位double:双精度浮点......
  • [MySQL] 报错 SELECT list is not in GROUP BY clause and contains nonaggregated co
    报错Expression#1ofSELECTlistisnotinGROUPBYclauseandcontainsnonaggregatedcolumn'XXX'whichisnotfunctionallydependentoncolumnsinGROUPBY......
  • 浅谈mysql高性能调优(一)
    mysql的问题介绍(一)mysql索引的实现原理和数据结构mysql索引设计的技巧mysql聚簇索引和非聚簇索引的区别mysql索引的中级调优方案mysql分布式集群的设计原则mysql如何实现高......