方便大家完成每一个实验,这里会将之前的实验环节1和实验环节2的内容也会拿过来做基础!以方便大家进行该次实验!同时也是对上节课实验的一个复习!希望大家能够知悉!
当然先看看数据库有哪些?别建冲突了!
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
先自己写,不要复制粘贴喔!
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表的主键是书名,你不能插入两个主键一模一样的数据呀!
为止,搞定了为表定义主键的操作+插入数据的演示吧!
那就再创建一个表吧,来学习一下如何创建复合主键的表格吧!!
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 中,对这个原则的解释!
至此,主键约束搞定!