MySql入门学习 DAY40(约束 表之间的关联关系 含练习题 )

MySql入门学习(数据库mysql)

DAY40

今日内容:

约束

表之间的关联关系 

 

约束

约束:用于保证数据的完整性 和 合法性

分类:

PRIMARY KEY:主键约束  用于唯一的标识记录

 从约束角度来看 主键约束 等同于 非空约束 和 唯一约束

作用:  区分两个相同的记录   提高查询效率   可以建立关联关系

语法 : CREATE TABLE stu (id INT PRIMARY KEY ,name CHAR(5));

          CREATE TABLE stu1 (id INT UNIQUE NOT NULL,name CHAR(5));

多列联合主键:CREATE TABLE t1 (idcard CHAR(18) , phonenumber CHAR(11),PRIMARY KEY (idcard , phonenumber));

练习 : 创建一个员工表 里面存储 员工信息 员工编号 姓名 年龄 性别

          CREATE TABLE employee (id INT PRIMARY KEY , name CHAR(10) NOT NULL,age INT ,

          sex CHAR(10) DEFAULT 'man');

FOREIGN KEY 和 REFERENCES : 外键约束  标识该字段为该表的外键

作用:  建立表与表之间的联系

添加外键约束时: 会产生限制 

1 . 必须先创建好被关联的表,也就是主表 ,然后创建从表

2.  主表的数据应该先插入,从表后插入

3.  在删除主表数据前  , 得先删除从表相关数据

4.  在更新主表数据前 ,  得确保从表没有数据关联

练习: 创建一个部门表 包含 部门序号 部门名称 

创建一个员工表 包含 员工序号 员工姓名 部门序号

先创建部门表: CREATE TABLE dept (id INT PRIMARY KEY ,name CHAR(10) );

再创建员工表: CREATE TABLE emp (id INT PRIMARY KEY , name CHAR(10),

                        dept_id INT , FOREIGN KEY(dept_id) REFERENCES dept(id) ); 

总的来说:外键就相当于与把一张表的字段 标识成 另一张表的主键

外键加上以后 :主表中的数据 删除 和更新时 都受到限制

解决的方案是: 为 外键 添加 级联操作

级联操作: 指的是同步更新和删除

语法: 在创建外键是 在后面 添加

ON UPDATE CASCADE     同步更新 

ON DELETE CASCADE     同步删除

创建部门表: CREATE TABLE dept (id INT PRIMARY KEY ,name CHAR(10) );

创建员工表: CREATE TABLE emp (id INT PRIMARY KEY , name CHAR(10),dept_id INT,

                     FOREIGN KEY(dept_id) REFERENCES dept(id) 

                     ON UPDATE CASCADE     

                     ON DELETE CASCADE   

                   ); 

 

NOT NULL:非空约束  数据不能为空

语法 :  CREATE TABLE student  ( id   INT NOT NULL , name CHAR(10) NOT NULL);

 

UNIQUE : 唯一性约束  标识该字段的值不能重复

作用: UNIQUE 是一种索引  索引是一种数据结构  用于提高查询效率

一张表中可以有多个唯一约束

语法:

单列唯一约束 : CREATE TABLE t2 (idcard CHAR(18) UNIQUE);

多列联合唯一约束: CREATE TABLE t3 (idcard CHAR(18) , phonenumber CHAR(11) ,

                               UNIQUE(idcard ,phonenumber ));

多列联合中 :idcard 相同 和phonenumber 相同 才会报错

 

AUTO_INCREMENT:自动增长   标识该字段的值自动增长

作用: 通常和主键字段使用 只能用于整数类型

语法: CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT ,name CHAR(5));

修改自动增长的起始位置: ALTER TABLE t1 AUTO_INCREMENT = 5;

 

DEFAULT: 默认值约束  为该字段的设置默认值

语法 :  CREATE TABLE user (id INT NOT NULL , name CHAR(10) NOT NULL , sex CHAR(1) DEFAULT '男' );

 

表之间的关联关系 

所有的数据不可能放入同一张表中,会造成浪费空间 结构混乱 扩展性差等等问题

所以需要分表处理,分表又会产生新的问题,表与表之间需要有联系

表之间的关系
    一对一 : 一张表中的一条记录对应另一张表的一条记录

    多对一 :  一张表中的多条记录对应另一张表的一条记录

    多对多 :  两张表双向的多对一,即多对多 

    多对多需要定义一张关系表来专门存放二者的关系

建立表之间的关系 就需要用到 FOREIGN KEY 外键约束

以上为本次学习内容

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值