数据库基础
1.数据库技术的发展
数据库技术是应数据管理任务的需求而产生的,先后经历了人工管理、文件系统、 数据库系统等3个阶段。
1.人工管理阶段(20世纪50年代中期以前) 数据不保存、使用应用程序管理数据、数据不共享、数据不具有独立性
2.文件系统阶段(50年代后期到60年代中期) 数据可以长期保存、由文件系统管理数据、共享性差,数据冗余大、数据 独立性差
3.数据库系统阶段(60年代至今) 由数据库系统统一管理数据、满足多用户多应用共享数据
1.1什么是数据
描述事物的符号称为“数据”,数据 是数据库中存储的基本对象。描写 事物的符号有多种形式,可以是数 字、文字、图形、图像和声音,但 它们都是经过数字化后存入计算机的。
1.2数据的特点
数据与其语义是不可分的。
1.3什么是数据库
数据库可直观地理解为存放数据的仓库。 数据则是被长期存放在计算器内、有组织的、 可以表现为多种形式的可共享的数据集合。
数据库技术使数据能按一定格式组织、描 述和存储,且具有较小的冗余度、较高的 数据独立性和易扩展性,并可为多个用户 共享。
MySQL是目前最为流行的开放源码的数据库管理 系统,是完全网络化的跨平台的关系型数据库系统,它是由 瑞典的MySQL AB公司开发的,由MySQL的初始开发人员 David Axmark和Michael “Monty” Widenius于1995年建立,目前属于Oracle公司。它的象征符号是一 只名为Sakila的海豚,代表着MySQL数据库和团队的速度、 能力、精确和优秀本质。 除了具有许多其他数据库所不具备 的功能和选择之外,MySQL数据库还是一种完全免费的产品, 用户可以直接从网上下载使用,而不必支付任何费用。
1.4MySQL的优势
MySQL是一款自由软件。任何人都可以从MySQL的官方网站下载该软件。
MySQL是一个真正的多用户、多线程SQL数据库服务器。
MySQL能够快捷、有效和安全的处理大量的数据。相对于Oracle等数据库来说, MySQL在使用时非常简单。MySQL主要目标是快捷、便捷和易用。
1.5什么是MySQL数据库
数据库(Database)就是一个存储数据的仓库。为了方便数据的存储和管理,它 将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效地组织和管理 存 储 在 数 据 库 中 的 数 据 。 M y S Q L 就 是 这 样 的 一 个 关 系 型 数 据 库 管 理 系 统 (RDBMS),它可以称得上是目前运行速度最快的SQL语言数据库管理系统。
RDBMS 即关系数据库管理系统(Relational Database Management System)的 特点
1.数据以表格的形式出现
2.每行为各种记录名称
3.每列为记录名称所对应的数据域
4.许多的行和列组成一张表单
5.若干的表单组成database
1.6数据库常用的对象
在MySQL的数据库中,表、视图、存储过程和索引等具体存储数据或对数据进行操 作的实体都被称为数据库对象。下面介绍几种常用的数据库对象。
表
表是包含数据库中所有数据的数据库对象,由行和列组成,用于组织和存储数据。
字段
表中每列称为一个字段。
索引
索引是一个单独的、物理的数据库结构。它是依赖于表建立的,在数据库中索引使数 据库程序无须对整个表进行扫描,就可以在其中找到所需的数据。
视图
视图是从一张或多张表中导出的表(也称虚拟表),是用户查看数据表中数据的一种 方式。
存储过程
存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集合(包 含查询、插入、删除和更新等操作)。
通过CREATE DATABASE语句创建基本数据库
通过CREATE DATABASE语句创建一个名称为db_admin的数据库
创建数据库前判断是否存在同名数据库 create database if not esists db_admin
在MySQL中,不允许同一系统中存在两个相同名称的数据库,如果要创建的数据 库名称已经存在,那么系统将给出以下错误信息: ERROR 1007 (HY000): Can’t create database ‘db_test’; database exists
查看数据库 show databases;
成功创建数据库后,可以使用SHOW命令查看MySQL服务器中的所有数据库信息。 语法如下: SHOW {DATABASES|SCHEMAS} [LIKE ‘模式’ WHERE 条件] ;
选择数据库 use db_admin;
在MySQL中,使用CREATE DATABASE语句创建数据库后,该数据库并不会自动 成为当前数据库。如果想让它成为当前数据库,需要使用MySQL提供的USE语句来 实现,USE语句可以实现选择一个数据库,使其成为当前数据库。只有使用USE语句 指定某个数据库为当前数据后,才能对该数据库及其存储的数据对象执行操作。 USE语句的语法格式如下: USE 数据库名;
删除数据库 drop database db_admin;
在MySQL中,可以通过使用DROP DATABASE语句或者DROP SCHEMA语句来 删除已经存在的数据库。使用该命令删除数据库的同时,该数据库中的表,以及表中 的数据也将永久删除,因此,在使用该语句删除数据库时,一定要小心,以免误删除 有用的数据库。
DROP DATABASE或者DROP SCHEMA语句的语法格式如下: DROP {DATABASE|SCHEMA} [IF EXISTS] 数据库名;
当我们使用上面的命令删除数据库,如果指定的数据库不存在,将产生如图所示的异常信息。
为了解决这一问题,可以在DROP DATABASE语句中使用IF EXISTS从句来保证 只有当数据库存在时才执行删除数据库的操作。
使用SHOW COLUMNS语句查看
在MySQL中,使用SHOW COLUMNS语句可以查看表结构,SHOW COLUMNS 语句的基本语法格式如下: SHOW [FULL] COLUMNS FROM 数据表名 [FROM 数据库名]; 或SHOW [FULL] COLUMNS FROM 数据库名.数据表名;
使用DESCRIBE语句查看
在MySQL中,还可以使用DESCRIBE语句查看数据表结构。DESCRIBE语句的基 本语法格式如下: DESCRIBE 数据表名; 其中,DESCRIBE可以简写成DESC。在查看表结构时,也可以只列出某一列的信 息。其语法格式如下: DESCRIBE 数据表名 列名;
添加新字段及修改字段定义
在MySQL的ALTER TABLE语句中,可以通过使用ADD [COLUMN] create_definition [FIRST | AFTER column_name ]子句来添加新字段;使用 MODIFY [COLUMN] create_definition子句可以修改已定义字段的定义。下面将 通过一个具体实例演示如何为一个已有表添加新字段,并修改已有字段的字段定义。
修改字段名
在MySQL的ALTER TABLE语句中,使用CHANGE [COLUMN] old_col_name create_definition子句可以修改字段名或者字段类型。下面将 通过一个具体实例演示如何修改字段名。
删除字段
在MySQL的ALTER TABLE中,使用DROP [COLUMN] col_name子句可以删除指定字段。下面将通过一个具体实例演示如何删除 字段。
修改表名
在MySQL的ALTER TABLE中,使用RENAME [AS] new_tbl_name子 句可以修改表名。下面将通过一个具体实例演示如何修改表名。
重命名表
在MySQL中,重命名数据表可以使用RENAME TABLE语句来实现。 RENAME TABLE语句的基本语法格式如下: RENAME TABLE 数据表名1 To 数据表名2
复制表
创建表的CREATE TABLE命令还有另外一种语法结构,在一张已经存在的数据表 的基础上创建一份该表的拷贝,也就是复制表。 这种用法的语法格式如下: CREATE TABLE [IF NOT EXISTS] 数据表名 {LIKE 源数据表名 | (LIKE 源数据表名)}
删除表
删除数据表的操作很简单,同删除数据库的操作类似,使用DROP TABLE语句即可 实现。 DROP TABLE语句的基本语法格式如下: DROP TABLE [IF EXISTS] 数据表名;
插入数据
在建立一个空的数据库和数据表时,首先需要考虑的是如何向数据表中添 加数据,该操作可以使用INSERT语句来完成。使用INSERT语句可以向一个已有数 据表插一个新行,也就插入一行新记录。在MySQL中,INSERT语句有3种语法格 式,分别是INSERT… VALUES语句、INSERT… SET语句和INSERT… SELECT 语句。
使用INSERT… VALUES语句插入数据
使用INSERT… VALUES语句插入数据,是INSERT语句的最常用的语法格式。它 的语法格式如下: insert into 表名[(字段名1,字段名2,…)] values(值1,值2,…);
插入一条完整数据
INSERT INTO tb_user VALUES(1,‘zhangsan’,‘123456’,now()); SELECT * FROM tb_user;
插入数据记录的一部分
INSERT INTO tb_user (username,password) VALUES(‘rjkflm’,‘111’); SELECT * FROM tb_user;
插入多条数据
INSERT INTO tb_user (username,password,createtime) VALUES(‘mrbccd’,‘111’, ‘2019-09-05 10:35:26’) ,( ‘mingri’,‘111’, ‘2019-09-05 10:45:27’) ,( ‘mingrisoft’,‘111’, ‘2019-09-05 10:55:28’); SELECT * FROM tb_user;
使用INSERT… SET语句插入数据
在MySQL中,除了使用INSERT… VALUES语句可以插入数据外,还可以使用 INSERT… SET语句插入数据。这种语法格式用于通过直接给表中的某些字段指定对 应的值来实现插入指定数据,对于未指定值的字段将采用默认值进行添加。 INSERT… SET语句的语法格式如下: INSERT INTO 数据表名 SET 字段名1=值,字段名2=值2,… INSERT INTO tb_user SET username =‘mrbccd’,password=‘111’;
插入查询结果
在 M y S Q L 中 , 支 持 将 查 询 结 果 插 入 到 指 定 的 数 据 表 中 , 这 可 以 通 过 INSERT…SELECT语句来实现。 INSERT [INTO] 数据表1 [(字段名,…)] SELECT 列名1,列名2… FROM 数据表2;
创建数据表时给字段设置默认值
在字段名和类型后面,加上:default 默认值
创建数据表时加入约束
什么是约束?实际上是对表中数据的限制条件
设计表时加入约束的目的?保证表中数据的完整和有效
非空约束(not null)
作用:not null约束的字段不能为 NULL 值,必须赋予具体数据
唯一性约束(unique)
作用:unique约束的字段具有唯一性,不可重复
注意:unique约束的字段不能重复,但是可以为NULL,NULL不是一个值,也不能 用等号比较
组合使用 not null 和 unique
被 not null 和 unique 约束的字段,该字段即不能为null 也不能重复
主键约束PK(primary key)
添加主键primary key的字段即不能重复也不能为空,效果与“not null unique”相同,但本质是不同的,添加主键约束之后,主键不仅会有“not null unique”作用,而且主键字段还会自动添加“索引 — index”
主键根据个数分类:单一主键、复合主键
MySQL中自动生成主键值(MySQL特有)
MySQL数据库管理系统中提供了一个自增数字auto_increment,专门用来自 动生成主键值,主键值不需要用户去维护,也不需要用户生成,MySQL会自动生成。 自增数字默认从1开始,以1递增:1、2、3、4、…
外键约束FK(foreign key)
外键是相对于主键说的,是建立表之间的联系的必须的前提
外键根据个数分为:单一外键、复合外键
外键可以使得两张表关联,保证数据的一致性和实现一些级联操作
例:设计数据库表用来存储学生和班级信息 学生表t_student包含:sno,sname,classno,cname 学生信息和班级信息之间的关系:一个班级对应多个学生,典型的一对多关系
结论(classno值必须来自cno)
为了保证 t_student 表中的 classno 字段中 的数据必须来自 t_class表中的 cno 字段中数据,有必要给 t_student 表中 classno 字段添加外键约束;classno 称为外键字段,classno 中的100、200、 300称为外键值,classno在这里是单一外键;
注意
1、外键字段可以为NULL,外键为空的数据也叫孤儿数据;
2、被引用字段必须具有unique约束;
3、有了外键引用之后,表分为父表和子表,以上父表:班级表 t_class; 子表是: 学生表 t_student;删除表时先删除子表,再删除父表;插入数据时,先插入父表 数据再插入子表数据;
修改数据
要执行修改的操作可以使用UPDATE语句,语法如下: UPDATE 表名 SET 字段名 = 字段值,字段名 = 字段值 WHERE 条件; 注意:update如果没有条件限制,将把整张表的数据全部更新 UPDATE tb_user SET password=‘123’ WHERE username=‘mrbccd’;
UPDATE tb_user SET password=‘123’ ;
删除数据
在数据库中,有些数据已经失去意义或者错误时就需要将它们删除,在 MySQL中,可以使用DELETE语句或者TRUNCATE TABLE语句删除表中的一行或 多行数据.
通过DELETE语句删除数据
通过DELETE语句删除数据的基本语法格式
DELETE FROM 表名 WHERE 条件限制;
DELETE FROM tb_user WHERE username=‘abs’;
DELETE FROM tb_user_bak;
注意:若没有条件限制,会将表中所有记录全部删除;
通过TRUNCATE TABLE语句删除数据
在删除数据时,如果要从表中删除所有的行,通过TRUNCATE TABLE语句删除数 据的基本语法格式
TRUNCATE [TABLE] 数据表名
数据库的备份与还原
使用 mysqldump命令实现数据备份,mysqldump命令可以将数据库中的数据备份 成一个文本文件。表的结构和表中的数据将存储在生成的文本文件中。
备份整个数据库
mysqldump -uroot -p db_admin > db_admin.sql
备份数据库中的一张表
mysqldump -uroot -p db_admin tb_admin > db_admin.tb_admin.sql
使用 source 命令导入数据备份
连接到数据库
create database test4;
use test4;
source c:/xampp/db_admin.sql
SQL
是用于访问和处理数据库的标准的计算机语言
数据库查询语言(DQL) 简称:DQL,Data Query Language
代表关键字:select
数据库操作语言(DML) 简称:DML,Data Manipulation Language
代表关键字:insert、delete 、update 增、删、改表中的数据
数据库定义语言(DDL) 简称:DDL,Data Denifition Language
代表关键字:create、drop、alter 创建、删除、修改表的结构
关系型数据库
关系模型
以二维表来描述数据。关系模型中,每个表 有多个字段列和记录行,每个字段列有固定的属性(数 字、字符、日期等)。关系模型数据结构简单、清晰、 具有很高的数据独立性,因此是目前主流的数据库数据 模型。
关系型数据库
按照一定的数据结构(数据结构是指数 据的组织形式或数据之间的联系)来进行数据的组织与 存储。
列(字段)
每个字段都包含字段名称、字段数据类型、字段约束、字段长度
行(记录)
表中的数据是按行(记录)存储的,表里可以有0条或多条记录 主键:由列构成,表中的每一行通常都有一个标识,主键可以由一个字段或多个字 段构成,一个字段构成的主键称为单一主键,多给字段构成的主键称为复合主键, 主键通常是不能修改的
非关系型数据库
NoSQL,泛指非关系型的数据库。特点是易扩展,NoSQL数据库种类繁多,但是 一个共同的特点都是去掉关系数据库的关系型特性。NoSQL数据库的产生就是为 了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
实体与关系
实体是指客观存在并可相互区别的事物。实体既可以是实际的事物,也可以是抽 象的概念或关系。 实体之间有3种关系:
一对一关系:是指表A中的一条记录确实在表B中有且只有一条相匹配的记录。 在一对一关系中,大部分相关信息都在一个表中。
一对多关系:是指表A中的行可以在表B中有许多匹配行,但是表B中的行只能在 表A中有一个匹配行。
多对多关系:是指关系中每个表的行在相关表中具有多个匹配行。在数据库中, 多对多关系的建立是依靠第3个表(称作连接表)实现的,连接表包含相关的两 个表的主键列,然后从两个相关表的主键列分别创建与连接表中的匹配列的关系。
现实与数据结构件的桥梁E-R
E-R图也称实体-联系图(Entity Relationship Diagram)
矩形框”表示实体型,矩形框内写明实体名称
“椭圆图框”或圆角矩形表示实体的属性
菱形框:表示联系,在框中记入联 系名,并用“实心线段”将其与相应 关系的“实体型”连接起来
一对一联系,在两个实体连线方向各 写1
一对多联系,在一的一方写1,多的一 方写N
多对多关系,则要在两个实体连线方向各写N,M
算术运算符
算术运算符是MySQL中最常用的一类运算符。MySQL支持的算术运算符包括: 加、减、乘、除、求余。
例:使用算术运算符对数据表tb_book1中的row字段值进行加、减、乘、除运算
use db_database07;
select row,row+row,row-row,row*row,row/row from tb_book1;
比较运算符
比较运算符是查询数据时最常用的一类运算符。SELECT语句中的条件语句 经常要使用比较运算符。通过这些比较运算符,可以判断表中的哪些记录是符合条件的。
逻辑运算符
逻辑运算符用来判断表达式的真假。如果表达式是真,结果返回1。如果表达式是假, 结果返回0。逻辑运算符又称为布尔运算符。MySQL中支持4种逻辑运算符,分别是与、 或、非和异或。
位运算符
位运算符是在二进制数上进行计算的运算符。位运算会先将操作数变成二进制数,进 行位运算。然后再将计算结果从二进制数变回十进制数。MySQL中支持6种位运算符。 分别是:按位与、按位或、按位取反、按位异或、按位左移和按位右移。
运算符的优先级
由于在实际应用中可能需要同时使用多个运算符。这就必须考虑运算符的运算顺序。 正所谓:闻道有先后,术业有专攻。