关于MySQL的几个小知识

了解型知识点

  • 数据库发展史

数据库由来

基于我们之前所学,数据要想永久保存,都是保存于文件中。
使用文件存储数据存在的几个问题:

  • 数据共享问题(数据安全问题)
    毫无疑问,一个文件仅仅只能存在于某一台机器上。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 表示:约束(不能重复且不能为空);加速查找
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章