数据库基础
-
数据(DATA)
数据库中存储的基本对象
图形符号、数字、字母等 -
数据库(DB-Data Base)
长期存储在计算机内的、有组织的、可共享的数据集合
数据库中的数据按照一定的数据模型组织、描述和 存储
具有较小的冗余度、较高的数据独立性和易扩展性,并可为各个用户共享。 -
DBMS(Data Base Manage System)
位于应用程序与存储数据之间的一层数据管理软件。
是管理数据库的软件
科学的组织和存储数据;高效的获取和处理数据。
四方面的功能
1)数据库的定义功能
在SQL语言中,DDL语言,提供了三个语句:创建(create)、修改(aflter)、删除(drop),操作的对象是数据库中的基本架构一致。
虽然数据库中村粗的是各种各样的数据,但是数据是以表的形式来组织和存放的。
2)数据库的操作功能
借助于DML语言(数据库操作语言),实现对数据库中的数据进行增删改查的操作(insert,delete,update,select)
3)数据库保护功能
保护数据的完整性和安全性
4)数据库的维护功能
数据库中的表结构和数据的维护功能。 -
数据库系统(DBS)
数据库系统(DBS)= 数据库管理系统(DBMS)+数据库(DB)+应用系统+数据库管理员(DBA Data BaseAdministrator)+用户 -
信息的三种世界
1、现实世界
存在于人脑之外的而客观世界
2、信息世界
现实世界在人脑中的反映,又称观念世界
3、数据世界
将信息世界中的信息数据化对应的产物,就是将信息世界中的信息经过抽象和组织,按照特定的数据结构,将数据存储在计算机中。 -
实体-联系模型
实体:客观事物在信息世界中被称为实体(Entity)。
属性:描述实体的数据项
联系:描述实体之间的关系。实体之间的联系:一对一;一对多;多对多。 -
关系模型
一个关系就是一张表,没有重复行、重复列的二维表,每个关系都有一关系名。
元组(记录):二维表中的每一行在关系中称为元组。
属性(字段):二维表的每一列在关系中称为属性,每个属性都有一个属性名(字段名),属性值则是各个元组属性的取值。
域:属性的取值范围
关键字:能唯一区分元组的属性或属性组合。要求:唯一、不重复、不能为空。
关系模式:关系名(属性1,属性2,属性3……属性10)
关系模型的特征
1)关系必须规范化,属性不可再分
2)在同一个关系中,属性名不能重复
3)在同一个关系中,元组和属性的顺序可以是任意的 -
关系运算
1)选择:从关系模型中找出满足给定条件的元组组成新的关系
从行的角度
2)投影:从关系模式中指定若干属性组成新的关系(从列的角度进行的运算)
3)连接:笛卡尔积
- MySQL支持的数据类型
整数首选Int
浮点数首选decimal(总长度,小数位):decimal(5,2) 数据总长度5位,其中小数位2位。 - 时间和日期类型
datetime : YYYY-MM-DD HH:MM:SS (年-月-日 时:分:秒)
date: YYYY-MM-DD (年-月-日) - 字符串数据类型
char:定长
varchar:变长
char(10)—tom 只用了3个字符,剩下的7个字符会用空格填充
varchar(10)–tom 用了3个,剩下的7个字符空间会释放出来 - 数据库建表表达方式和原则
create table 表名(
属性1(列名1) 数据类型 [约束条件],
属性2 数据类型 [约束条件],
属性3 数据类型 [约束条件]
);
最后一个属性没有逗号!!! - 删除表
drop table 表名;
删除多张表 drop table 表名1,表名2,……表名N; - 修改表结构
1)添加列:
alter table 表名 add 列名 数据类型;
eg: alter table student add 专业 varchar(7);
alter table student add 血型 char(1);
错误:1060 - Duplicate column name ‘专业’–重复列名
2)删除列
alter table 表名 drop 属性名
eg: alter table student drop 血型;
3)改属性(列名)的数据类型
alter table 表名 modify 属性名 数据类型;
eg: alter table student modify 学号 int;
4)修改属性的名字
alter table 表名 change 旧属性名 新属性名 数据类型;
eg: alter table student change 姓名 name varchar(8);
5)–显示表结构
desc 表名;
desc student;
- 命令练习
show databases;
–创建数据库“MyDB”
create database MyDB;
–转换到mydb数据库
use mydb;
–创建“student”表
create table student(
学号 varchar(10),
姓名 varchar(10),
年龄 int,
性别 char(2)
);
–创建“员工信息表”
create table 员工信息表(
姓名 varchar(10),
性别 char(2),
入职日期 datetime,
工资 decimal(7,2)
);
–插入列
alter table student add 专业 varchar(7);
alter table student add 血型 char(1);
–删除列
alter table student drop 血型;
–修改属性的数据类型
alter table student modify 学号 int;
–修改属性名
alter table 表名 change 旧属性名 新属性名 数据类型;
alter table student change 姓名 name varchar(8);
–显示表结构
desc 表名;
desc student;
- 实体完整性
-实体完整性是对关系中的记录唯一性
-定义表中所有性能唯一的标识
-表中主属性(字段)不能为null且不呢个有相同值
-一般用主键、唯一索引、unique关键字来实现
主键约束:唯一、不重复、不为空 primary key
1、创建表的同时创建主键约束
1)格式一
create table 表名(
属性1 数据类型 primary key,
属性2 数据类型,
……
属性N 数据类型
);
2)格式二
主键约束名字的写法:PK_列名
create table 表名(
属性1 数据类型 primary key,
属性2 数据类型,
……
属性N 数据类型,
constraint 主键约束的名字 primary key(列名)
);
3)格式三
create table 表名(
属性1 数据类型 primary key,
属性2 数据类型,
……
属性N 数据类型,
primary key(列名)
);
2、针对已存在的表添主键约束
1)alter table 表名 modify 列名 数据类型 primary key;
2)alter table 表名 add primary key(列名);
3)alter table 表名 add constraint 主键约束的名字 primary key(列名);
alter table 表名 drop primary key;
3、删除主键约束
alter table 表名 drop primary key;
-
联合主键
把两个列看成一个整体:唯一、不重复、不为空
1、创建表的时候创建联合主键
1)create table 表名(
属性1 数据类型,
属性2 数据类型,
……
primary key(属性1,属性2)
);
2)create table 表名(
属性1 数据类型,
属性2 数据类型,
……
constraint 主键约束名 primary key(属性1,属性2)
//constraint PK_列名 primary key(列名1,列名2)
);
2、已存在的表
alter table 表名 add constraint 主键约束的名字 primary key(属性1,属性2); -
唯一约束(唯一、不重复、可以为空)
1)唯一约束是指table的列或者列的组合不能重复,保证数据的唯一性
2)不允许出现重复的值,但是可以为多个null
3)同一个表可以有多个唯一约束,多个列组合的约束
4)如果不给唯一约束名称,就默认和列名相同
5)MySQL会给唯一约束的列上默认创建一个唯一索引 -
唯一约束的写法
1)在创建表的时候创建唯一约束
格式一:
create table 表名(
属性1 数据类型,
属性2 数据类型,
……
属性N 数据类型
constraint 唯一约束名字 unique(列名)
//唯一约束名字可以是UN_属性名
);
格式二:
create table 表名(
属性1 数据类型,
属性2 数据类型 unique,
属性3 数据类型 unique,
……
属性N 数据类型
);
2)已存在的表
alter table 表名 add 【costraint 约束的名字】 unique(列名);
【】里不写的话 默认的约束名字就是列名。
eg:alter table 会员表 add constraint UN_积分 unique(会员积分);
alter table 会员表 add unique(会员积分);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6B3QGhhq-1602229817842)(htt7ps://img-blog.csdnimg.cn/20201008202444509.png#pic_center)]
- 域完整性
域完整性是对数据表中的字段属性的约束
它是由确定表结构时所定义的字段的属性决定的
限制数据类型,缺省值,规则,约束,是否可以为空
域完整性可以确保不会输入无效的值
1、默认约束:default
作用:当default来修饰某个列的时候,修饰的列即使不写数据也会有一个默认的值的。
1)创建表时同时创建默认约束
格式:
create table表名(
属性1 数据类型 default ‘字符串类型或者日期类型加单引号,数字直接写’ ,
属性2 数据类型 default 数字,
……
);
2)已经存在的表
alter table 表名 modify 列名 数据类型 default ‘值’;
2、删除默认约束
alter table 表名 modify 列名 数据类型;
- 非空约束
当前列不能为空
1、在创建表的时候同时创建非空约束
create table表名(
属性1 数据类型 not null,
属性2 数据类型 not null,
…
属性N 数据类型 not null
);
2、已存在的表,添加非空约束
alter table 表名 modify 列名 数据类型 not null;
3、删除非空约束
alter table student modify 列名 数据类型; - 参照完整性
指表与表之间的数据参照引用
使用外键约束来实现
1、创建表的时候同时创建外键约束
主表(接下来再建表的时候要参照的表)
create table 表名(
属性1 数据类型 primary key,
属性2 数据类型,
……
);
从表(外键约束在从表上创建)
create table 表名(
属性1 数据类型,
属性2 数据类型,
……
constraint 外键约束的名字 foreign key(从表列名1) references 主表表名(列名1)
);
例:主表 stu varchar(10)
从表 学号 varchar(10)
两个属性的的属性名不一样,但是数据类型都是varchar(10),存储的都是学号。
2、给已存在的表添加外键约束
alter table 表名 add constraint 外键约束名字 foreign key(列名) references 主表(列名);
3、删除外键约束
alter table 表名 drop foreign key 外键约束名字
- 注意
关于引用的列要求,从表的列和主表的列,列名可以不一样,但是两个列的数据类型和内容要一致。
从表引用主表的列必须有主键约束或者唯一约束。
主表的数据被从表引用时,主表无法删除该数据。
当从表要对数据进行操作时,征求主表的意见,主表有的,允许从表进行操作,主表没有的,拒绝从表进行操作。
练习:
create table Teacher(
Tno varchar(7) primary key,
Tname varchar(10) not null,
Tsex varchar(4),
Birthday datetime,
Dept varchar(20),
Sid char(18)
);
– 注意这里因为编码格式没有改成uf8所以失败了。
alter table Teacher modify Tsex char(2) default’男’;
alter table Teacher modify Tsex char(2);