一、数据库的历史
1、简介
数据库技术,是之前60年代开始兴起的一门信息管理自动化的新兴学科,是计算机科学中的一个重要分支。随着计算机应用的不断发展,数据处理越来越占主导地位,数据库技术的应用也越来越广泛。数据管理是数据库的核心任务,内容包括对数据的分类、组织、编码、存储、检索和维护,数据库是以一定方式储存在一起,能与多个用户共享,具有尽可能小的冗余度,与应用程序彼此独立的数据集合。
2、发展阶段
从数据管理的角度看,数据库技术到目前共经历了以下几个阶段:
- 人工管理阶段
- 文件系统阶段
- 数据库(管理)系统阶段
(1)人工管理阶段
这个时期的计算机主要用于科学计算。
从硬件看,没有磁盘等直接存取的存储设备。
从软件看,没有操作系统和管理数据的软件。
特点:
-
数据不保存
-
没有对数据进行管理的软件
-
没有文件的概念
-
一组数据对应一个程序,数据是面向应用的
(2)文件系统阶段
这个时期计算机不仅用于科学计算,而且还大量用于管理数据的阶段(从50年代后期到60年代中期)。
在硬件方面,外存储器有了磁盘等直接存取的存储设备。
在软件方面,操作系统中已经有了专门用于管理数据的软件,称为文件系统。
特点:
-
数据需要长期保存在外存上供反复使用
-
程序之间有了一定的独立性
-
文件的形式已经多样化
-
数据的存取基本上已记录为单位
(3)数据库(管理)系统阶段
从60年代后期开始,在这一阶段中,数据库中的数据不再是面向某个应用或者某个程序,而是面向整个企业(组织)或者整个应用的。
特点:
-
采用复杂的结构化数据模型
-
较高的数据独立性
-
最低的冗余度
-
数据控制功能
3、数据库的主要特点
(1)实现数据共享
-
数据共享包含所有用户可同时存取数据库中的数据,也包括用户可以用各种方式通过接口使用数据库。
(2)减少数据的冗余度
- 同文件系统相比,由于数据库实现了数据共享,从而避免了用户各自建立应用文件。
(3)数据的独立性
-
数据的独立性包括数据库中数据库的逻辑结构和应用程序相互独立,也包括数据物理结构的变化不影响数据的逻辑结构。
(4)数据实现集中控制
- 文件管理方式中,数据处于一种分散的状态,不同的用户或同一用户在不同处理中其文件之间毫无关系。利用数据库可对数据进行集中控制和管理,并通过数据模型表示各种数据的组织以及数据间的联系。
(5)数据一致性可维护性,以确保数据的安全性和可靠性
-
安全性控制:以防止数据丢失、错误更新和越权使用;
-
完整性控制:保证数据的正确性、有效性和相容性;
-
并发控制:使在同一时间周期内,允许对数据实现多路存取,又能防止用户之间的不正常交互作用;
-
故障的发现和恢复:由数据库管理系统提供一套方法,可及时发现故障和修复故障;
(6)故障恢复
-
由数据库管理系统提供一套方法,可及时发现故障和修复故障,从而防止数据被破坏。数据库系统能尽快恢复数据库系统运行时出现的故障,可能是物理上或是逻辑上的错误。比如对系统的误操作造成的数据错误等。
4、数据库类型
(1)关系型数据库
-
Oracle
-
Mysql
-
PostgreSql
-
DB2
-
Microsoft SQL server
-
MicroSoft Access
(2)非关系型数据库
-
Redis
-
Mongodb
-
Big Table
二、MYSQL数据库的安装
由于后续我们需要用到Django,所以python、mysql、Django三者有版本兼容性的问题在这里先列出来以供参考。
具体的对应关系如下:
-
Python和Django 版本对应关系图
- Mysql数据库和python关系图
根据这样的对应关系,我们可以选择如下的版本进行开发:
-
Django:(3.0以上)
-
python:(3.6以上)
-
mysql:8.0
1、mysql8.0的安装
(1)访问地址:http://www.mysql.com
(2)点击:DOWNLOADS
(3)进入,Downloads 向下滑动,到最低层,找到MySQLcommunity (GPL) Downloads,单击进入(社区版对于大部分开发者就足够使用了)
(4)找到MySQL,Community server点击进入
(5)点击 Go to Download Page 进入
(6)看到 MSI,单击本机版,431.7M 大的,进入
(7)点击No thanks, just start my download(下载时不需要登录)
(8)等待安装包下载完成后,点击安装包进行安装
(9)选择安装方式这里,按照如下图片的提示操作即可。
到这里基本就结束了,接下来我们验证是否安装成功。
(10)验证是否安装成功
- 以管理员的方式进入cmd命令行,然后输入mysql -u root -p,出现如下界面,那是因为我们还没有配置环境变量。
- 找到我们mysql下的bin的路径,默认是C:\Program Files\MySQL\MySQL Server 8.0\bin
- 复制这个路径,右击我的电脑,点击属性
- 点击高级系统设置>点击环境变量>点击Path>点击编辑
- 点击环境变量
- 在用户变量和系统变量中分别找到path变量进行配置
- 点击新建>粘贴路径>点击确定(一直点确定)
- 这时重新打开cmd命令行,验证mysql是否安装成功(下图证明已经安装成功)
- 我们在这需要通过如下命令改一下密码,为图形化工具连接数据库做准备,输入以下指令,注意在'password'替换自己设置的密码。
-
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
三、数据库图形化工具安装(sqlyog)
使用图形化工具能很好的辅助我们学习数据库。接下来我们看一下如何进行安装。
这里我们安装的是sqlyog-12.0.9-0x64的版本
安装包这里已经给大家准备好了,有需要自取
- 链接:https://pan.baidu.com/s/1Qtt0e-QY7QPOLCnYFclYHw
- 提取码:9jzk
(1)下载好之后,点击sqlyog安装包,进行安装。
这里安装很简单,直接下一步即可
勾选我同意,点击下一步
这里有需要的可以选择一下安装路径
选择简体中文,点击确定。
点击确定之后,会出现如下的界面,这时就需要注册SQLyog了,当然市面上也有很多pj方法,这里就先不多说了。
当我们注册完成之后,接下来新建一个连接,来连接我们的数据库服务
点击新建
输入一个名称
连接到我的SQL主机
这里会有一个提示,点击是就可以了
进入到如下界面就说明连接本地书库成功了
此时我们就能够在sqlyou玩转mysql数据库了。
四、数据库基础
1、创建数据库
我们可以在登陆 MySQL 服务后,使用命令创建数据库,语法如下:
CREATE DATABASE 数据库名;
2、删除数据库
使用普通用户登陆 MySQL 服务器,你可能需要特定的权限来创建或者删除 MySQL 数据库,所以我们这边使用 root 用户登录,root 用户拥有最高权限。
在删除数据库过程中,务必要十分谨慎,因为在执行删除命令后,所有数据将会消失。
语法如下:
drop database 数据库名;
3、选择数据库
在你连接到 MySQL 数据库后,可能有多个可以操作的数据库,所以你需要选择你要操作的数据库。
可以使用SQL命令来选择指定的数据库:
use 数据库名;
4、mysql数据库类型
MySQL 中定义数据字段的类型对你数据库的优化是非常重要的。
MySQL 支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。
(1)数值类型
下面的表显示了需要的每个整数类型的存储和范围。
(2)日期和时间类型
(3)字符串类型
char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。
5、mysql创建数据表
创建MySQL数据表需要以下信息:
-
表名
-
表字段
-
定义每个表字段
语法:
CREATE TABLE table_name (column_name column_type);
以下例子中我们将在数据库中创建数据表book_tbl:
CREATE TABLE book_tbl(
book_id INT AUTO_INCREMENT,
book_title VARCHAR(100) NOT NULL,
book_author VARCHAR(40) NOT NULL,
book_date DATE,
PRIMARY KEY ( book_id )
)CHARSET=utf8;
实例解析:
-
如果你希望字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。
-
AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。
-
PRIMARY KEY关键字用于定义列为主键。 可以使用多列来定义主键,列间以逗号分隔。
-
CHARSET是设置编码。
成功创建表之后,可以通过命令行查看表结构:
show tables; //查看所有的表
desc book_tbl; //查看book_tbl的结构
6、mysql删除数据表
MySQL中删除数据表是非常容易操作的,但是我们在进行删除表操作时要非常谨慎,因为执行删除命令后所有数据都会消失。
语法:以下为删除mysql数据表的通用语法
DROP TABLE 表名;
执行成功后,可以尝试查看表,会发现查询不到。
7、mysql插入数据
MySQL 表中使用 INSERT INTO 语句来插入数据。
语法:以下为向MySQL数据表插入数据通用的语法
INSERT INTO 表名 ( 字段1, 字段2,...字段N ) VALUES ( 值1, 值2,...值N );
如果数据是字符型,必须使用单引号或者双引号,如:"value"。
例如:
INSERT INTO book_tbl
(book_id, book_title, book_author, book_date)
VALUE
(1, 'python零基础', '乔治', NOW());
添加完成之后,可以通过查询语句进行查询:
select * from book_tbl;
8、mysql更新数据
如果我们需要修改或更新 MySQL 中的数据,我们可以使用 SQL UPDATE 命令来操作。
语法:以下是 UPDATE 命令修改 MySQL 数据表数据的通用 SQL 语法
UPDATE 表名 SET 字段1=new-value1, 字段2=new-value2 [WHERE 条件];
-
可以同时更新一个或者多个字段
-
你可以在 WHERE 子句中指定条件
实例:
现在有一表如下:
将修改表中book_id=1的book_author字段值
UPDATE book_tbl SET book_author='路飞' WHERE book_id=1;
可以看出字段book_author中的张三被改成了路飞,效果如下:
9、mysql删除数据
你可以使用 SQL 的 DELETE FROM 命令来删除 MySQL 数据表中的记录。
语法:以下是 SQL DELETE 语句从 MySQL 数据表中删除数据的通用语法
DELETE FROM 表名 [WHERE 条件];
-
如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
-
可以在 WHERE 子句中指定条件。
实例:
删除book_tbl表中book_id=1的记录:
DELETE FROM book_tbl WHERE book_id=1;
删除整个表:
DELETE FROM book_tbl;
10、mysql查询数据
MySQL 数据库使用SQL SELECT语句来查询数据。
语法:在MySQL数据库中查询数据通用的 SELECT 语法
SELECT 字段1,字段2,……,字段n FROM table_name [WHERE 条件] [LIMIT N]
-
查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
-
SELECT 命令可以读取一条或者多条记录。
-
可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
-
可以使用 WHERE 语句来包含条件。
-
可以使用 LIMIT 属性来设定返回的记录数。
实例:返回数据表 book_tbl 的所有记录
select * from book_tbl;
五、约束
主键、唯一键、自增长、外键、非空
1、主键
主键: primary key,主要的键,一张表只能有最多一个主键,主键请尽量使用整数类型而不是字符串类型。
主键一般为非业务数据。
(1)增加主键
SQL操作中有多种方式可以给表增加主键:
方案一:在创建表的时候,直接在字段之后,跟primary key关键字(主键本身不允许为空)
CREATE TABLE my_pril(
number INT(10) PRIMARY KEY,
NAME VARCHAR(20) NOT NULL
);
方案二:在创建表的时候,在所有的字段之后,使用primary key(主键字段列表)来创建主键
CREATE TABLE my_pril(
number INT(10),
NAME VARCHAR(20) NOT NULL,
PRIMARY KEY(number)
);
(2)主键约束
创建约束的目的就是保证数据的完整性和一致性。
主键对应的字段中的数据必须唯一,且不能为NULL, 一旦重复,数据操作失败(增和改)
建议主键使用数字类型,因为数字的检索速度非常快,并且主键如果是数字类型,还可以设置自动增长。
主键的原理其实就是一个计数器。
(3)更新主键与删除主键
没有办法更新主键:主键必须先删除,才能增加。
语法:
Alter table 表名 drop primary key;
2、自动增长
自增长:当对应的字段,不给值,或者说给默认值,或者给NULL的时候,会自动的被系统触发,系统会从当前字段中已有的最大值再进行+1操作,得到一个新的在不同的字段。
自增长的字段必须定义为主键,默认起始值是1而不是0。
(1)自增长使用
语法:
CREATE TABLE my_pril(
number INT(10) PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20) NOT NULL
);
(2)删除自增长
自增长是字段的一个属性: 可以通过modify来进行修改(保证字段没有auto_increment即可)
语法:
Alter table 表名 modify 字段 类型;
// 示例
ALTER TABLE my_pril MODIFY number INT;
3、唯一键
一张表往往有很多字段需要具有唯一性,数据不能重复:但是一张表中只能有一个主键:唯一键(unique)就可以解决表中有多个字段需要唯一性约束的问题。
(1)增加唯一键
方案一:在创建表的时候,字段之后直接跟unique/ unique key
CREATE TABLE my_pril2(
number INT(10) PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20) NOT NULL,
phone INT(11) UNIQUE
);
方案二:在所有的字段之后增加unique key(字段列表)
CREATE TABLE my_pril2(
number INT(10) PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20) NOT NULL,
phone INT(11),
UNIQUE key(phone)
);
(2)唯一键约束
唯一键与主键本质相同:唯一的区别就是唯一键默认允许为空,而且是多个为空。
如果唯一键也不允许为空: 与主键的约束作用是一致的。
(3)删除唯一键
语法:
Alter table 表名 drop index 索引名字; -- 唯一键默认的使用字段名作为索引名字
4、外键
举个例子来看一下,假如我们有两张表
- 员工表
id | 姓名 | 年龄 | 部门id(外键)(关联到部门表的主键) |
---|---|---|---|
1 | 张三 | 13 | 1 |
2 | lisi | 12 | 2 |
3 | 王五 | 12 | 3 |
- 部门表
id | 部门名称 | 部门地址 |
---|---|---|
1 | 技术部 | 长沙 |
2 | 销售部 | 广州 |
3 | 行政部 | 深证 |
外键:foreign key,外面的键(不在自己表中):如果一张表中有一个字段(非主键)指向另外一张表的主键,那么将该字段称之为外键。
(1)增加外键
外键可以在创建表的时候或者创建表之后增加(但是要考虑数据的问题)。
那么一张表可以有多个外键。
创建表的时候增加外键: 在所有的表字段之后,使用foreign key(外键字段) references 外部表(主键字段)
设置外键需要有多张表(其实就是表与表之间的关联)
首先创建一个主表(部门表):
CREATE TABLE department(
id INT(10) PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20) NOT NULL UNIQUE
)
创建一个从表(员工表)(设置外键):
CREATE TABLE employee(
id INT(10) PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20) NOT NULL,
dep_id INT(10) NOT NULL,
FOREIGN KEY(dep_id) REFERENCES department(id)
);
(2)修改外键、删除外键
外键不能修改,只能先删除后新增。
删除外键语法:
Alter table 表名 drop foreign key 外键名; -- 一张表中可以有多个外键,但是名字不能相同
(3)外键作用
外键默认的作用有两点:一个对父表,一个对子表(外键字段所在的表)
-
对子表约束:
子表数据进行写操作(增和改)的时候,如果对应的外键字段在父表找不到对应的匹配:那么操作会失败。
例如:增加一个员工,给员工一个部门的id,但是如果部门表里面没有这个id,那么就添加失败。
-
对父表约束:
父表数据进行写操作(删和改: 都必须涉及到主键本身),如果对应的主键在子表中已经被数据所引用,那么就不允许操作
例如:删除一个部门,那么当这个部门还有员工的时候,就删不掉。
(4)外键条件
-
外键要存在:首先必须保证表的存储引擎是innodb(默认的存储引擎):如果不是innodb存储引擎,那么外键可以创建成功,但是没有约束效果。
-
外键字段的字段类型(列类型)必须与父表的主键类型完全一致。
-
一张表中的外键名字不能重复。
-
增加外键的字段(数据已经存在),必须保证数据与父表主键要求对应。
标签:数据库,MySQL,基础,外键,book,MYSQL,数据,主键 From: https://www.cnblogs.com/LoLong/p/17280938.html