一.主键

  • 主键:每张表中只能有一个字段(复合主键可以有多个字段)使用此属性,用来唯一约束该字段中的数据,不能重复
  • 1.增加主键:
    • 在创建表的时候,直接在字段后,添加primary key关键字

      CREATE TABLE my_pri1(name varchar(20) not null comment '姓名',number char(10) primary key comment '学号'
      )charset utf8;
      
    • 在创建表的时候,在所有的字段之后,使用primary key(主键字段列表)来创建主键(如果有多个字段作为主键,则称之为复合主键)
      CREATE TABLE my_pri2(number char(10) not null comment '学号',course char(10) not null comment '课程编号',score tinyint unsigned default 60,primary key(number, course)
      )charset utf8;
      
    • 当表创建完之后,额外追加主键,可以直接追加主键,也可以通过修改表字段的属性追加主键
      CREATE TABLE my_pri3(course char(10) not null comment '课程编号',name varchar(10) not null comment '课程名称'
      )charset utf8;
      ALTER TABLE my_pri3 add primary key(course);
      
  • 2.主键约束:主键对应的字段中的数据不能重复,如果重复,则数据操作失败
  • 3.更新和删除主键:对于主键,没有办法直接更新,主键必须先删除,然后才能更新。
    ALTER TABLE my_pri3 DROP PRIMARY KEY;
    
  • 4.主键分类
    • 业务主键:使用真实的业务数据作为主键,例如学号、课程编号等等,很少使用;
    • 逻辑主键:使用逻辑性的字段作为主键,字段没有业务含义,值有没有都没有关系,经常使用。

二.唯一键

  • 唯一键:每张表往往有多个字段需要具有唯一性,数据不能重复,但是在每张表中,只能有一个主键。因此,唯一键就是用来解决表中多个字段需要具有唯一性的问题
  • 唯一键与主键的区别:唯一键允许字段值为空,并且允许多个空值存在
  • 1.增加唯一键:
    • 在创建表的时候,字段后面直接添加unique或者unique key关键字,当唯一键满足非空条件时,其性质就和主键一样

      CREATE TABLE my_unique(number char(10) unique comment '学号',name varchar(20) not null
      )charset utf8;
      
    • 在所有字段之后,增加unique key(字段列表),可以设置复合唯一键
      CREATE TABLE my_unique2(number char(10) not null,name varchar(20) not null,unique key(number)
      )charset utf8;
      
    • 在创建表之后,增加唯一键
      CREATE TABLE my_unique3(id int primary key auto_increment,number char(10) not null,name varchar(20) not null
      )charset utf8;
      ALTER TABLE my_unique3 add unique key(number);
      
  • 2.删除唯一键:
    ALTER TABLE my_unique3 DROP INDEX number;
    

三.外键

  • 外键:外面的键,即不在自己表中的键。如果一张表中有一个非主键的字段指向另一张表的主键字段,那么将该非主键字段称为外键。每张表中,可以有多个外键。
  • 增加外键:
    • 1.在创建表的时候,增加外键: foreign key(外键字段) references 外部表名(主键字段);

      CREATE TABLE my_foreign1(id int primary key auto_increment,name varchar(20) not null comment '姓名',c_id int comment '班级表ID',-- 增加外键foreign key(c_id) references class(id)
      )charset utf8;
      
    • 2.在创建表之后,增加外键:ALTER TABLE 表名 + add[constraint 外键名字] + foreign key(外键字段) + references 外部表名(主键字段);
      CREATE TABLE my_foreign2(id int primary key auto_increment,name varvahr(20) not null comment '姓名',c_id int comment '班级表ID'
      )charset utf8;
      -- 增加外键
      ALTER TABLE my_foreign2 add
      -- 指定外键名
      constraint test_foreign
      -- 指定外键字段
      foreign key(c_id)
      -- 引用外部表主键
      references class(id);
      
  • 修改和删除外键:外键不能修改,只能先删除后增加。ALTER TABLE 表名 DROP foreign key 外键名字
    ALTER TABLE my_foreign1 DROP foreign key my_foreign1_ibfk_1;
    

MySQL中的主键、唯一键、外键对比相关推荐

  1. mysql 导入数据 1215_在用Navicat for MySQL给MySQL中的数据表单添加外键以及主键出现的1215错误...

    这次在学校进行生产实习,跟随老师创建一个PHP项目,实现一个电子商务系统B   to  B模式的,在设计数据库的时候,因为要实现父表和子表之间的关联,涉及到添加主键和外键,在添加的时候,无论如何都出现 ...

  2. mysql中表的约束,主键外键唯一键

    mysql2 表的约束 空属性(NULL) 默认值 列描述 zerofill 主键 主键属性 复合主键 追加主键 删除主键 自增长 唯一键 外键 表的约束 空属性(NULL) 此时 name 的 Nu ...

  3. mysql中的外键约束_MySQL外键约束

    在本教程中,您将了解MySQL外键(foreign key)以及如何在MySQL中创建,添加和删除外键约束. MySQL外键简介 外键表示一个表中的一个字段被另一个表中的一个字段引用.外键对相关表中的 ...

  4. mysql中外键总结_mysql外键的一些总结

    外键作用:①可以让数据表不至于太过冗余: ②可以保持数据的一致性(当主表不存在对于的外键时,从表进行的增删操作无效): ③让数据库自动控制插入数据的合法性 外键规则:① 主键和外键数据类型需系统并且为 ...

  5. mysql 导入主键冲突_MySQL 处理插入过程中的主键唯一键重复值的解决方法

    本篇文章主要介绍在插入数据到表中遇到键重复避免插入重复值的处理方法,主要涉及到IGNORE,ON DUPLICATE KEY UPDATE,REPLACE:接下来就分别看看这三种方式的处理办法. IG ...

  6. MySQL中的主键约束和外键约束

    1.主键约束 表通常具有包含唯一标识表中每一行的值的一列或一组列. 这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性. 由于主键约束可保证数据的唯一性,因此经常对标识列定义这种约束. 如 ...

  7. mysql主键约束和外键约束的作用_MySQL中的主键约束和外键约束

    1.主键约束 表通常具有包含唯一标识表中每一行的值的一列或一组列. 这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性. 由于主键约束可保证数据的唯一性,因此经常对标识列定义这种约束. 如 ...

  8. mysql 主外键 策略_mysql外键策略

    1.外键 建表时添加外键:constraint 外键名 foreign key 从表字段 references 主表字段 级联操作 create table dage( create table xi ...

  9. SQL Server中的六种约束:主键约束,外键约束,唯一约束,非空约束,检查约束,默认约束

    什么是约束? 数据库-由若干张数据表组成(理解为一个类库) 数据表-由行和列组成的一个二维数组(理解为一个类) 列-字段(理解为表中对象的一个属性) 行-理解为表中的一个对象 约束是数据库中保证数据完 ...

最新文章

  1. 简单又实用的分享!SharePoint母版页引用(实战)
  2. Silverlight 开发入门1
  3. DispatcherServlet的用途
  4. 12.oauth密码模式identity server4实现
  5. 使用 System.Net.Http.Json 简化 HttpClient 的使用
  6. 终极解密输入网址按回车到底发生了什么?
  7. 数码相机专业术语解答
  8. 嫦娥四号的通讯速率,为何没有视频直播
  9. java监控gc线程_Java应用性能监控系统,使用JMX实现,实现了类加载监控、内存监控、线程监控、GC监控...
  10. 如何构建全球最佳数据中心平台
  11. ping命令使用集合
  12. 律动荆棘皇冠 Crown of Thorns
  13. 游戏对战平台原理终结篇(转自)
  14. Word2016怎么制作目录
  15. 在树莓派中解决浏览器自动更新失败弹框遮挡数据的方案
  16. P4556 雨天的尾巴 线段树合并
  17. 秀动抢票教程,JS逆向分析与学习
  18. 有什么提升技术能力的网站
  19. OMAPL138的DSPLINK开发入门
  20. label mpchart 饼图_ECharts饼图属性设置

热门文章

  1. 轻量级 memcached缓存代理 twemproxy实践
  2. 有了Gradle,还会选Maven吗?
  3. Centos6.4下安装及配置FTP Server
  4. 讲解JS的promise,这篇是专业认真的!
  5. Could not open a connection to your authentication agent
  6. heritrix 3.2.0 -- 环境搭建
  7. 【iOS-Cocos2d游戏开发之五】【1】多触点与触屏事件详解(单一监听、事件分发)...
  8. 产品经理和项目经理的区别
  9. 极客新闻——18、领导和下属之间到底是什么样的关系?
  10. 实战篇:Security+JWT组合拳 | 附源码