数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。所谓“数据库”系以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合;一个数据库由多个表空间(Tablespace)构成。
数据库数据存放方式:
结构化数据
半结构化数据
非结构化数据
数据库类型的区分主要参照的是数据结构模型,而常用的数据结构模型有很多:
关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列(也就是表格)的形式存储数据,,一组表组成了数据库。通俗来讲这种数据库就是由多张表组成,并且这些表之间存在一定的关系。
关系型数据库的优点:
关系型数据库的缺点:
关系型数据库举例:MySQL、Oracle、DB2、Microsoft SQL Server、SQLite等。
除了关系型数据库之外的数据库我们统称为:非关系型数据库(NoSQL)
数据库管理系统(Database Management System,简称DBMS)是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能。简单一句话,数据库管理系统是为了我们更方便的使用数据库而诞生的。
管理关系型数据库的系统叫做:关系型数据库管理系统(Relational Database Management System,简称RDBMS)。
MySQL使用关系型数据库管理系统管理数据库。
常见的关系型数据库管理系统:
SQL: Structure Query Language,结构化查询语言
约束: constraint,向数据表提供的数据要遵守的限制
索引: 将表中的一个或多个字段中的数据复制一份另存,并且这些数据需要按特定次序排序存储
SQL语句有三种类型:
SQL语句类型 | 对应操作 |
---|---|
DDL | CREATE:创建 DROP:删除 ALTER:修改 |
DML | INSERT:向表中插入数据 DELETE:删除表中数据 UPDATE:更新表中数据 SELECT:查询表中数据 |
DCL | GRANT:授权 REVOKE:移除授权 |
mysql安装方式有三种:
8.0和5.7的版本有较大区别,目前yum安装默认是8.0版本,安装5.7的话需要配置yum源,先去官网下载
mysql官网:mysql.com
[root@localhost ~]# wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
[root@localhost ~]# ls
anaconda-ks.cfg mysql57-community-release-el7-10.noarch.rpm
[root@localhost ~]# rpm -ivh mysql57-community-release-el7-10.noarch.rpm
[root@localhost ~]# ls /etc/yum.repos.d/
localhost.repo mysql-community.repo mysql-community-source.repo redhat.repo
包下载完成后进行安装
# 更改yum文件
[root@localhost ~]# vim /etc/yum.repos.d/mysql-community.repo
......
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=1
gpgcheck=0 //改为0
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
//将上方一行删除或者注释掉
......
清除原有的缓存,建立新的缓存
[root@localhost ~]# yum clean all
[root@localhost ~]# yum makecache
到官网去下载MySQL所需的依赖包repo.mysql.com
所需的软件包:
mysql-community-server
mysql-community-client
mysql-community-common
mysql-community-devel
mysql-community-libs
//下载并安装mysql5.7所需的包
[root@localhost ~]# wget http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql-community-server-5.7.35-1.el7.x86_64.rpm \
http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql-community-client-5.7.35-1.el7.x86_64.rpm \
http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql-community-common-5.7.35-1.el7.x86_64.rpm \
http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql-community-devel-5.7.35-1.el7.x86_64.rpm \
http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql-community-libs-5.7.35-1.el7.x86_64.rpm
[root@localhost ~]# dnf -y install *.rpm
[root@localhost ~]# rpm -qa | grep mysql
mysql-community-libs-5.7.37-1.el7.x86_64
mysql-community-server-5.7.37-1.el7.x86_64
mysql-community-common-5.7.37-1.el7.x86_64
mysql-community-client-5.7.37-1.el7.x86_64
mysql-community-devel-5.7.37-1.el7.x86_64
mysql57-community-release-el7-10.noarch
[root@localhost ~]# systemctl disable --now firewalld //开启服务前关闭防火墙
[root@localhost ~]# getenforce //关闭selinux
Disabled
[root@localhost ~]# systemctl start mysqld //启动MySQL服务并设置开机自启
[root@localhost ~]# systemctl enable mysqld
# /var/log/mysqld.log文件内存放着临时密码
[root@localhost ~]# grep 'password' /var/log/mysqld.log //查看MySQL密码
2022-04-18T08:10:21.800583Z 1 [Note] A temporary password is generated for root@localhost: pMbdM5xr/?W2
[root@localhost ~]# mysql -uroot -p'pMbdM5xr/?W2' -h127.0.0.1 //登陆
# 修改密钥策略为只需满足长度要求
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)
# 设置长度最低为4,此处设置小于4也会按4处理
mysql> set global validate_password_length=4;
Query OK, 0 rows affected (0.00 sec)
# 修改密码
mysql> set password = password('1234');
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql数据库命令不分大小写
mysql> CREATE DATABASE IF NOT EXISTS zyq; //创建数据库
Query OK, 1 row affected (0.00 sec)
mysql> SHOW DATABASES; //查看当前所有的数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| zyq |
+--------------------+
5 rows in set (0.00 sec)
mysql> USE zyq; //进入数据库
Database changed
//创建表
mysql> create table test (id INT NOT NULL,name VARCHAR (100) NOT NULL,age TINYINT);
Query OK, 0 rows affected (0.02 sec)
mysql> SHOW TABLES; //查看当前库所有的表
+---------------+
| Tables_in_zyq |
+---------------+
| test |
+---------------+
1 row in set (0.00 sec)
mysql> SHOW CHARACTER SET; //查看支持的所有字符集
mysql> SHOW ENGINES; //查看当前数据库支持的所有存储引擎
mysql> SHOW TABLES FROM zyq; //不进入数据库而列出其包含的所有表
+---------------+
| Tables_in_zyq |
+---------------+
| test |
+---------------+
1 row in set (0.00 sec)
mysql> DESC zyq.test; //不进入数据库而列出表的结构
mysql> SHOW CREATE TABLE zyq.test; //查看表的创建命令
mysql> SHOW TABLE STATUS LIKE 'test'\G //查看表的状态,需要进入库
mysql> HELP CREATE TABLE; //查看创建表的帮助
Name: 'CREATE TABLE'
Description:
Syntax:
......
mysql> DROP TABLE test; //删除表
Query OK, 0 rows affected (0.01 sec)
mysql> DROP DATABASE IF EXISTS zyq; //删除数据库
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW DATABASES;
mysql> ALTER TABLE t1 RENAME t2; //修改t1表名为t2
Query OK, 0 rows affected (0.01 sec)
DML操作包括增(INSERT)、删(DELETE)、改(UPDATE)、查(SELECT),均属针对表的操作
ORDER BY:排序,默认为升序(ASC)
ORDER BY语句 | 意义 |
---|---|
ORDER BY ‘column_name’ | 根据column_name进行升序排序 |
ORDER BY ‘column_name’ DESC | 根据column_name进行降序排序 |
ORDER BY ’column_name’ LIMIT 2 | 根据column_name进行升序排序 并只取前2个结果 |
ORDER BY ‘column_name’ LIMIT 1,2 | 根据column_name进行升序排序 并且略过第1个结果取后面的2个结果 |
truncate与delete的区别:
语句类型 | 特点 |
---|---|
delete | DELETE删除表内容时仅删除内容,但会保留表结构 DELETE语句每次删除一行,并在事务日志中为所删除的每行记录一项 可以通过回滚事务日志恢复数据 非常占用空间 |
truncate | 删除表中所有数据,且无法恢复 表结构、约束和索引等保持不变,新添加的行计数值重置为初始值 执行速度比DELETE快,且使用的系统和事务日志资源少 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放 对于有外键约束引用的表,不能使用TRUNCATE TABLE删除数据 不能用于加入了索引视图的表 |
insert语句:
mysql> USE zyq;
Database changed
# 创建表,id字段为主键不能为空且自动增值
mysql> create table test (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,name VARCHAR (100) NOT NULL,age TINYINT);
Query OK, 0 rows affected (0.01 sec)
# 增加数据
mysql> INSERT INTO test(id,name,age) VALUE(1,'tom',32);
Query OK, 1 row affected (0.00 sec)
select语句:
mysql> SELECT * FROM test; //查询表内容
+----+------+------+
| id | name | age |
+----+------+------+
| 1 | tom | 32 |
+----+------+------+
1 row in set (0.00 sec)
mysql> SELECT name FROM test; //按字段查询表内容
+------+
| name |
+------+
| tom |
+------+
1 row in set (0.00 sec)
......
mysql> SELECT * FROM test ORDER BY age; //按年龄升序显示
+----+----------+------+
| id | name | age |
+----+----------+------+
| 2 | zhangsan | 20 |
| 7 | zhouba | 20 |
| 3 | lisi | 23 |
| 4 | wangwu | 25 |
| 6 | sunqi | 26 |
| 5 | zhaoliu | 28 |
| 1 | tom | 32 |
+----+----------+------+
7 rows in set (0.00 sec)
mysql> SELECT * FROM test ORDER BY age DESC; //按年龄降序显示
+----+----------+------+
| id | name | age |
+----+----------+------+
| 1 | tom | 32 |
| 5 | zhaoliu | 28 |
| 6 | sunqi | 26 |
| 4 | wangwu | 25 |
| 3 | lisi | 23 |
| 2 | zhangsan | 20 |
| 7 | zhouba | 20 |
+----+----------+------+
7 rows in set (0.00 sec)
mysql> SELECT * FROM test ORDER BY age limit 2; //升序排序并只显示前两个结果
+----+----------+------+
| id | name | age |
+----+----------+------+
| 7 | zhouba | 20 |
| 2 | zhangsan | 20 |
+----+----------+------+
2 rows in set (0.00 sec)
mysql> SELECT * FROM test WHERE age >= 25 AND name = 'tom'; //条件查询
+----+------+------+
| id | name | age |
+----+------+------+
| 1 | tom | 32 |
+----+------+------+
1 row in set (0.00 sec)
mysql> SELECT * FROM test WHERE age BETWEEN 23 AND 28; //查询年龄23~28的结果
+----+---------+------+
| id | name | age |
+----+---------+------+
| 3 | lisi | 23 |
| 4 | wangwu | 25 |
| 5 | zhaoliu | 28 |
| 6 | sunqi | 26 |
+----+---------+------+
4 rows in set (0.00 sec)
mysql> SELECT * FROM test WHERE age IS NOT NULL; //查询年龄不包含空值的结果
+----+----------+------+
| id | name | age |
+----+----------+------+
| 1 | tom | 32 |
| 2 | zhangsan | 20 |
| 3 | lisi | 23 |
| 4 | wangwu | 25 |
| 5 | zhaoliu | 28 |
| 6 | sunqi | 26 |
| 7 | zhouba | 20 |
+----+----------+------+
7 rows in set (0.00 sec)
mysql> SELECT * FROM test WHERE age IS NULL; //查询年龄为空的结果
Empty set (0.00 sec)
update语句:
mysql> UPDATE test SET age = 27 WHERE name = 'zhouba'; //修改
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
delete语句:
mysql> DELETE FROM test WHERE id = 1; //删除某条记录
Query OK, 1 row affected (0.01 sec)
mysql> DELETE FROM test; //删除整个表的内容
Query OK, 6 rows affected (0.00 sec)
mysql> SELECT * FROM test;
Empty set (0.00 sec)
mysql> DESC test; //表内容已被删,但表结构仍存在
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(100) | NO | | NULL | |
| age | tinyint(4) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
truncate语句:
mysql> TRUNCATE test; //删除表内容
Query OK, 0 rows affected (0.01 sec)
权限类型(priv_type)
权限类型 | 代表什么? |
---|---|
ALL | 所有权限 |
SELECT | 读取内容的权限 |
INSERT | 插入内容的权限 |
UPDATE | 更新内容的权限 |
DELETE | 删除内容的权限 |
指定要操作的对象db_name.table_name
表示方式 | 意义 |
---|---|
* . * | 所有库的所有表 |
db_name | 指定库的所有表 |
db_name.table_name | 指定库的指定表 |
WITH GRANT OPTION:被授权的用户可将自己的权限副本转赠给其他用户,也就是将自己的权限完全复制给另一个用户。不建议使用。
# 授权zyq用户在数据库本机上登录访问所有数据库
mysql> GRANT ALL ON *.* TO 'zyq'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL ON *.* TO 'zyq'@'127.0.0.1' IDENTIFIED BY 'password';
# 授权用户在192.168.10.102上远程登录访问zyq数据库
mysql> GRANT ALL ON zyq.* TO 'zyq'@'192.168.10.102' IDENTIFIED BY 'password';
# 授权zyq用户在所有位置上远程登录访问所有数据库
mysql> GRANT ALL ON *.* TO 'zyq'@'%' IDENTIFIED BY 'password';
# 查看当前登录用户的授权信息
mysql> SHOW GRANTS;
# 查看指定用户zyq的授权信息
mysql> SHOW GRANTS FOR zyq;
mysql> SHOW GRANTS FOR 'zyq'@'localhost';
mysql> SHOW GRANTS FOR 'zyq'@'127.0.0.1';
# 取消权限
mysql> REVOKE ALL ON *.* FROM 'zyq'@'192.168.10.102';
mysql> FLUSH PRIVILEGES; //重读授权表