数据库的建表原则和方式

因为之前已经有过一些Java后端的基础了,所以现在这个笔记从MySQL学习开始记录。

操作命令作用
show databases查看已有的数据库
create database + 数据库名字创建一个空数据库

1. 数据库的建表原则和方式

这一节的学习目标:

  1. 掌握基本功能的操作命令
  2. 会创建表
  3. 掌握表中字段的数据类型
  4. 理解完整性的概念
  5. 会创建完整性约束

关系型数据库——数据的逻辑结构

  • 从用户的角度,关系模型中数据的逻辑结构是一张二维表
  • 表是关系数据库的基本存储单位
  • 现实中每一个对象都抽象为表来进行存储

image-20200731142422887

基本概念
记录:

  • 表中的一行称为一个记录。一个记录的内容是描述一类事物中的一个具体事物的一组数据,如一个雇员的编号、姓名、工资数目

字段:

  • 表中的一列称为一个字段。每个字段表示表中所描述的对象的一个属性。
  • 每个字段都有相对应的描述描述信息,如字段名、数据类型、数据宽度、数值型数据的小数位等

表的创建语法
Create table 表名(
属性名 数据类型 [约束条件],
属性名 数据类型 [约束条件],
属性名 数据类型 [约束条件]
);

  • []中括号中的内容是可选内容
  • 最后一个属性后没有逗号

实例:创建一张表
创建第一张表:student(包含学号、姓名、年龄、性别属性)
image-20200731151753534

可以看到,上面使用的关键字中含有INT、VARCHAR关键字,这些关键字在MySQL中代表不同的数据类型,那么MySQL支持哪些数据类型呢?

MySQL数据类型分类

  • 数值
  • 字符串(字符)类型

image-20200731152419920

日期和时间类型

  • 日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR

  • 每个时间类型有一个有效值范围和一个“零”值,当指定不合法的MySQL不能表示的值时使用“零”值

    image-20200731152838372

字符串类型

  • 字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET
  • CHAR和VARCHAR类型类似,但它们保存和检索的方式不同
  • BINARY和VARBINARY类似于CHAR和VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串
  • BLOB是一个二进制大对象,可以容纳可变数量的数据。有4中BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGLOB。
  • 有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT

image-20200731153533634

数据的完整性
数据的完整性指存在数据库中的数据应该保持准确性和可靠性。如出现学号相同的数据就是不准确的。
完整性分为四大类:

  • 实体完整性
  • 域完整性
  • 参照完整性
  • 自定义完整性
  • 实体完整性、域完整性及参照完整性分别在行、列、表上实施

实体完整性(行)

  • 实体完整性是对关系中的记录唯一性
  • 定义表中的所有行能唯一的标识
  • 表中主属性(字段)不能为Null且不能有相同值
  • 一般用主键、唯一索引、unique关键字来实现

实体完整性——主键约束

  • 主关键字(primary key)是表中的一个或多个字段,它的值用于唯一地识别表中某一条记录
  • 创建表时指定主键

添加主键约束
image-20200731214524049

思考:以上时添加主键约束的三个方法,其中方法二中为主键约束添加了名字。方法一、二分别时在创建字段以及创建字段后建立主键约束。
创建实例:
image-20200731215108058

修改主键约束
image-20200731215931469
操作实例:
image-20200731220245154

实体完整性——唯一约束

  • 唯一约束是指定table的列或列组合不能重复,保证数据的唯一性
  • 唯一约束不允许出现重复的值,但是可以为多个Null
  • 同一个表可以有多个唯一约束,多个列组合的约束
  • 如果不给唯一约束名称,就默认和列名相同
  • MySQL会给唯一约束的列上默认创建一个唯一的索引
create table temp(
id int not null,
name varchar(25)
constraint uk_name_pwd nuique(name,password)
);
alter table temp add nuique(name,password);--添加唯一约束
alter table temp modify name varchar(25)
nuique;--修改唯一约束
alter table temp drop index name;--删除约束

推荐不要使用CONSTRAINT关键字,因为不填写的情况下,MySQL默认使用列名作为唯一约束名字
思考:当使用NOT NULL关键字的时候,等效于给变量提供非空约束;
当使用UNIQUE关键字的时候,等效于给变量提供唯一约束。
因此需要唯一、非空约束的时候,需要同时包含NOT NULL UNIQUE关键字。

操作实例:

--创建一张表temp,添加主键、唯一、非空约束
CREATE TABLE temp
(
id INT NOT NULL,
tname VARCHAR(20),
PRIMARY KEY(id),
CONSTRAINT uk_tname_id UNIQUE(tname,id)
);

域完整性(列)

域完整性

  • 域完整性是对数据表中字段属性的约束
  • 它是由确定表结构时所定义的字段的属性决定的
  • 限制数据类型,缺省值,规则,约束,是否可以为空
  • 域完整性可以确保不会输入无效的值

默认值约束

--添加默认约束
--1)在创建表的时候添加
CREATE TABLE t_user(user_id INT(10) DEFAULT 3);
--2)通过ALTER语句
ALTER TABLE t_user MODIFY user_id INT(10) DEFAULT 2;
--3)删除默认约束
ALTER TABLE t_user MODIFY user_id INT(10);

check约束

  • MySQL不支持check约束,但是使用时也没有错误提示

参照完整性

  • 指表与表之间的数据参照引用
  • 使用外键约束实现

外键约束

  • 外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系
  • 表的外键值必须在主表中能找到或者为空
  • 当主表的记录被从表参照时,主表的记录将不允许删除
  • 如果要删除数据,需要先删除从表中依赖该记录的数据

操作实例:

--创建两张表:class、student
--主表:
CREATE TABLE class
(
cla_id INT(6) PRIMARY KEY,
cla_name VARCHAR(30) NOT NULL UNIQUE
);
--从表:
CREATE TABLE students
(
stu_id INT(10) PRIMARY KEY,
stu_name VARCHAR(30) NOT NULL,
stu_score FLOAT(5,2) DEFAULT 0.0,
cla_id INT(10),
CONSTRAINT FK_CLA_ID FOREIGN KEY(cla_id) REFERENCES
class(cla_id)
);

思考:CONSTRAINT关键字后一般有约束名字跟随,上面的FOREIGN KEY()表示从表中的键值,REFERENCES表示该从表键值参考的自哪个主表哪个键值。

--在建立TABLE后,也可以添加外键约束:
ALTER TABLE students 
ADD CONSTRAINT FK_CLA_ID FROEIGN KEY(cla_id) REFERENCES class(cla_id);
--删除外键约束
ALTER TABLE students DROP FOREIGN KEY FK_CLA_ID;
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页