了解型知识点
- 数据库发展史
数据库由来
基于我们之前所学,数据要想永久保存,都是保存于文件中。
使用文件存储数据存在的几个问题:
- 数据共享问题(数据安全问题)
毫无疑问,一个文件仅仅只能存在于某一台机器上。PS:(拷贝文件可以实现存在于多台机器,但是无法实现数据同时修改)- I/O操作效率问题
打开文件读取数据、写入数据关闭文件都数据I/O操作,会大大影响我们程序的执行效率数据库的诞生就是为了解决上述两个问题。
数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。
发展史:
- 人工管理阶段
20世纪50年代中期以前,计算机主要用于科学计算。
当时的硬件水平:外存只有纸带、卡片、磁带,没有磁盘等直接存取的存储设备
当时的软件状况:没有操作系统,没有管理数据的软件,数据的处理方式是批处理。
人工管理数据具有以下特点:
- 数据不保存:计算机主要用于科学计算,数据临时用,临时输入,不保存
- 应用程序管理数据:数据要有应用程序自己管理,应用程序需要处理数据的逻辑+物理结构,开发负担很重
- 数据不共享:一组数据只对应一个程序,多个程序之间涉及相同数据时,必须各自定义,造成数据大量冗余
- 数据不具有独立性:数据的逻辑结构或物理结构发生变化后,必须对应用程序做出相应的修改,开发负担进一步加大
- 文件系统阶段
20世纪50年代后期到60年代中期
硬件水平:有了磁盘、磁鼓等可直接存取的存储设备
软件水平:有了操作系统,并且操作系统中已经有了专门的数据管理软件,即文件系统;处理方式上不仅有了批处理,而且能够联机实时处理
文件系统管理数据具有以下优点:
- 数据可以长期保存:计算机大量用于数据处理,因而数据需要长期保存,进行增删改查操作
- 由文件系统管理数据:文件系统这个软件,把数据组织成相对独立的数据文件,利用按文件名,按记录进行存取。实现了记录内的结构性,但整体无结构。并且程序与数据之间由文件系统提供存取方法进行转换,是应用程序与数据之间有了一定的独立性,程序员可以不必过多考虑物理细节。
文件系统管理数据具有以下缺点:
- 数据共享性差,冗余度大:一个文件对应一个应用程序,不同应用有相同数据时,也必须建立各自的文件,不能共享相同的数据,造成数据冗余,浪费空间,且相同的数据重复存储,各自管理,容易造成数据不一致性
- 数据独立性差:一旦数据的逻辑结构改变,必须修改应用程序,修改文件结构的定义。应用程序的改变,也将引起文件的数据结构的改变。因此数据与程序之间缺乏独立性。可见,文件系统仍然是一个不具有弹性的无结构的数据集合,即文件之间是孤立的,不能反映现实世界事物之间的内存联系。
- 数据系统阶段
20世纪60年代后期以来,计算机用于管理的规模越来越大,应用越来越广泛,数据量急剧增长,同时多种应用,多种语言互相覆盖地共享数据结合要求越来越强烈
硬件水平:有了大容量磁盘,硬件架构下降
软件水平:软件价格上升(开发效率必须提升,必须将程序员从数据管理中解放出来),分布式的概念盛行。
数据库系统的特点:
- 数据结构化(如上图odboy_stu)
- 数据共享,冗余度低,易扩充
- 数据独立性高
- 数据由DBMS统一管理和控制:
a:数据的安全性保护
b:数据的完整性检查
c:并发控制
d:数据库恢复
- 数据库概念
数据库这个术语的用法很多,比如:数据库管理系统(DataBase Management System,DBMS)、数据库所在的那台服务器又或者数据库软件,具体需要根据场景来判断对方所说的数据库到底是什么意思。
数据库:
数据库即存放数据的仓库,只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的;过去人们将数据存放在文件柜里,现在数据量庞大,已经不再适用;数据库是长期存放在计算机内、有组织、可共享的数据即可。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种 用户共享
数据管理系统:
在了解了数据概念后,如何科学地组织和存储数据,如何高效获取和维护数据成了关键
这就用到了一个系统软件—数据库管理系统
如MySQL、Oracle、SQLite、Access、MS SQL Server
常见的数据库
- 关系型
- oracle
目前最好的关系型数据库,体现在用户管理, 分布式
多用于商业用途
收费- mysql
免费开源,功能支持没有oracle强 但是足以满足中小企业使用
先后被sun公司 和 oracle 收购
mysql创始人Monty Widenius担心mysql被收购以后会闭源收费,于是另起灶炉搞了marriaDB
mariaDB和mysql 使用方法一模一样- sqlServer
属于微软生态链,需要和windows配合使用- DB2
IBM开发的大型关系型数据库 ,收费的,通常与硬件捆绑销售
- 非关系型
数据以key -value的形式来存储 数据存在内存中 速度快
mongoDB
redis
memercach
- MySQL了解
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
重点掌握知识
- 配置MySQL环境
Mac下,为mysql服务指定配置文件
Mac下的mysql配置文件是放在/etc文件夹下的
我们可以通过terminal执行cd /etc命令进入该文件夹下
输入vim my.cnf编辑mysql配置文件
流程:
1. 打开终端
2. 输入cd /etc
3. 输入vim my.cnf
4. 输入i或a进入编辑模式
5. 将内容复制进入
6. 按下esc键
7. 按下冒号‘:’
8. 输入wq
9. 按下回车
# Example MySQL config file for small systems.
#
# This is for a system with little memory (<= 64M) where MySQL is only used
# from time to time and it's important that the mysqld daemon
# doesn't use much resources.
#
# MySQL programs look for option files in a set of
# locations which depend on the deployment platform.
# You can copy this option file to one of those
# locations. For information about these locations, see:
# http://dev.mysql.com/doc/mysql/en/option-files.html
#
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.
# The following options will be passed to all MySQL clients
[client]
default-character-set=utf8
#password = your_password
port = 3306
socket = /tmp/mysql.sock
# Here follows entries for some specific programs
# The MySQL server
[mysqld]
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci
port = 3306
socket = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 16K
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 128K
# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (using the "enable-named-pipe" option) will render mysqld useless!
#
#skip-networking
server-id = 1
# Uncomment the following if you want to log updates
#log-bin=mysql-bin
# binary logging format - mixed recommended
#binlog_format=mixed
# Causes updates to non-transactional engines using statement format to be
# written directly to binary log. Before using this option make sure that
# there are no dependencies between transactional and non-transactional
# tables such as in the statement INSERT INTO t_myisam SELECT * FROM
# t_innodb; otherwise, slaves may diverge from the master.
#binlog_direct_non_transactional_updates=TRUE
# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /usr/local/mysql/data
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /usr/local/mysql/data
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 16M
#innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
[mysqlhotcopy]
interactive-timeout
Windows下,为mysql服务指定配置文件
# 需要先在桌面创建文件,然后拖到mysql目录下(原因:没有管理员权限无法在mysql安装目录下创建文件)
#在mysql的解压目录下,新建my.ini,然后配置(将下面内容复制到my.ini文件中)
#1. 在执行mysqld命令时,下列配置会生效,即mysql服务启动时生效
[mysqld]
;skip-grant-tables
port=3306
character_set_server=utf8
default-storage-engine=innodb
innodb_file_per_table=1
#解压的目录
basedir=E:\mysql-5.7.19-winx64
#data目录
datadir=E:\my_data #在mysqld --initialize时,就会将初始数据存入此处指定的目录,在初始化之后,启动mysql时,就会去这个目录里找数据
#2. 针对客户端命令的全局配置,当mysql客户端命令执行时,下列配置生效
[client]
port=3306
default-character-set=utf8
user=root
password=123
#3. 只针对mysql这个客户端的配置,2中的是全局配置,而此处的则是只针对mysql这个命令的局部配置
[mysql]
;port=3306
;default-character-set=utf8
user=egon
password=4573
#!!!如果没有[mysql],则用户在执行mysql命令时的配置以[client]为准
- MySQL修改密码的方式
Windows下已知旧密码更换新密码的方式:
mysqladmin -uroot -p旧密码 password 新密码
Linux/Mac下破解密码的两种方式
方式一:
- [root@apple ~]# rm -rf /var/lib/mysql/mysql #所有授权信息全部丢失!!!
[root@apple ~]# systemctl restart mariadb
[root@apple ~]# mysql
方式二:
- [root@apple ~]# vim /etc/my.cnf #mysql主配置文件
[mysqld]
skip-grant-table
[root@apple ~]# systemctl restart mariadb
[root@apple ~]# mysql
MariaDB [(none)]> update mysql.user set password=password(“123”) where user=“root” and host=“localhost”;
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> \q
[root@apple ~]# #打开/etc/my.cnf去掉skip-grant-table,然后重启
[root@apple ~]# systemctl restart mariadb
[root@apple ~]# mysql -u root -p123 #以新密码登录
Windows下破解密码的两种方式
- #1 关闭mysql
#2 在cmd中执行:mysqld --skip-grant-tables
#3 在cmd中执行:mysql
#4 执行如下sql:
update mysql.user set authentication_string=password(’’) where user = ‘root’;
flush privileges;
#5 tskill mysqld #或taskkill -f /PID 7832
#6 重新启动mysql- #1. 关闭mysql,可以用tskill mysqld将其杀死
#2. 在解压目录下,新建mysql配置文件my.ini
#3. my.ini内容,指定
[mysqld]
skip-grant-tables
#4.启动mysqld
#5.在cmd里直接输入mysql登录,然后操作
update mysql.user set authentication_string=password(’’) where user='root and host=‘localhost’;
flush privileges;
#6.注释my.ini中的skip-grant-tables,然后启动myqsld,然后就可以以新密码登录了
- 基础SQL语句使用
#1. 操作文件夹
增:create database db1 charset utf8;
查:show databases;
改:alter database db1 charset latin1;
删: drop database db1;
#2. 操作文件
先切换到文件夹下:use db1
增:create table t1(id int,name char);
查:show tables
改:alter table t1 modify name char(3);
alter table t1 change name name1 char(2);
删:drop table t1;
#3. 操作文件中的内容/记录
增:insert into t1 values(1,'egon1'),(2,'egon2'),(3,'egon3');
查:select * from t1;
改:update t1 set name='sb' where id=2;
删:delete from t1 where id=1;
清空表:
delete from t1; #如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始。
truncate table t1;数据量大,删除速度比上一条快,且直接从零开始,
auto_increment 表示:自增
primary key 表示:约束(不能重复且不能为空);加速查找