1.1、什么是数据库
- 概念
数据库由一批数据构成有序的集合,这些数据被存放在结构化的数据表里。数据表之间相互关联。
数据库系统提供对数据的安全控制和完整性控制。
简单来说就是存储数据的仓库。 - 数据的的发展阶段
大致划分为4个阶段
人工管理阶段
文件系统阶段
数据库系统阶段
高级数据库阶段 - 数据库种类
层次式数据库
网络式数据库
关系式数据库
不同种类的数据库按不同的数据结构来联系和组织。 - 数据库的特点
实现数据共享
减少数据冗余
采用特定的数据类型
具有较高的数据独立性
具有统一的数据控制功能 - 数据库的构成:三个部分
数据库:用于存储数据的地方。
数据库管理系统:用于管理数据库的软件。
数据库应用程序:为了提高数据库系统的处理能力所使用的管理数据库的软件补充。
1.2、专业术语
- DB(DataBase)
数据库
依照某种数据模型进行组织并存放到存储器的数据集合
存储器就是硬盘。
依照某种数据模型进行组织就是可以分不同类型存放。 - DBMS
数据库管理系统
用来操作管理数据库的服务软件 - DBS
数据库系统:就是DB+DBMS
指带有数据库并整合了数据库管理软件的服务器 - MySQL:适用于Linux系统的数据库。
- MariaDB:与MySQL同一个作者,为了避免MySQL被商业化。
MySQL目前企业使用更多,两者还是有一定的区别。不可以同时使用,会发生冲突。 - MySQL特点以及应用
主要特点
-
-
适用于中小规模、关系型数据库
-
支持Linux、Unix、Windows等多种操作系统
-
支持Python、Java、Perl、PHP等编程语言
-
- 典型的应用环境
-
-
LAMP平台、与Apache HTTP Server组合
-
LNMP平台、与Nginx组合
-
1.3、常见的数据库软件
软件名 | 开源 | 跨平台 | 厂商 |
---|---|---|---|
Oracle | 否 | 是 | 甲骨文 |
MySQL | 是 | 是 | 甲骨文 |
SQL Server | 否 | 否 | 微软 |
DB2 | 否 | 是 | IBM |
Redis | 是 | 是 | 开源软件 |
Memcached | 是 | 是 | 开源软件 |
MongoDB | 是 | 是 | 开源软件 |
1.4、数据库模型
1.5、SQL语言
- SQL语言包括4个部分
-
-
数据定义语言(DDL):DROP、CREATE、ALTER等语句 。
-
数据库操作语言(DML):INSERT(插入)、UPDATE(修改 )、DELETE(删除)语句。
-
数据查询语言(DQL):SELECT语句。
-
数据控制语言(DCL):GRANT、REVOKE、COMMIT、ROLLBACK等语句。
-
二、搭建MySQL数据库服务器
2.1、准备环境
- 官方下载地址
https://dev.mysql.com/downloads/mysql/
- 准备以下软件
[root@db1 opt]# ls
mysql-5.7.17.tar
mysql-community-client-5.7.17-1.el7.x86_64.rpm
#客户端管理软件
mysql-community-common-5.7.17-1.el7.x86_64.rpm
#数据库和客户端共享文件
mysql-community-devel-5.7.17-1.el7.x86_64.rpm
#客户端应用程序的库和头文件
mysql-community-embedded-5.7.17-1.el7.x86_64.rpm
#嵌入式函数库
mysql-community-embedded-compat-5.7.17-1.el7.x86_64.rpm
#嵌入式兼容函数库
mysql-community-embedded-devel-5.7.17-1.el7.x86_64.rpm
#头文件和库文件作为MySQL的嵌入式库文件
mysql-community-libs-5.7.17-1.el7.x86_64.rpm
#MySQL数据库客户端应用程序的共享库
mysql-community-libs-compat-5.7.17-1.el7.x86_64.rpm
#客户端应用程序的共享兼容库
mysql-community-minimal-debuginfo-5.7.17-1.el7.x86_64.rpm
mysql-community-server-5.7.17-1.el7.x86_64.rpm
mysql-community-test-5.7.17-1.el7.x86_64.rpm
2.使用yum安装
[root@db1 opt]# yum -y install mysql-community-*.rpm
[root@db1 opt]# rpm -qa | grep -i mysql
2.2、相关参数
文件 | 说明 | 备注 |
---|---|---|
/etc/my.cnf | 主配置文件 | 与这个服务相关的信息都在[mysqld]下。 |
/var/lib/mysql | 数据库目录 | |
var/log/mysqld.log | 日志文件 | 随机的初始密码也存放在这里 |
/var/lib/mysql/mysql.sock | ||
默认端口号 | 3306 | |
进程名 | mysqld | |
传输协议 | TCP | |
进程所有者 | mysql | |
进程所属组 | mysql | |
错误日志 | /var/log/mysqld.log |
ps aux | grep mysqld //查看进程调用的文件
2.3、初始配置,修改密码
- 数据库管理员是root
默认仅允许root本机链接
首次登录密码在安装软件时随机生成
随机密码存储在日志文件/var/log/mysqld.log里
连接命令是]# mysql -h数据库地址 -u用户名 -p密码 - 修改密码策略
mysql> show variables like "%password%";
-- 查看包含password字样的变量,全局变量修改的时候使用set global。
mysql> show variables like "%password%";
+---------------------------------------+--------+
| Variable_name | Value |
+---------------------------------------+--------+
| default_password_lifetime | 0 |
| disconnect_on_expired_password | ON |
| log_builtin_as_identified_by_password | OFF |
| mysql_native_password_proxy_users | OFF |
| old_passwords | 0 |
| report_password | |
| sha256_password_proxy_users | OFF |
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 8 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | MEDIUM | -- 验证方式是长度;数字;大小写;特殊字符;
| validate_password_special_char_count | 1 |
+---------------------------------------+--------+
14 rows in set (0.00 sec)
mysql> set global validate_password_policy=0; --修改策略
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_length=6; --修改密码长度
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like "%password%"; --查看变量
+---------------------------------------+-------+
| Variable_name | Value |
+---------------------------------------+-------+
| default_password_lifetime | 0 |
| disconnect_on_expired_password | ON |
| log_builtin_as_identified_by_password | OFF |
| mysql_native_password_proxy_users | OFF |
| old_passwords | 0 |
| report_password | |
| sha256_password_proxy_users | OFF |
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 6 | --密码长度,默认是8位。修改后为6位。
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | LOW | --默认为高级别MEDLIUM,设置后为低级别LOW。验证方式是长度、数字;大小写;特殊字符;
| validate_password_special_char_count | 1 |
+---------------------------------------+-------+
14 rows in set (0.00 sec)
- 永久修改密码策略
[root@db1 ~]# vim /etc/my.cnf #主配置文件
[mysqld]
validate_password_policy=0
validate_password_length=6
:wq
#重启服务后生效
[root@db1 ~]# systemctl restart mysqld //重启服务
[root@db1 ~]# mysql -uroot -p'123qqq...A'
mysql>alter user root@"localhost" identified by "123456"; --修改密码为123456
三、数据库的基本管理
3.1、客户端连接MySQL服务的几种方法
- (1)命令行
- (2)web页面
- (3)安装图形软件
- (4)编写脚本(PHP、Java、Python)
- (5)使用mysql命令
—— mysql -h服务器IP -u用户名 -p密码 [数据库名]
不加数据库名,默认进入数据库根目录
—— quit或exit退出
3.2、数据存储流程
- (1)连接数据库服务器
- (2)建库——相当于在数据库的目录下创建一个新的目录
- (3)建表——相当于新建一个文件
- (4)插入数据——类似与文件内容
- (5)断开连接
3.3、MySQL管理环境
- SQL命令使用规则(结构化查询语言)
-
-
每条SQL命令以”;“结尾
-
默认命令不支持Tab补全(98%不能补全)
-
\c终止SQL命令
-
SQL命令不区分字母大小写(密码、变量值除外)
-
3.4、常用SQL命令分类
- 管理数据库使用SQL(结构化查询语言)
-
-
DDL 数据库定义语言 如:create、alter、drop
-
DML 数据操作语言 如:insert、update、delete
-
DCL 数据控制语言 如:grant、revoke
-
DTL 数据事物语言 如:commit、rollback、savepoint
-
四、MySQL基本操作
4.1、库管理命令
- 库类似于文件夹,用来存储表
4.1.1、显示已有库
mysql> show databases; --显示已有库
+--------------------+
| Database |
+--------------------+
| information_schema | --虚拟库,在内存里,数据库目录下没有
| mysql | --mysql库是必须有的,用于描述用户访问权限。
| performance_schema |
| sys |
+--------------------+
4.1.2、显示连接用户
mysql> select user();
4.1.3、切换库
mysql> use mysql
4.1.4、显示当前所在的库
mysql> select database();
+------------+
| database() |
+------------+
| mysql |
+------------+
1 row in set (0.00 sec)
4.1.5、创建库
- 仅可以使用数字、字母、下划线、不能纯数字
- 区分字母大小写,具有唯一性
- 不可使用指令关键字、特殊字符
mysql> create database buydb;
mysql> create database gamedb;
Query OK, 1 row affected (0.00 sec)
mysql> use buydb;
mysql> select database();
+------------+
| database() |
+------------+
| buydb |
+------------+
1 row in set (0.00 sec)
4.1.6、删除库
mysql> drop database gamedb;
4.1.7、查看创建好的数据库定义
mysql> show create database buydb\G
*************************** 1. row ***************************
Database: buydb
Create Database: CREATE DATABASE `buydb` /*!40100 DEFAULT CHARACTER SET latin1 */
1 row in set (0.00 sec)
4.2、表管理命令
- 表就是存储数据的文件
4.2.1、建表
mysql> create database db1; --先创建库
Query OK, 1 row affected (0.00 sec)
mysql> create table db1.stuinfo( name char(15) , homeadd char(20) , class char(7) ); --创建表,
Query OK, 0 rows affected (0.01 sec)
[root@db1 ~]# cd /var/lib/mysql/db1/
[root@db1 db1]# ls --在对应的文件夹中存在数据,db.opt是库的配置文件.
db.opt stuinfo.frm stuinfo.ibd
mysql> create table db1.学生表2(姓名 char(4) , 住址 char(10) , 班级 char(7) )default charset=utf8; --创建能输入中文的表
Query OK, 0 rows affected (0.01 sec)
mysql> desc 学生表2; --查看表结构
4.2.2、查看创建这个表用的命令
mysql> show create table db1.学生表2; --查看创建这个表用的命令.
4.2.3、查看表结构
mysql> desc stuinfo; --查看表的结构
+---------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+-------+
| name | char(15) | YES | | NULL | |
| homeadd | char(20) | YES | | NULL | |
| class | char(7) | YES | | NULL | |
+---------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
--后四列统称为约束条件
4.2.4、删除表命令
mysql> drop table db1.学生表2;
Query OK, 0 rows affected (0.00 sec)
4.2.5、修改MySQL服务的默认字符集
[root@dbsvr1 ~]# vim /etc/my.cnf #修改运行服务配置
[mysqld]
.. ..
character_set_server=utf8
[root@dbsvr1 ~]# systemctl restart mysqld #重启服务
.. ..
[root@dbsvr1 ~]# mysql –u root -p
Enter password:
.. ..
mysql> SHOW VARIABLES LIKE 'character%'; #确认更改结果
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.03 sec)
4.3、表记录管理命令
4.3.1、插入表记录(增)
2.插入多条记录 给所有字段赋值
格式:
insert into 库名.表名 values (字段1,字段2,字段3,…),(字段1,字段2,字段3,…);
mysql> insert into db1.stuinfo values("lisi","baoding","2006"),("zhangsan","zhangjiakou","2006");
Query OK, 2 rows affected (0.00 sec)
3.插入1条记录 给某几个字段赋值
格式:
insert into 库名.表名 (字段名1,字段名2,字段名3) values (字段1,字段2,字段3,…);
mysql> insert into db1.stuinfo (name,class) values("wangwu","2007");
Query OK, 1 row affected (0.00 sec)
mysql> select * from db1.stuinfo;
+----------+-------------+-------+
| name | homeadd | class |
+----------+-------------+-------+
| tom | beijin | 2006 |
| lisi | baoding | 2006 |
| zhangsan | zhangjiakou | 2006 |
| wangwu | NULL | 2007 |
+----------+-------------+-------+
4 rows in set (0.00 sec)
- 注意事项
-
-
字段值要与字段类型相匹配
-
字符类型的字段,要用" " 号
-
依次给所有字段赋值时,字段名可以省略
-
只给部分字段赋值时,必须明确写出对应的字段名称
-
没有赋值的字段使用默认值或自增长赋值
-
4.3.2、删除表记录
- 命令格式1:条件匹配删除
-
-
delete from 库名.表名 where 条件表达式;
-
mysql> delete from db1.stuinfo where class="20004";
Query OK, 1 row affected (0.01 sec)
mysql> select * from db1.stuinfo;
+----------+-------------+-------+
| name | homeadd | class |
+----------+-------------+-------+
| tom | beijin | 2006 |
| lisi | baoding | 2006 |
| zhangsan | zhangjiakou | 2006 |
| wangwu | NULL | 2007 |
| liuliu | nmg | 2002 |
+----------+-------------+-------+
5 rows in set (0.00 sec)
- 命令格式2:删除所有记录
-
-
delete from 库名.表名;
-
mysql> delete from db1.stuinfo ;
Query OK, 5 rows affected (0.00 sec)
mysql> select * from db1.stuinfo;
Empty set (0.00 sec)
- 注意事项
-
-
不加条件删除表中所有行
-
- 删除表
mysql> drop tables stuinfo; --删除表
Query OK, 0 rows affected (0.00 sec)
4.3.3、修改表记录
- 命令格式1:批量更新
-
-
update 库名.表名 set 字段名=值 , 字段名=值 , 字段名=值,…;
-
--先增加4条记录
mysql> insert into db1.stuinfo values("tom","beijin","2006");
mysql> insert into db1.stuinfo values("lisi","baoding","2006"),("zhangsan","zhangjiakou","2006");
mysql> insert into db1.stuinfo (name,class) values("wangwu","2007");
mysql> select * from db1.stuinfo; --修改前查看表记录
+----------+-------------+-------+
| name | homeadd | class |
+----------+-------------+-------+
| tom | beijin | 2006 |
| lisi | baoding | 2006 |
| zhangsan | zhangjiakou | 2006 |
| wangwu | NULL | 2007 |
+----------+-------------+-------+
4 rows in set (0.00 sec)
mysql> update db1.stuinfo set class="1937";
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4 Changed: 4 Warnings: 0
mysql> select * from db1.stuinfo; --修改后查看表记录
+----------+-------------+-------+
| name | homeadd | class |
+----------+-------------+-------+
| tom | beijin | 1937 |
| lisi | baoding | 1937 |
| zhangsan | zhangjiakou | 1937 |
| wangwu | NULL | 1937 |
+----------+-------------+-------+
4 rows in set (0.00 sec)
- 命令格式2:条件匹配更新
-
-
update 库名.表名 set 字段名=值,字段名=值,字段值=值,… where 条件表达式;
-
mysql> update db1.stuinfo set class="2020" where name="tom"; --修改名字是tom的行
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from db1.stuinfo;
+----------+-------------+-------+
| name | homeadd | class |
+----------+-------------+-------+
| tom | beijin | 2020 |
| lisi | baoding | 1937 |
| zhangsan | zhangjiakou | 1937 |
| wangwu | NULL | 1937 |
+----------+-------------+-------+
4 rows in set (0.00 sec)
- 注意事项
-
-
字段值要与字段类型匹配
-
对于字符类型的字段,值要用" "
-
不使用where限定条件,会更新所有记录字段值
-
限定条件时,只更新匹配条件的记录的字段值
-
4.3.4、查看表记录
- 命令格式1:通过条件筛选
select 字段名 from 库名.表名 [ where 条件 ]; - 命令格式1:显示表内全部
select * from 库名.表名 ; - 注意事项
-
-
*表示所有字段
-
查看当前库表记录时库名可以省略
-
字段列表决定显示列个数
-
条件决定显示行的个数
-
mysql> show tables; --查看当前库下的所有表
+---------------+
| Tables_in_db1 |
+---------------+
| stuinfo |
+---------------+
1 row in set (0.00 sec)
mysql> select * from db1.stuinfo; --查看表记录
+----------+-------------+-------+
| name | homeadd | class |
+----------+-------------+-------+
| tom | beijin | 2020 |
| lisi | baoding | 1937 |
| zhangsan | zhangjiakou | 1937 |
| wangwu | NULL | 1937 |
+----------+-------------+-------+
4 rows in set (0.00 sec)
mysql> select * from db1.stuinfo where class="2020"; --查看class为2020的
+------+---------+-------+
| name | homeadd | class |
+------+---------+-------+
| tom | beijin | 2020 |
+------+---------+-------+
1 row in set (0.00 sec)
评论(0)
您还未登录,请登录后发表或查看评论