当前位置:首页|资讯

单元3 数据定义 3-3 主键约束

作者:老徐的CS自留地发布时间:2024-10-04


实验内容和步骤

方便大家完成每一个实验,这里会将之前的实验环节1和实验环节2的内容也会拿过来做基础!以方便大家进行该次实验!同时也是对上节课实验的一个复习!希望大家能够知悉!

0 实验预备

当然先看看数据库有哪些?别建冲突了!

show databases;

若没有bookstore数据库,那就创建吧!

create database bookstore;

再show一下,看创建是否成功哦!

use bookstore;

然后,开始创建表啦!

CREATE TABLE  book (    图书编号  char(10)   NOT NULL  PRIMARY KEY,    图书类别  varchar(20)   NOT NULL  DEFAULT  '计算机',    书名       varchar(40)   NOT  NULL ,    作者       char(10)     NOT  NULL ,    出版社     varchar(20)   NOT  NULL ,    出版时间   date           NOT  NULL ,    单价      float(5,2)       NOT  NULL ,    数量      int(5),      折扣      float(3,2) ,      封面图片  blob ) ENGINE=InnoDB;

然后 看一下是否创建成功啦!

show tables;

这是book表,算是复习一下上次的内容啦!

那我们今天的实验,先创建一个book_copy吧,模仿教材P65 例3-14

先自己写,不要复制粘贴喔!

1 主键约束 实验

1.1  主键是一个字段的情况

CREATE TABLE book_copy (    图书编号 varchar(6)  NULL,    书名 varchar(20)  NOT  NULL  PRIMARY KEY ,    出版日期 date );

再看一下是否创建成功呢?用哪个语句才能看到下图呢??回忆一下呀!

这是定义一个主键的例子,就是那个PRIMARY KEY,将书名定义为了主键,当然,通常是不会这样做的喔!也是为了演示需要,那主键的意思就是,书名必须是唯一的!

会不会有同学问?那定义成为主键,咋了?能不能演示一下,书名是重复了,会咋样呢?

这里,我们提前将 第四章要讲的 数据插入操作先拿过来用一下,演示一下,若某个字段成为主键的后,重复插入数据会出现啥情况呢?

先告诉大家,插入数据的语句为insert

那就开始测试一下插入数据吧!

INSERT INTO book_copy VALUES (        'TP.9501', 'C语言','2020-08-16');

呀,出错啦,咋回事呢?能看懂下面的英文提示吗?

那继续修改insert语句

INSERT INTO book_copy VALUES ('9501', 'C语言','2020-08-16');

看到了吧!

这句话啥意思?就是说,OK啦,有一行受到影响,看吧,就插入了一条数据!

看一下插入了啥吧?

select * from book_copy;

那,和今天讲的主键约束有啥用呢?那我们来继续插入一条记录,为了演示,我们故意插入一条“书名”一样的数据,看能否成功不?

INSERT INTO book_copy VALUES ('9502', 'C语言','2021-07-07');

运行后,会出现啥提示呢?

对,如下图所示喔!

那翻译一下,是啥意思呢?

对,就是说:book_copy表的主键是书名,你不能插入两个主键一模一样的数据呀!

为止,搞定了为表定义主键的操作+插入数据的演示吧!

1.2  主键是复合主键的情况

那就再创建一个表吧,来学习一下如何创建复合主键的表格吧!!

CREATE TABLE course (    学号   varchar(6)  NOT NULL,    姓名   varchar(8)  NOT NULL,    毕业日期 date    NOT NULL,    课程号 varchar(3) ,    学分 tinyint ,    PRIMARY  KEY (学号, 课程号, 毕业日期) );

看一下是否创建成功呢?如何查看呢?

按照上例子,是否能够验证一下复合主键的效果!

INSERT INTO course VALUES ('111111', '张三','2020-07-01','C语言',3);INSERT INTO course VALUES ('111111', '张三','2020-07-01','C语言程序设计',3);

这时候,会出错,你觉得原因是什么呢?

会看错误提示了吧?--挑一个同学回答一下吧

INSERT INTO course VALUES ('111111', '张三','2020-07-01','语文',5);

验证一下有哪些数据吧!

select * from course;

那,那,如何验证复合主键呢?我们看一下,谁是复合主键呢?对,(学号, 课程号, 毕业日期)

那就再来一条

INSERT INTO course VALUES ('111111', '王五','2020-07-01','语文',5);

看能执行不?

这,就是主键的作用!

重点强调一下下!

  • 从关系模型来说,每个表必须有一个主键,但是Mysql不要求,但是规范的角度,应该为每个表定义一个主键

  • 唯一性原则   保证了一个表,不能有两个主键上一样的数据

  • 最小化规则   自己看一下教材P65 中,对这个原则的解释!

至此,主键约束搞定!




Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1