一、操作数据库
1、DDL-数据定义语言
展示/查看数据库
SHOW DATABASES;
#创建数据库
CREATE DATABASE test42;
#删除数据库
DROP DATABASE test42;
#使用数据库
USE test42;
二、创建表
#创建表#字段信息--字段名称,数据类型,约束条件(属性) 主键,COMMENT字段说明CREATE TABLE `subject`(subjectNo INT(4) NOT NULL PRIMARY KEY COMMENT'课程编号',subjectName VARCHAR(50) COMMENT'课程名称',classHour INT(4) COMMENT'学时',gradeID INT(4) COMMENT'年级编号') AUTO_INCREMENT = 1 COMMENT'课程表';
CREATE TABLE result1(studentNo INT(4) NOT NULL COMMENT'学号',subjectNo INT(4) NOT NULL COMMENT'课程编号',examDate TIMESTAMP DEFAULT NOW() NOT NULL COMMENT'考试日期',studentResult INT(4) NOT NULL COMMENT'考试成绩')COMMENT'成绩表';#删除DROP TABLE student;CREATE TABLE student(studentNo INT(4) NOT NULL COMMENT'学号',loginPwd VARCHAR(20) NOT NULL COMMENT'密码',studentName VARCHAR(50) NOT NULL COMMENT'姓名',sex CHAR(2) NOT NULL DEFAULT'男' COMMENT'性别',gradeID INT(4) UNSIGNED COMMENT'年级编号',phone VARCHAR(50) COMMENT'电话',address VARCHAR(255) COMMENT'地址',birthdy DATETIME COMMENT'出生日期',email VARCHAR(50) COMMENT'邮件账号',identityCard VARCHAR(18) UNIQUE KEY COMMENT'身份证号',PRIMARY KEY(studentNo)) COMMENT'学生表';CREATE TABLE grade(gradeID INT(4) NOT NULL PRIMARY KEY COMMENT'年级编号',gradeName VARCHAR(50) NOT NULL COMMENT'年级名称')AUTO_INCREMENT =1 COMMENT'年级表';
三、修改表
#修改表#修改表名ALTER TABLE student RENAME AS student1;#添加字段ALTER TABLE student1 ADD s1 VARCHAR(30);#查看表DESC student1;#修改字段ALTER TABLE student1 CHANGE s1 s2 INT;#删除字段ALTER TABLE student1 DROP s2;ALTER TABLE student1 RENAME AS student;#删除表---drop table 表名
四、课后作业—图书馆四个表
CREATE DATABASE Library;DROP TABLE book;CREATE TABLE book(bId VARCHAR(50) NOT NULL PRIMARY KEY COMMENT'图书编号',bName VARCHAR(50) NOT NULL COMMENT'图书书名',author VARCHAR(50) COMMENT'作者姓名',pubComp VARCHAR(50) COMMENT'出版社',pubDate TIMESTAMP COMMENT'出版日期',bCount INT(18) COMMENT'现存数量',price FLOAT COMMENT'单价')COMMENT'图书信息表';DROP TABLE reader;CREATE TABLE reader(rId VARCHAR(50) NOT NULL PRIMARY KEY COMMENT'读者编号',rName VARCHAR(50) NOT NULL COMMENT'读者姓名',lendNum INT COMMENT'已借图书量',rAddress VARCHAR(50) COMMENT'联系地址')COMMENT'读者信息表';DROP TABLE borrow;CREATE TABLE borrow(rId VARCHAR(50) NOT NULL COMMENT'读者编号',bId VARCHAR(50) NOT NULL COMMENT'图书编号',lendDate TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT'借阅日期',willDate TIMESTAMP COMMENT'应归还日期',returnDate TIMESTAMP COMMENT'实际归还日期',PRIMARY KEY(rId,bId,lendDate))COMMENT'图书借阅表';DROP TABLE penalty;CREATE TABLE penalty(rId VARCHAR(50) NOT NULL COMMENT'读者编号',bId VARCHAR(50) NOT NULL COMMENT'图书编号',pDate TIMESTAMP NOT NULL COMMENT'罚款日期',pType DECIMAL(1,0) COMMENT'罚款类型,1-延期,2-损坏,3-丢失',amount FLOAT COMMENT'罚款金额',PRIMARY KEY(rId,bId,pDate))COMMENT'罚款记录表';
五、数据库设计的三大范式
数据库设计的三大范式通俗解释
一、三大范式通俗解释:
(1)简单归纳:
第一范式(1NF):字段不可分;
第二范式(2NF):有主键,非主键字段依赖主键;
第三范式(3NF):非主键字段不能相互依赖。
(2)解释:
1NF:原子性。 字段不可再分,否则就不是关系数据库;;
2NF:唯一性 。一个表只说明一个事物;
3NF:每列都与主键有直接关系,不存在传递依赖。
二、例子说明
(1)不符合第一字段的例子
表:字段1, 字段2(字段2.1,字段2.2),
字段3字段2可以拆分成字段2.1和字段2.2,不符合第一范式。
(2)不符合第二范式的例子
表:学号, 姓名, 年龄, 课程名称, 成绩, 学分
这个表明显说明了两个事务:学生信息, 课程信息。
1)存在以下问题:
a、数据冗余:每条记录都含有相同信息;
b、删除异常:删除所有学生成绩,就把课程信息全删除了;
c、插入异常:学生未选课,无法记录进数据库;
d、更新异常:调整课程学分,所有行都调整。
2)修正:
学生表:学号, 姓名, 年龄
课程表:课程名称,学分
选课关系表:学号, 课程名称, 成绩
(3)不符合第三范式的例子
表:学号, 姓名, 年龄, 所在学院, 学院联系电话
其中关键字为单一关键字”学号”。存在依赖传递::(学号) → (所在学院) → (学院联系电话) 。
1)存在问题::
a、数据冗余:有重复值;
b、更新异常:有重复的冗余信息,修改时需要同时修改多条记录,否则会出现数据不一致的情况
c、删除异常
2)修正:
学生表:学号, 姓名, 年龄, 所在学院;
学院表:学院, 电话
