乐之之

知而行乐,乐而行之,天道酬勤,学无止境。
Mysql数据库基础(1)

一、数据库的历史

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 张三 22 1
2 李四 26 2
3 王五 23 3
  • 部门表
id 部门名称 部门地址
1 技术部 长沙
2 销售部 广州
3 行政部 深圳

  外键:foreign key,外面的键(不在自己表中):如果一张表中有一个字段(非主键)指向另外一张表的主键,那么将该字段称之为外键。

(1)增加外键

  外键可以在创建表的时候或者创建表之后增加(但是要考虑数据的问题)。

  那么一张表可以有多个外键。

  创建表的时候增加外键: 在所有的表字段之后,使用foreign key(外键字段) references 外部表(主键字段)

  设置外键需要有多张表(其实就是表与表之间的关联)

  首先创建一个主表(部门表):

CREATE TABLE department(
	department_id INT PRIMARY KEY AUTO_INCREMENT,
	department_name VARCHAR(50) NOT NULL UNIQUE,
	department_address VARCHAR(50)
);

  添加相应内容:

  创建一个从表(员工表)(设置外键):

CREATE TABLE employee(
	employee_id INT PRIMARY KEY AUTO_INCREMENT,
	employee_name VARCHAR(50) NOT NULL UNIQUE,
	employee_age VARCHAR(50),
	employee_deparment_id INT,
	FOREIGN KEY(employee_deparment_id) REFERENCES department(department_id)
);

  添加相对应的信息:

  这样就可以将员工部门id关联到部门表中的id了,从架构设计器中也可以看出员工部门id关联到部门表中的id的指向,如图:

(2)修改外键、删除外键

  外键不能修改,只能先删除后新增。

删除外键语法:

Alter table 表名 drop foreign key 外键名; -- 一张表中可以有多个外键,但是名字不能相同

(3)外键作用

  外键默认的作用有两点:一个对父表,一个对子表(外键字段所在的表)

  • 对子表约束:

    子表数据进行写操作(增和改)的时候,如果对应的外键字段在父表找不到对应的匹配:那么操作会失败。

    例如:增加一个员工,给员工一个部门的id,但是如果部门表里面没有这个id,那么就添加失败。

  • 对父表约束:

    父表数据进行写操作(删和改: 都必须涉及到主键本身),如果对应的主键在子表中已经被数据所引用,那么就不允许操作

    例如:删除一个部门,那么当这个部门还有员工的时候,就删不掉。

(4)外键条件

  • 外键要存在:首先必须保证表的存储引擎是innodb(默认的存储引擎):如果不是innodb存储引擎,那么外键可以创建成功,但是没有约束效果。

  • 外键字段的字段类型(列类型)必须与父表的主键类型完全一致。

  • 一张表中的外键名字不能重复。

  • 增加外键的字段(数据已经存在),必须保证数据与父表主键要求对应。

 

posted on 2023-04-02 18:08  乐之之  阅读(25)  评论(0编辑  收藏  举报