目录
一.概论
什么是数据库?
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,
每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。
我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。
所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
RDBMS即关系数据库管理系统(Relational Database Management System)的特点:
- 1.数据以表格的形式出现
- 2.每行为各种记录名称
- 3.每列为记录名称所对应的数据域
- 4.许多的行和列组成一张表单
- 5.若干的表单组成database
定义:高效的存储和处理数据的介质
数据库的分类
关系型数据库(sql)
大型
Oracle:属于Oracle(甲骨文)公司,主要用于java开发
DB2:属于IBM公司,主要用金融,电信…..
中型
SqlServer:属于微软,一般用于微软自己的语言
Mysql :由AB公司初创,后被sun收购,sun被Oracle收购主要用于java开发
小型
Access
非关系型数据库(Nosql:not only sql)
MongoDB、redis、memcached
两种数据库区别
关系型数据库数据存储在磁盘上,数据安全,但是效率低;
非关系型数据库数据存储在内存上,数据不安全,断电会丢失数据,但是效率高;
此外,关系型数据库存储结构是二维表,比较浪费空间
关系型数据库
什么是关系型数据库?
一种建立在关系模型(数学模型)上的数据库
关系模型包含三个方面:
1、数据结构:二维表,解决数据如何存储
2、操作指令集合:所有的SQL语句,解决如何处理数据
3、完整性约束:表内数据约束(字段与字段),表与表之间约束(外键)
MySQL数据库
MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
- MySQL 是开源的,所以你不需要支付额外的费用。
- MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
- MySQL 使用标准的SQL数据语言形式。
- MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
- MySQL 对PHP有很好的支持,PHP是目前最流行的Web开发语言。
- MySQL 支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。
- MySQL 是可以定制的,采用了GPL协议,你可以修改源码来开发自己的 MySQL 系统。
数据语言
SQL(Structured Query Language),结构化查询语言,在数据库中90%以上的操作是查询操作
SQL分为三个部分
数据定义语言(DDL Data Defined Language)
用于维护存储数据的结构
create table | database |…
alter table | database | …
drop table | database |…
数据操作语言(DML Data Manipution Language)
用来对数据进行操作
Insert Update Delete
内部单独分了一个DQL(Data Query Language),数据查询指令:select
数据控制语言(DCL Data Control Language)
主要负责用户权限管理
Grant Revoke Commit deny
二.安装
1.linxu下安装MySQL
-
安装前检测 删除 强力删除
rpm -qa | grep mysql //
rpm -e mysql // 普通删除模式
rpm -e --nodeps mysql // 强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除
-
安装 MySQL
wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
rpm -ivh mysql57-community-release-el7-9.noarch.rpm
yum install mysql-server
这里因为我使用的是ubuntu,产生报错:
rpm:RPM should not be used directly install RPM packages, use Alien instead!
rpm:However assuming you know what you are doing...
警告: mysql57-community-release-el7-9.noarch.rpm: 头 V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:mysql57-community-release-el7-9 ################################# [100%]
错误: 解压压缩文件 失败:cpio: mkdir
错误: mysql57-community-release-el7-9.noarch: 安裝 已失败
因为ubuntu只能安装deb格式的软件包,不能直接安装rpm类型的包...
sudo apt-get install mysql-server
其中:
MySQL - MySQL服务器。你需要该选项,除非你只想连接运行在另一台机器上的MySQL服务器。
MySQL-client - MySQL 客户端程序,用于连接并操作Mysql服务器。
MySQL-devel - 库和包含文件,如果你想要编译其它MySQL客户端,例如Perl模块,则需要安装该RPM包。
MySQL-shared - 该软件包包含某些语言和应用程序需要动态装载的共享库(libmysqlclient.so*),使用MySQL。
MySQL-bench - MySQL数据库服务器的基准和性能测试工具。
...这里我启动服务一直会卡死。。。但是可以进入本地的sql服务,就假装自己安装好了ORZ...
-
安装验证
mysqladmin --version
#出现:
mysqladmin Ver 8.42 Distrib 5.7.23, for Linux on x86_64
2.win下安装
https://blog.csdn.net/D_V_K_/article/details/82467266
三.基本操作
MySQL 语法对大小写不敏感,但是大写更容易看出。
mysqladmin -u root password "new_password";
#修改密码
mysql -u root -p
#登陆
1.用户设置
-
添加用户:
mysql> use mysql;
Database changed
mysql> INSERT INTO user
(host, user, password,
select_priv, insert_priv, update_priv)
VALUES ('localhost', 'guest',
PASSWORD('guest123'), 'Y', 'Y', 'Y');
Query OK, 1 row affected (0.20 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 1 row affected (0.01 sec)
mysql> SELECT host, user, password FROM user WHERE user = 'guest';
+-----------+---------+------------------+
| host | user | password |
+-----------+---------+------------------+
| localhost | guest | 6f8c114b58f2ce9e |
+-----------+---------+------------------+
1 row in set (0.00 sec)
创建用户相当于往数据库中的mysql表中添加一条数据。
一种简便的添加方法:
语法:create user 用户名 identified by 密码
例:create user james identified by '123456';
注意:创建用户,用户名不需要用单引号包裹,但是密码需要用单引号包裹
其中
查看的密码是通过md5加密技术加密。
注意:在 MySQL5.7 中 user 表的 password 已换成了authentication_string。
注意:password() 加密函数已经在 8.0.11 中移除了,可以使用 MD5() 函数代替。
注意:在注意需要执行 FLUSH PRIVILEGES 语句。 这个命令执行后会重新载入授权表。
如果你不使用该命令,你就无法使用新创建的用户来连接mysql服务器,除非你重启mysql服务器。
你可以在创建用户时,为用户指定权限,在对应的权限列中,在插入语句中设置为 'Y' 即可,用户权限列表如下:
Select_priv
Insert_priv
Update_priv
Delete_priv
Create_priv
Drop_priv
Reload_priv
Shutdown_priv
Process_priv
File_priv
Grant_priv
References_priv
Index_priv
Alter_priv
-
修改密码:
语法:set password for "用户名" = password("密码");
set password for "james" = password("111111");
-
删除用户
语法:drop user 用户名;
drop user james;
-
赋予权限
授权:root通过mysql命令给指定的用户授予特定的权利
权利包含DDL、DML、DQL而且细致入微
语法:grant 权限 on 数据库名.表名 to 用户
grant select on jsyunsi.stu to james;
grant insert on jsyunsi.stu to james;
grant all on jsyunsi.* to james;
将所有的权限赋予给james子用户,子用户可以对jsyunsi数据库中的所有表进行操作
- 显示权限
语法:show grants for 用户名;
show grants for james;
-
回收权限
如果按照顺序授权,那么授权过程的权限允许叠加,
但是回收权限也要回收所有的层次的权限回来
语法:revoke 权限 on 数据库名.表名 from 用户名
revoke all on jsyunsi.stu from james;
刷新权限
flush privileges;
把所有的权限都收回来
revoke all on *.* from "james";
-
关于/etc/my.cnf 文件配置
默认文件数据
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
[mysql.server]
user=mysql
basedir=/var/lib
[safe_mysqld]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
2.管理命令
- USE 数据库名 :
选择要操作的Mysql数据库,使用该命令后所有Mysql命令都只针对该数据库。 - SHOW DATABASES:
列出 MySQL 数据库管理系统的数据库列表。 - SHOW TABLES:
显示指定数据库的所有表,使用该命令前需要使用 use 命令来选择要操作的数据库。 - SHOW COLUMNS FROM 数据表:
显示数据表的属性,属性类型,主键信息 ,是否为 NULL,默认值等其他信息。 - SHOW INDEX FROM 数据表:
显示数据表的详细索引信息,包括PRIMARY KEY(主键)。 - SHOW TABLE STATUS LIKE [FROM db_name] [LIKE 'pattern'] \G:
该命令将输出Mysql数据库管理系统的性能及统计信息。