[MySQL数据库之数据库相关概念、MySQL下载安装、MySQL软件基本管理、SQL语句]
数据库相关概念
数据库管理软件的由来
数据库管理软件:本质就是个C/S架构的套接字程序。 我们在编写任何程序之前,都需要事先写好基于网络操作一台主机上文件的程序(socket服务端与客户端程序),于是有人将此类程序写成一个专门的处理软件,这就是mysql等数据库管理软件的由来,但mysql解决的不仅仅是数据共享的问题,还有查询效率,安全性等一系列问题,总之,把程序员从数据管理中解脱出来,专注于自己的程序逻辑的编写。
什么是数据(Data)
描述事物的符号记录称为数据,描述事物的符号既可以是数字,也可以是文字、图片,图像、声音、语言等,数据由多种表现形式,它们都可以经过数字化后存入计算机,在计算机中描述一个事物,就需要抽取这一事物的典型特征,组成一条记录,就相当于文件里的一行内容,单纯的一条记录并没有任何意义,如果我们按逗号作为分隔,依次定义各个字段的意思,相当于定义表的标题
什么是数据库(DataBase,简称DB)
数据库即存放数据的仓库,只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的
过去人们将数据存放在文件柜里,现在数据量庞大,已经不再适用
数据库是长期存放在计算机内、有组织、可共享的数据即可。
数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种 用户共享
什么是数据库管理系统(DataBase Management System 简称DBMS)
在了解了Data与DB的概念后,如何科学地组织和存储数据,如何高效获取和维护数据成了关键
这就用到了一个系统软件---数据库管理系统如MySQL、Oracle、SQLite、Access、MS SQL Server
mysql主要用于大型门户,例如搜狗、新浪等,它主要的优势就是开放源代码,因为开放源代码这个数据库是免费的,他现在是甲骨文公司的产品。
oracle主要用于银行、铁路、飞机场等。该数据库功能强大,软件费用高。也是甲骨文公司的产品。
sql server是微软公司的产品,主要应用于大中型企业,如联想、方正等
数据库管理软件分两大类:
关系型:常见的如MySQL,sqllite,db2,oracle,access,sql server
非关系型:mongodb,redis,memcache
可以简单的理解为:
关系型数据库需要有表结构(存数据之前需要将表建立好(表就是文件),例如这个表是用户相关的表,里面专门存用户相关的数据。还需要建立权限表,里面存用户权限相关的数据。用户跟权限是有对应关系的,表跟表之间是有关系的,还有约束)
非关系型数据库是key-value存储的,没有表结构
mysql介绍
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
mysql是什么?
mysql就是一个基于socket编写的C/S架构的软件
客户端软件
mysql自带:如mysql命令,mysqldump命令等
python模块:如pymysql
sql语句:套接字管理软件的作者为使用者规定的命令规范
数据库核心概念总结:
数据------------------》事物的状态
记录------------------》文件中的一条信息
表--------------------》一个文件
库--------------------》文件夹
数据库管理软件---------》套接字程序:mysqld、mysql
数据库服务器-----------》运行mysqld的计算机
MySQL下载安装
Windows版本
1、下载:MySQL Community Server 5.6.51
http://dev.mysql.com/downloads/mysql/
2、解压
如果想要让MySQL安装在指定目录,那么就将解压后的文件夹移动到指定目录,如:D:\mysql-5.6.51-winx64
3、添加环境变量
【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到
变量名为Path 的一行,双击】 --> 【将MySQL的bin目录路径追加到变值值中,D:\mysql-5.6.51-winx64\bin\】
4、初始化
C:\Users\Administrator> mysqld --initialize-insecure
5、启动MySQL服务
C:\Users\Administrator> mysqld # 启动MySQL服务
6、启动MySQL客户端并连接MySQL服务(另开一个cmd)
C:\Users\Administrator> mysql -u root -p # 连接MySQL服务器
将MySQL服务制作成Windows服务
#上一步解决了一些问题,但不够彻底,因为在执行【mysqd】启动MySQL服务器时,当前终端会被hang住,那么做一下设置即可解决此问题:
#注意:--install前,必须用mysql启动命令的绝对路径
# 制作MySQL的Windows服务,在终端执行此命令:
C:\Users\Administrator>"D:\mysql-5.6.51-winx64\bin\mysqld" --install
# 移除MySQL的Windows服务,在终端执行此命令:
C:\Users\Administrator>"D:\mysql-5.6.51-winx64\bin\mysqld" --remove
# 注册成服务之后,以后再启动和关闭MySQL服务时,仅需执行如下命令:
# 启动MySQL服务
C:\Users\Administrator>net start mysql
MySQL 服务正在启动 .
MySQL 服务已经启动成功。
# 关闭MySQL服务
C:\Users\Administrator>net stop mysql
MySQL 服务正在停止.
MySQL 服务已成功停止。
MySQL软件基本管理
登录,设置密码
初始状态下,管理员root,密码为空,默认只允许从本机登录localhost
设置密码
C:\Users\Administrator>mysqladmin -uroot password "123" 设置初始密码 由于原密码为空,因此-p可以不用
C:\Users\Administrator>mysqladmin -uroot -p"123" password "456" 修改mysql密码,因为已经有密码了,所以必须输入原密码才能设置新密码
命令格式:
C:\Users\Administrator>mysql -h172.31.0.2 -uroot -p456
C:\Users\Administrator>mysql -uroot -p
C:\Users\Administrator>mysql 以root用户登录本机,密码为空
破解密码方式:
跳过授权表启动服务端:
# 1.先关闭当前mysql服务端
命令行的方式启动(让mysql跳过用户名密码验证功能)
C:\Users\Administrator>mysqld --skip-grant-tables --user=mysql
# 2.直接以无密码方式连接,另外开一个cmd
C:\Users\Administrator>mysql -uroot -p # 直接回车
mysql> select user(); # 可以看到直接就是管理员用户
# 3.修改当前用户的密码
mysql> update mysql.user set password=password("111") where user="root" and host="localhost";
"""
执行一个update命令,mysql文件夹下面有一个文件user(点代表路径分隔符),把password这个字段
的值改掉(密码一定要存成密文的,所以调了password("111")这个函数,把函数的值赋值给字段)where
user把一个本地管理员账号的密码改成111
"""
# 4.立刻将修改数据刷到硬盘
mysql> flush privilegse; # 执行命令,刷新权限信息
mysql> exit # 执行退出命令
# 5.然后关掉服务端,再以正常方式启动
改完密码重新启动服务端后再在客户端执行连接登录
C:\Users\Administrator>mysql -uroot -p"111"
可用此类方式关掉启动mysql服务
MySQL配置文件修改
mysql默认的配置文件
# 配置文件所在目录D:\mysql-5.6.51-winx64
my-default.ini # ini结尾的一般都是配置文件文件
程序启动会先加载配置文件中的配置之后才真正的启动
[client] # 其它客户端(mysql既支持自己写的客户端,也支持其它语言客户端)
[mysql] # 一旦客户端启动立刻加载下面的配置
[mysqld] # 一旦服务端启动立刻加载下面的配置
# 这个文件不能改,需要自己建一个my.ini的配置文件
# 修改配置文件后一定要重启服务才能生效
# 统一编码的配置,无需掌握直接拷贝即可(偷懒将管理员用户名和密码也添加到配置文件,不是必备项)
[client]
default-character-set = utf8mb4
[mysql]
user = "root" # 用户名
password=111 # 密码
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect=‘SET NAMES utf8mb4‘
统一编码配置添加到my.ini
重启服务后查看配置文件是否修改成功
sql语句
有了mysql这个数据库软件,就可以将程序员从对数据的管理中解脱出来,专注于对程序逻辑的编写
mysql服务端软件即mysqld帮我们管理好文件夹以及文件,前提是作为使用者的我们,需要下载mysql的客户端,或者其他模块来连接到mysqld,然后使用mysql软件规定的语法格式去提交自己命令,实现对文件夹或文件的管理。该语法即sql(Structured Query Language 即结构化查询语言)
SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。SQL语言分为3种类型:
1、DDL语句 数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
2、DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
3、DCL语句 数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE
库详细操作
-
一、系统数据库
information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等
performance_schema: MySQL 5.5开始新增一个数据库:主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象
mysql: 授权库,主要存储系统用户的权限信息
test: MySQL数据库系统自动创建的测试数据库
-
二、创建数据库
-
1 语法(help create database)
-
CREATE DATABASE 数据库名 charset utf8;
- ##### 2 数据库命名规则
可以由字母、数字、下划线、@、#、$
区分大小写
唯一性
不能使用关键字如 create select
不能单独使用数字
最长128位
-
三、库---》文件夹:操作文件夹
增:create database day02 charset utf8mb4; # 创建day02数据库,指定字符编码“utf8mb4”
改:alter database day02 charset gbk; # 将字符编码改为“gbk”
查:show databases; # 查看所有的库
select database(); # 查看当前所在的库
show create database day02; # 查看刚刚创建的库
删:drop database day02; # 删库
表操作
- #### 表----》文件:操作文件
#语法:
create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
);
#注意:
1. 在同一张表中,字段名是不能相同
2. 宽度和约束条件可选
3. 字段名和类型是必须的
# 表操作:
use day02; # 先切换到库下
select database(); # 查看当前所在的库
增:create table t1(id int,name varchar(16));
# 创建表t1当前库下无需加前缀day02,指定id字段、对应类型,名字,名varchar类型的宽度(16个字符)
改:alter table t1 rename t2; # 改表名
alter table t2 modify name varchar(10); # 改字段varchar类型的宽度改为10
查:show tables; # 查看当前库下的表信息
desc t2; # 指定查看一张表的信息
show create table t2\G; # 查看表详细结构,可加\G
删:drop table day02.t2; # 指定绝对路径删除表,不在当前库下也能删除
行操作
- #### 记录----》操作文件中的内容
create database day02; # 先创建库
use day02; # 最好是切到库下进行操作(路径不用加前缀)
create table t1(id int,name varchar(16)); # 创建表
增:insert t1 values # 往t1插入值
(1,"egon"), # 添加第一条记录
(2,"tom"), # 添加第二条记录
(3,"jack"); # 添加第三条记录
改:update day02.t1 set name = "lili" where id = 2;
# 更新day02下的t1表,设置名字改为“lili,”把id等于2的名字改为“lili”
查: select * from day02.t1; # 查看t1表里面的所有内容
select name from day02.t1; # 只查看t1表里面的名字
select name from day02.t1 where id >= 2; # 查看id大于或等于2的信息
删:delete from day02.t1 where id = 2; # 指的删除id等于2的内容
清空表:
delete from t1; # 如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始。
truncate table t1; # 数据量大,删除速度比上一条快,且直接从零开始,
auto_increment # 表示:自增
primary key # 表示:约束(不能重复且不能为空);加速查找