当前位置:Gxlcms > 数据库问题 > mysql

mysql

时间:2021-07-01 10:21:17 帮助过:23人阅读

Tedu Python 教学部
Author:吕泽

数据处理数据处理1. 文件处理1.1 引入1.2 文件读写操作1.2.1 打开文件1.2.2 读取文件1.2.3 写入文件1.2.4 关闭文件1.2.5 with操作1.2.6 缓冲区1.2.7 文件偏移量1.3 os模块2. 正则表达式2.1 概述2.2 元字符使用2.3 匹配规则2.3.1 特殊字符匹配2.3.2 贪婪模式和非贪婪模式2.3.3 正则表达式分组2.3.4 正则表达式匹配原则2.4 Python re模块使用2.4.1 基础函数使用2.4.2 生成match对象2.4.3 match对象使用2.4.4 flags参数扩展3. 数据库3.1概述3.2 MySQL3.3 SQL语言3.4 数据库管理3.5 数据表管理3.5.1 基础数据类型3.5.2 表的基本操作3.6 表数据基本操作3.5.1 插入(insert)3.6.2 查询(select)3.6.3 where子句3.6.4 更新表记录(update)3.6.5 删除表记录(delete)3.6.6 表字段的操作(alter)3.5.7 时间类型数据3.7 高级查询语句3.8 聚合操作3.8.1 聚合函数3.8.2 聚合分组3.8.3 聚合筛选3.8.4 去重语句3.8.5 聚合运算3.9 索引操作3.9.1 概述3.9.2 索引分类3.9.3 索引创建3.10 外键约束和表关联关系3.10.1 外键约束3.10.2 表关联设计3.10.3 E-R模型3.10.4 表连接3.11 视图3.12 函数和存储过程3.12.1 函数创建3.12.2存储过程创建3.12.3 存储过程和存储函数操作3.12.4 函数和存储过程区别3.13 事务控制3.13.1 事务概述3.13.2 事务操作3.13.3 事务四大特性3.13.4 事务隔离级别3.14 数据库优化3.14.1 数据库设计范式3.14.2 MySQL存储引擎3.14.3 字段数据类型选择3.14.4 键的设置3.14.5 explain语句3.14.6 SQL优化3.14.7 表的拆分3.15 数据库备份和用户管理3.15.1 表的复制3.15.2 数据备份3.15.3 用户权限管理3.16 pymysql模块

数据处理

  • 数据处理概述

    数据处理的基本目的是从大量的、可能是杂乱无章的、难以理解的数据中抽取并推导出对于某些特定的人们来说是有价值、有意义的数据。当下数据处理贯穿于社会生产和社会生活的各个领域。数据处理技术的发展及其应用的广度和深度,极大地影响了人类社会发展的进程。数据处理也是大数据,数据分析等后续科学的基本环节。

    技术图片

  • 基本概念

    • 数据 : 能够输入到计算机中并被识别处理的信息集合。
    • 大数据:是指无法在一定时间范围内用一定工具进行捕捉、管理和处理的数据集合,是海量、高增长率和多样化的信息资产。
  • 数据存储阶段

    • 人工管理阶段:人为管理,没有固定的格式和存储方法,容易混乱。

    • 文件管理阶段 :数据可以长期保存,存储数据量大,使用简单。

    • 数据库管理阶段:高效,可以存储更大量数据,便于管理,更加专业。

       

1. 文件处理

1.1 引入

  • 什么是文件

    文件是保存在持久化存储设备(硬盘、U盘、光盘..)上的一段数据,一个文本,一个py

    文件,一张图片,一段视······ 这些都是文件。

  • 文件分类

    • 文本文件:打开后会自动解码为字符,如txt文件,word文件,py程序文件。
    • 二进制文件:内部编码为二进制码,无法通过文字编码解析,如压缩包,音频,视频,图片等。
  • 字节串类型

    • 概念 : 在python3中引入了字节串的概念,与str不同,字节串以字节序列值表达数据,更方便用来处理二进程数据。

    • 字符串与字节串相互转化方法

            ?x         1
      - 普通的英文字符字符串常量可以在前面加b转换为字节串,例如:b‘hello‘
      2
      - 变量或者包含非英文字符的字符串转换为字节串方法 :str.encode()
      3
      - 字节串转换为字符串方法 : bytes.decode() 
      4
      ?
      5
      注意:python字符串用来表达utf8字符,因为并不是所有二进制内容都可以转化为utf8字符,所以不是所有字节串都能转化为字符串,但是所有字符串都能转化成二进制,所以所有字符串都能转换为字节串。
         

1.2 文件读写操作

使用程序操作文件,无外乎对文件进行读或者写

  • 读 :即从文件中获取内容
  • 写 :即修改文件中的内容

对文件实现读写的基本操作步骤为:打开文件,读写文件,关闭文件。

1.2.1 打开文件

     
xxxxxxxxxx
7         1
file_object = open(file_name, access_mode=‘r‘, buffering=-1,encoding=None)
2
功能:打开一个文件,返回一个文件对象。
3
参数:file_name  文件名;
4
     access_mode  打开文件的方式,如果不写默认为‘r’ 
5
     buffering  1表示有行缓冲,默认则表示使用系统默认提供的缓冲机制。
6
     encoding=‘UTF-8‘  设置打开文件的编码方式,一般Linux下不需要
7
返回值:成功返回文件操作对象。
   
打开模式效果
r 以读方式打开,文件必须存在
w 以写方式打开,文件不存在则创建,存在清空原有内容
a 以追加模式打开,文件不存在则创建,存在则继续进行写操作
r+ 以读写模式打开 文件必须存在
w+ 以读写模式打开文件,不存在则创建,存在清空原有内容
a+ 追加并可读模式,文件不存在则创建,存在则继续进行写操作
rb 以二进制读模式打开 同r
wb 以二进制写模式打开 同w
ab 以二进制追加模式打开 同a
rb+ 以二进制读写模式打开 同r+
wb+ 以二进制读写模式打开 同w+
ab+ 以二进制读写模式打开 同a+

注意 :

  1. 以二进制方式打开文件,读取内容为字节串,写入也需要写入字节串
  2. 无论什么文件都可以使用二进制方式打开,但是二进制文件则不能以文本方式打开,否则后续读写会报错。

 

1.2.2 读取文件

  • 方法1
     
xxxxxxxxxx
4         1
read([size])
2
功能: 来直接读取文件中字符。
3
参数: 如果没有给定size参数(默认值为-1)或者size值为负,文件将被读取直至末尾,给定size最多读取给定数目个字符(字节)。
4
返回值: 返回读取到的内容
   

注意:文件过大时候不建议直接读取到文件结尾,读到文件结尾会返回空字符串。

  • 方法2
     
xxxxxxxxxx
4         1
readline([size])
2
功能: 用来读取文件中一行
3
参数: 如果没有给定size参数(默认值为-1)或者size值为负,表示读取一行,给定size表示最多读取制定的字符(字节)。
4
返回值: 返回读取到的内容
   
  • 方法3
     
xxxxxxxxxx
4         1
readlines([sizeint])
2
功能: 读取文件中的每一行作为列表中的一项
3
参数: 如果没有给定size参数(默认值为-1)或者size值为负,文件将被读取直至末尾,给定size表示读取到size字符所在行为止。
4
返回值: 返回读取到的内容列表
   
  • 方法4
     
xxxxxxxxxx
4         1
# 文件对象本身也是一个可迭代对象,在for循环中可以迭代文件的每一行。
2
?
3
for line in f:
4
     print(line)
   

 

1.2.3 写入文件

  • 方法1
     
xxxxxxxxxx
4         1
write(data)
2
功能: 把文本数据或二进制数据块的字符串写入到文件中去
3
参数:要写入的内容
4
返回值:写入的字符个数
   

注意: 如果需要换行要自己在写入内容中添加\n

  • 方法2
     
xxxxxxxxxx
3         1
writelines(str_list)
2
功能:接受一个字符串列表作为参数,将它们写入文件。
3
参数: 要写入的内容列表
   

 

1.2.4 关闭文件

打开一个文件后我们就可以通过文件对象对文件进行操作了,当操作结束后可以关闭文件操作

  • 方法
     
xxxxxxxxxx
1         1
file_object.close()
   
  • 好处
  1. 可以销毁对象节省资源,(当然如果不关闭程序结束后对象也会被销毁)。
  2. 防止后面对这个对象的误操作。

 

1.2.5 with操作

python中的with语句也可以用于访问文件,在语句块结束后会自动释放资源。

  • with语句格式
     
xxxxxxxxxx
2         1
with context_expression [as obj]:
2
    with-body
   
  • with访问文件
     
xxxxxxxxxx
2         1
with open(‘file‘,‘r+‘) as f:
2
    f.read()
   

注意 : with语句块结束后会自动释放f所以不再需要close().

 

1.2.6 缓冲区

  • 定义

    系统自动的在内存中为每一个正在使用的文件开辟一个空间,在对文件读写时都是先将文件内容加载到缓冲区,再进行读写。

    技术图片

  • 作用

    1. 减少和磁盘的交互次数,保护磁盘。
    2. 提高了对文件的读写效率。
  • 缓冲区设置

    类型设置方法注意事项
    系统自定义 buffering=-1  
    行缓冲 buffering=1 当遇到\n时刷新缓冲
    指定缓冲区大小 buffering>1 必须以二进制方式打开

     

  • 刷新缓冲区条件

  1. 缓冲区被写满
  2. 程序执行结束或者文件对象被关闭
  3. 程序中调用flush()函数
     
xxxxxxxxxx
1         1
file_obj.flush()
   

 

1.2.7 文件偏移量

  • 定义

    打开一个文件进行操作时系统会自动生成一个记录,记录每次读写操作时所处的文件位置,每次文件的读写操作都是从这个位置开始进行的。

     

    注意:

    1. r或者w方式打开,文件偏移量在文件开始位置
    2. a方式打开,文件偏移量在文件结尾位置
  • 文件偏移量控制

         
    xxxxxxxxxx
    3         1
    tell()
    2
    功能:获取文件偏移量大小
    3
    返回值:文件偏移量
             
    xxxxxxxxxx
    4         1
    seek(offset[,whence])
    2
    功能: 移动文件偏移量位置
    3
    参数:offset  代表相对于某个位置移动的字节数。负数表示向前移动,正数表示向后移动。
    4
         whence是基准位置的默认值为 0,代表从文件开头算起,1代表从当前位置算起,2 代表从文件  末尾算起。
       

    注意:必须以二进制方式打开文件时,基准位置才能是1或者2

 

1.3 os模块

os模块是Python标准库模块,包含了大量的文件处理函数。

  • 获取文件大小
     
xxxxxxxxxx
4         1
os.path.getsize(file)
2
功能: 获取文件大小
3
参数: 指定文件
4
返回值: 文件大小
   
  • 查看文件列表
     
xxxxxxxxxx
4         1
os.listdir(dir)
2
功能: 查看文件列表
3
参数: 指定目录
4
返回值:目录中的文件名列表
   
  • 查看文件是否存在
     
xxxxxxxxxx
4         1
os.path.exists(file)
2
功能: 查看文件是否存在 
3
参数: 指定文件
4
返回值:存在返回True,不存在返回False
   
  • 判断文件类型
     
xxxxxxxxxx
4         1
os.path.isfile(file)
2
功能: 判断文件类型 
3
参数: 指定文件
4
返回值:普通文件返回True,否则返回False
   
  • 删除文件
     
xxxxxxxxxx
3         1
os.remove(file)
2
功能: 删除文件 
3
参数: 指定文件
   

 

 

2. 正则表达式

2.1 概述

  • 学习动机
  1. 文本数据处理已经成为常见的编程工作之一
  2. 对文本内容的搜索,定位,提取是逻辑比较复杂的工作
  3. 为了快速方便的解决上述问题,产生了正则表达式技术
  • 定义

即文本的高级匹配模式,其本质是由一系列字符和特殊符号构成的字串,这个字串即正则表达式。

  • 原理

通过普通字符和有特定含义的字符,来组成字符串,用以描述一定的字符串规则,比如:重复,位置等,来表达某类特定的字符串,进而匹配。

  • 学习目标
  1. 熟练掌握正则表达式元字符
  2. 能够读懂常用正则表达式,编辑简单的正则规则
  3. 能够熟练使用re模块操作正则表达式

 

2.2 元字符使用

  • 普通字符

匹配规则:每个普通字符匹配其对应的字符

     
xxxxxxxxxx
3         1
e.g.
2
In : re.findall(‘ab‘,"abcdefabcd")
3
Out: [‘ab‘, ‘ab‘]
   

注意:正则表达式在python中也可以匹配中文

 

  • 或关系

元字符: |

匹配规则: 匹配 | 两侧任意的正则表达式即可

     
xxxxxxxxxx
4         1
e.g.
2
In : re.findall(‘com|cn‘,"www.baidu.com/www.tmooc.cn")
3
Out: [‘com‘, ‘cn‘]
4
?
   

 

  • 匹配单个字符

元字符:.

匹配规则:匹配除换行外的任意一个字符

     
xxxxxxxxxx
4         1
e.g.
2
In : re.findall(‘张.丰‘,"张三丰,张四丰,张五丰")
3
Out: [‘张三丰‘, ‘张四丰‘, ‘张五丰‘]
4
?
   

 

  • 匹配字符集

元字符: [字符集]

匹配规则: 匹配字符集中的任意一个字符

表达形式:

[abc#!好] 表示 [] 中的任意一个字符 [0-9],[a-z],[A-Z] 表示区间内的任意一个字符 [_#?0-9a-z] 混合书写,一般区间表达写在后面

     
xxxxxxxxxx
3         1
e.g.
2
In : re.findall(‘[aeiou]‘,"How are you!")
3
Out: [‘o‘, ‘a‘, ‘e‘, ‘o‘, ‘u‘]
   

 

  • 匹配字符集反集

元字符:[^字符集]

匹配规则:匹配除了字符集以外的任意一个字符

     
xxxxxxxxxx
3         1
e.g.
2
In : re.findall(‘[^0-9]‘,"Use 007 port")
3
Out: [‘U‘, ‘s‘, ‘e‘, ‘ ‘, ‘ ‘, ‘p‘, ‘o‘, ‘r‘, ‘t‘]
   

 

  • 匹配字符串开始位置

元字符: ^

匹配规则:匹配目标字符串的开头位置

     
xxxxxxxxxx
3         1
e.g.
2
In : re.findall(‘^Jame‘,"Jame,hello")
3
Out: [‘Jame‘]
   

 

  • 匹配字符串的结束位置

元字符: $

匹配规则: 匹配目标字符串的结尾位置

     
xxxxxxxxxx
3         1
e.g.
2
In : re.findall(‘Jame$‘,"Hi,Jame")
3
Out: [‘Jame‘]
   

规则技巧: ^$必然出现在正则表达式的开头和结尾处。如果两者同时出现,则中间的部分必须匹配整个目标字符串的全部内容。

 

  • 匹配字符重复

元字符: *

匹配规则:匹配前面的字符出现0次或多次

     
xxxxxxxxxx
3         1
e.g.
2
In : re.findall(‘wo*‘,"wooooo~~w!")
3
Out: [‘wooooo‘, ‘w‘]
   

元字符:+

匹配规则: 匹配前面的字符出现1次或多次

     
xxxxxxxxxx
3         1
e.g.
2
In : re.findall(‘[A-Z][a-z]+‘,"Hello World")
3
Out: [‘Hello‘, ‘World‘]
   

元字符:?

匹配规则: 匹配前面的字符出现0次或1次

     
xxxxxxxxxx
3         1
e.g. 匹配整数
2
In [28]: re.findall(‘-?[0-9]+‘,"Jame,age:18, -26")
3
Out[28]: [‘18‘, ‘-26‘]
   

元字符:{n}

匹配规则: 匹配前面的字符出现n次

     
xxxxxxxxxx
4         1
e.g. 匹配手机号码
2
In : re.findall(‘1[0-9]{10}‘,"Jame:13886495728")
3
Out: [‘13886495728‘]
4
?
   

元字符:{m,n}

匹配规则: 匹配前面的字符出现m-n次

     
xxxxxxxxxx
3         1
e.g. 匹配qq号
2
In : re.findall(‘[1-9][0-9]{5,10}‘,"Baron:1259296994") 
3
Out: [‘1259296994‘]
   

 

  • 匹配任意(非)数字字符

元字符: \d\D

匹配规则:\d 匹配任意数字字符,\D 匹配任意非数字字符

     
xxxxxxxxxx
3         1
e.g. 匹配端口
2
In : re.findall(‘\d{1,5}‘,"Mysql: 3306, http:80")
3
Out: [‘3306‘, ‘80‘]
   

 

  • 匹配任意(非)普通字符

元字符: \w\W

匹配规则: \w 匹配普通字符,\W 匹配非普通字符

说明: 普通字符指数字,字母,下划线,汉字。

     
xxxxxxxxxx
3         1
e.g.
2
In : re.findall(‘\w+‘,"server_port = 8888")
3
Out: [‘server_port‘, ‘8888‘]
   

 

  • 匹配任意(非)空字符

元字符: \s\S

匹配规则:\s匹配空字符,\S 匹配非空字符

说明:空字符指 空格\r \n \t \v \f 字符

     
xxxxxxxxxx
3         1
e.g.
2
In : re.findall(‘\w+\s+\w+‘,"hello    world")
3
Out: [‘hello    world‘]
   

 

  • 匹配(非)单词的边界位置

元字符:\b\B

匹配规则:\b 表示单词边界,\B 表示非单词边界

说明:单词边界指数字字母(汉字)下划线与其他字符的交界位置。

     
xxxxxxxxxx
3         1
e.g.
2
In : re.findall(r‘\bis\b‘,"This is a test.")
3
Out: [‘is‘]
   

注意: 当元字符符号与Python字符串中转义字符冲突的情况则需要使用r将正则表达式字符串声明为原始字符串,如果不确定那些是Python字符串的转义字符,则可以在所有正则表达式前加r。

 

类别元字符
匹配字符 .[...][^...] \d \D \w \W \s \S
匹配重复 *+?{n}{m,n}
匹配位置 ^ $ \b \B
其他 |()\

 

2.3 匹配规则

 

2.3.1 特殊字符匹配

  • 目的 : 如果匹配的目标字符串中包含正则表达式特殊字符,则在表达式中元字符就想表示其本身含义时就需要进行 \ 处理。

         
    xxxxxxxxxx
    1         1
    特殊字符: . * + ? ^ $ [] () {} | \
       

     

  • 操作方法:在正则表达式元字符前加 \ 则元字符就是去其特殊含义,就表示字符本身

     
xxxxxxxxxx
3         1
e.g. 匹配特殊字符 . 时使用 \. 表示本身含义
2
In : re.findall(‘-?\d+\.?\d*‘,"123,-123,1.23,-1.23")
3
Out: [‘123‘, ‘-123‘, ‘1.23‘, ‘-1.23‘]
   

 

2.3.2 贪婪模式和非贪婪模式

  • 定义

贪婪模式: 默认情况下,匹配重复的元字符总是尽可能多的向后匹配内容。比如: * + ? {m,n}

非贪婪模式(懒惰模式): 让匹配重复的元字符尽可能少的向后匹配内容。

 

  • 贪婪模式转换为非贪婪模式

在对应的匹配重复的元字符后加 ‘?‘ 号即可

     
xxxxxxxxxx
4         1
*  ->  *?
2
+  ->  +?
3
?  ->  ??
4
{m,n} -> {m,n}?
         
xxxxxxxxxx
3         1
e.g.
2
In : re.findall(r‘\(.+?\)‘,"(abcd)efgh(higk)")
3
Out: [‘(abcd)‘, ‘(higk)‘]
   

 

2.3.3 正则表达式分组

  • 定义

在正则表达式中,以()建立正则表达式的内部分组,子组是正则表达式的一部分,可以作为内部整体操作对象。

  • 作用 : 可以被作为整体操作,改变元字符的操作对象
     
xxxxxxxxxx
7         1
e.g.  改变 +号 重复的对象
2
In : re.search(r‘(ab)+‘,"ababababab").group()
3
Out: ‘ababababab‘
4
?
5
e.g. 改变 |号 操作对象
6
In : re.search(r‘(王|李)\w{1,3}‘,"王者荣耀").group()
7
Out: ‘王者荣耀‘
   
  • 捕获组

捕获组本质也是一个子组,只不过拥有一个名称用以表达该子组的意义,这种有名称的子组即为捕获组。

格式:(?P<name>pattern)

     
xxxxxxxxxx
4         1
e.g. 给子组命名为 "pig"
2
In : re.search(r‘(?P<pig>ab)+‘,"ababababab").group(‘pig‘)
3
Out: ‘ab‘
4
?
   
  • 注意事项
  • 一个正则表达式中可以包含多个子组
  • 子组可以嵌套但是不宜结构过于复杂
  • 子组序列号一般从外到内,从左到右计数

技术图片

 

2.3.4 正则表达式匹配原则

  1. 正确性,能够正确的匹配出目标字符串.
  2. 排他性,除了目标字符串之外尽可能少的匹配其他内容.
  3. 全面性,尽可能考虑到目标字符串的所有情况,不遗漏.

 

2.4 Python re模块使用

 

2.4.1 基础函数使用


     
xxxxxxxxxx
6         1
 re.findall(pattern,string,flags = 0)
2
 功能: 根据正则表达式匹配目标字符串内容
3
 参数: pattern  正则表达式
4
      string 目标字符串
5
      flags  功能标志位,扩展正则表达式的匹配
6
 返回值: 匹配到的内容列表,如果正则表达式有子组则只能获取到子组对应的内容
   
     
xxxxxxxxxx
7         1
 re.split(pattern,string,max,flags = 0)
2
 功能: 使用正则表达式匹配内容,切割目标字符串
3
 参数: pattern  正则表达式
4
      string 目标字符串
5
      max 最多切割几部分
6
      flags  功能标志位,扩展正则表达式的匹配
7
 返回值: 切割后的内容列表
   
     
xxxxxxxxxx
8         1
 re.sub(pattern,replace,string,count,flags = 0)
2
 功能: 使用一个字符串替换正则表达式匹配到的内容
3
 参数: pattern  正则表达式
4
      replace  替换的字符串
5
      string 目标字符串
6
      count  最多替换几处,默认替换全部
7
      flags  功能标志位,扩展正则表达式的匹配
8
 返回值: 替换后的字符串
   

 

2.4.2 生成match对象

     
xxxxxxxxxx
6         1
 re.finditer(pattern,string,flags = 0)
2
 功能: 根据正则表达式匹配目标字符串内容
3
 参数: pattern  正则表达式
4
      string 目标字符串
5
      flags  功能标志位,扩展正则表达式的匹配
6
 返回值: 匹配结果的迭代器
   
     
xxxxxxxxxx
5         1
re.match(pattern,string,flags=0)
2
功能:匹配某个目标字符串开始位置
3
参数:pattern 正则
4
string  目标字符串
5
返回值:匹配内容match object
   
     
xxxxxxxxxx
5         1
re.search(pattern,string,flags=0)
2
功能:匹配目标字符串第一个符合内容
3
参数:pattern 正则
4
string  目标字符串
5
返回值:匹配内容match object
   

 

2.4.3 match对象使用

  • span() 获取匹配内容的起止位置

  • groupdict() 获取捕获组字典,组名为键,对应内容为值

  • group(n = 0)

    功能:获取match对象匹配内容 参数:默认为0表示获取整个match对象内容,如果是序列号或者组名则表示获取对应子组内容 返回值:匹配字符串

 

技术图片

 

2.4.4 flags参数扩展

 

  • 作用函数:re模块调用的匹配函数。如:re.findall,re.search....

  • 功能:扩展丰富正则表达式的匹配功能

  • 常用flag

         
    xxxxxxxxxx
    7         1
    A == ASCII  元字符只能匹配ascii码
    2
    ?
    3
    I == IGNORECASE  匹配忽略字母大小写
    4
    ?
    5
    S == DOTALL  使 . 可以匹配换行
    6
    ?
    7
    M == MULTILINE  使 ^  $可以匹配每一行的开头结尾位置
       

注意:同时使用多个flag,可以用竖线连接 flags = re.I | re.A

 

3. 数据库

 

3.1概述

  • 数据存储
  1. 人工管理阶段

    缺点 : 数据存储量有限,共享处理麻烦,操作容易混乱

  2. 文件管理阶段 (.txt .doc .xls)

    优点 : 数据可以长期保存,可以存储大量的数据,使用简单。

    缺点 : 数据一致性差,数据查找修改不方便,数据冗余度可能比较大。

  3. 数据库管理阶段

    优点 : 数据组织结构化降低了冗余度,提高了增删改查的效率,容易扩展,方便程序调用处理

    缺点 : 需要使用sql 或者其他特定的语句,相对比较专业

 

  • 数据库应用领域

    数据库的应用领域几乎涉及到了需要数据管理的方方面面,融机构、游戏网站、购物网站、论坛网站 ... ...都需要数据库进行数据存储管理。

技术图片

 

  • 基本概念
  • 数据库 : 按照数据一定结构,存储管理数据的仓库。数据库是在数据库管理系统管理和控制下,在一定介质上的数据集合。
  • 数据库管理系统 :管理数据库的软件,用于建立和维护数据库。
  • 数据库系统 : 由数据库和数据库管理系统,开发工具等组成的集合 。

技术图片

 

  • 数据库分类和常见数据库

    • 关系型数据库和非关系型数据库

    关系型: 采用关系模型(二维表)来组织数据结构的数据库

    非关系型: 不采用关系模型组织数据结构的数据库

    • 开源和非开源

    开源:MySQL、SQLite、MongoDB

非开源:Oracle、DB2、SQL_Server

技术图片

3.2 MySQL

1996年,MySQL 1.0发布,作者Monty Widenius, 为一个叫TcX的公司打工,当时只是内部发布。到了96年10月,MySQL 3.11.1发布了,一个月后,Linux版本出现了。真正的MySQL关系型数据库于1998年1月发行第一个版本。MySQL是个开源数据库,后来瑞典有了专门的MySQL开发公司,将该数据库发展壮大,在之后被Sun收购,Sun又被Oracle收购。

官网地址:https://www.mysql.com/

技术图片

  • MySQL特点

    1. 是开源数据库,使用C和C++编写
    2. 能够工作在众多不同的平台上
    3. 提供了用于C、C++、Python、Java、Perl、PHP、Ruby众多语言的API
    4. 存储结构优良,运行速度快
    5. 功能全面丰富

 

  • MySQL安装

    • Ubuntu安装MySQL服务

      • 终端执行: sudo apt install mysql-server
      • 配置文件:/etc/mysql
      • 数据库存储目录 :/var/lib/mysql
    • Windows安装MySQL

      • 下载MySQL安装包(windows) https://dev.mysql.com/downloads/windows/installer/8.0.html
      • 直接运行安装文件安装

 

  • 启动和连接MySQL服务

    • 服务端启动

      • 查看MySQL状态 : sudo service mysql status
      • 启动/停止/重启服务:sudo service mysql start/stop/restart
    • 连接数据库

           
      xxxxxxxxxx
      1         1
      mysql    -h  主机地址   -u  用户名    -p  
         

      注意:

      1. 回车后深入数据库密码 (我们设置的是123456)
      2. 如果链接自己主机数据库可省略 -h 选项
    • 关闭连接

           
      xxxxxxxxxx
      2         1
      ctrl-D
      2
      exit
         

 

  • MySQL数据库结构

数据元素 --> 记录 -->数据表 --> 数据库

<

人气教程排行