主键、外键

主键的特点

  • 非空
  • 唯一
  • 被引用
  • 当一张表的一列被设定为主键的时候那么,这一列就不能为空了,不能有重复的值出现

创建表的时候指定主键的两种方式

  • 在创建字段后声明

    create table hhh(
    id int primary key,
    name varchar(2)
    );
  • 在表格创建最后指定

    create table hhh(
    id int,
    name varchar(2),
    primary key(id)
    )

在修改表的时候声明主键

alter table 表格名 add/modify/change … primary key;

删除主键

  • alter table 表格名 drop primary key;
  • 使用这种方式可以删除表格中的主键,不许要指定那一列是主键,系统会自动寻找
  • 这种方式只是删除了主键不会删除主键所在的字段

设置主键自增长

  • 因为主键的非空,必须唯一,通常指定主键的类型是整形,然后设置它自动增长,这样可以保证主键的唯一性,和非空性

设置主键自增长的方法

  • 创建表的时候指定主键和主键自增长

    create table hhh(
    id int primary key auto_increment,
    name varchar(30)
    )
  • 修改表的时候创建主键自增长

    alter table hhh
    change id id int auto_increment;
  • 修改表的时候删除主键自增长

    alter table hhh
    change id id int;

    ==注意==
  • 当设置了自动增长的时候,那么不需要插入这一列的值,因为 系统会自动的插入
  • 但是如果,自己指定了这个自动增长的值,那么就随着自己设置的值,进行增加
  • 主键和外键的名字最好是相同的,这样可以方便自然内部查询。

设置非空约束

  • 如果想要让某些值不能为空,那么可以设置为非空约束
  • 如下,对name设置了非空约束

        alter table hhh(
            id int primary key auto_increment,
            name varchar(10) not null
        )
    
  • 如果删除了其中的一个元素,那么原来的哪一列值不变。

==注意==

  • 如果已经存在数据表新的添加的一列,并且设置了非空约束,那么,旧的数据中的这一类的数据默认是int 是0 ,char 是 “”空字符串,boolean 是0填充
  • 设置之后再次插入数据的话,那么就必须指定

唯一键

  • 唯一约束的效果,不能重复
  • 设置唯一键

    create table wode(
    id int primary key auto_inscrement,
    name varchar(23) unique;

- 这样就个字段name设置了唯一约束

关系模型理解外键约束

  • 关系模型

    • 当我们做一个软件系统的时候,会有很多的实体,这些实体就是一个一个的类,
    • 那么这些 类之间很有可能是存在关系的,比如:学校内存在学生,老师,这样就是一个一对多的关系

      class Shoole {
       private Student stu;
       private Teacher tea;
      
      }
      • 有或者,一个丈夫对应一个妻子,那么这就是一个一对一的关系
      • 当然,一个员工可能同属于不止一个部门,这样就是一个多对一的关系
  • 关系模型中的对应关系都是对象
  • 对于数据库中的外键约束和关系模型有很多的相似点

外键约束

  • 外键必须是另一表的主键
  • 外键可以重复
  • 外键可以为空

==注意==

  • 主键表也成为主表,外键表也成为从表
  • 数据库表中也存在关系模型中的对应关系,不同的是
  • 数据库中的对应关系是相对于主键,外键来讲的,
  • 关系模型中的对应关系是相对于对象来说的。

创建外键约束

  • 首先创建主键表,主键中的主键,被外键表的外键引用
create table department(  
dept_name varchar(20),  
budget int,  
descript varchar(20),  
primary key(dept_name)  
); 
  • 创建外键表,外键表的外键引用了主键表的主键,这样就可以形成连接关系
create table course(  
course_id varchar(20),  
deptnames varchar(20),  
credits int,  
foreign key(deptnames) references department(dept_name)); 
  • 如果要删除主外键引用的表,步骤是:
    • 先要删除外键表
    • 因为主键表被外键表所引用,如果直接删除主键表,那么外键表就会变成空引用
    • 在删除主键表

==关联主外键表的时候注意事项==

  • 外键表的外键关联的必须是主键表的主键
  • 着两个列的名字可以不一样,但是类型必须完全相同(类型和类型数量),否则,会提示ERROR 1005 (HY000)错误
  • 主键和外键的编码必须是一样的
  • 指定主键表的列必须是存在的

主外键关系模型

  • 一对一

        create table  dep (
         name int,
     id int primary key);
    • 将外键表的主键设置为外键,和主键表的主键关联

         create table emp(
       name int primary key,
       sex int,
       foreign key(name) references dep(id)); 
    • 将外键表中的外键设置为not null unique非空唯一

      create table ddd(
       name int not null unique,
       sex int,
      foreign key(name) references dep(id));
      Query OK, 0 rows affected (0.14 sec)
    • 由于主键,唯一,非空,的特性,所以形成了一对一的关系

  • 一对多
    • 将外键表的一个非唯一的列设置为外键

      主键表
      create table department(
      dept_name varchar(20),
      budget int,
      descript varchar(20),
      primary key(dept_name)
      );
      外键表
      create table course(
      course_id varchar(20),
      deptnames varchar(20),
      credits int,
      foreign key(deptnames) references department(dept_name));
  • 多对多
    • 创建多个主键表
    • 外键表的外键有多个,分别对应主键表的主键,这样就形成了多个主键表,对应多个外键

      create table b(
      ha int,
      ba int,
      ta int,
      foreign key(ba) references dep(id),
      foreign key(ta) references mep(id));
    • 外键表中的外键ba,和ta分别对应两个主键表的主键,实现了多对多
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值