1 数据库的基本概念
1.1 为什么要学数据库?
- 之前我们如果想将一些数据实现永久化存储,可以怎么做呢?没错。使用IO流的技术将数据保存到本地文件中
- 但是接下来我有这样一个需求:将下面的user.txt文件中的王五年龄修改为35
张三 23 男 李四 24 男 王五 25 女 赵六 26 女 周七 27 男
我们要如何实现呢?
- 可以采用字符缓冲流,将每一行数据读取出来,封装为User对象。将多个User对象保存到集合中
- 然后遍历集合,将王五对象的年龄修改为35,再重新将集合中的对象信息写回到文件中
- 这一套操作太麻烦了,而现在我们有一种更加方便的方式来完成这个需求了,这种方式就是数据库!
1.2 什么是数据库?
- 用于存储和管理数据的仓库
- 英文单词为:DataBase,简称DB
1.3 数据库的好处?
- 可以持久化存储数据
- 方便存储和管理数据
- 使用了统一的方式操作数据库 – SQL
1.4 常见的数据库有哪些?
2 MySQL数据库的介绍和安装
2.1 MySQL数据库介绍
- 小型的数据库
- 开源免费(6版本之前免费)
- 所属于Oracle公司
2.2 MySQL数据库安装
1.通过secureCRT工具连接Linux系统
2.上传 mysql 的安装包
2.1 在/usr/local下新建mysql目录,用于存放mysql的安装包
cd /usr/local
mkdir mysql
2.2 将文件上传到/usr/local/mysql目录
alt + p —>cd /usr/local/mysql -------> put d:/setup/mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar
3.进入mysql目录,解压缩mysql 的安装包
cd /usr/local/mysql
tar -xvf mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar
4.进入mysql目录,安装客户端
cd /usr/local/mysql
rpm -ivh mysql-community-client-5.7.27-1.el7.x86_64.rpm --force --nodeps
5.进入mysql目录,安装服务端
cd /usr/local/mysql
rpm -ivh mysql-community-server-5.7.27-1.el7.x86_64.rpm --force --nodeps
6.修改mysql默认字符集 按i启用编辑,esc->:wq 保存退出
vi /etc/my.cnf
在文件最后添加如下内容:
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
7.启动mysql服务
systemctl start mysqld.service
8.登录mysql
查看初始mysql密码:cat /var/log/mysqld.log
在root@localhost: 后面的就是初始密码
mysql -u root -p 敲回车,输入密码
9.修改mysql登录密码
set global validate_password_policy=0;
set global validate_password_length=1;
set password=password(‘root’);
10.授予远程连接权限
授权
grant all privileges on . to ‘root’ @’%’ identified by ‘root’;
刷新
flush privileges;
退出mysql客户端界面
exit
11.关闭Linux系统防火墙
systemctl status firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld.service
12.重启虚拟机,使用SQLYog工具连接mysql
2.3 MySQL数据库登录
- sqlyog工具登录mysql
3 SQL语句
3.1 数据库、数据表、数据的关系介绍
- 数据库
- 用于存储和管理数据的仓库
- 一个库中可以包含多个数据表
- 数据表
- 数据库最重要的组成部分之一
- 它由纵向的列和横向的行组成(类似excel表格)
- 可以指定列名、数据类型、约束等
- 一个表中可以存储多条数据
- 数据
- 想要永久化存储的数据
3.2 SQL介绍
- 什么是SQL
Structured Query Language:结构化查询语言
其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式可能会存在一些不一样的地方,我们称为“方言”。
SQL通用语法
SQL 语句可以单行或多行书写,以分号结尾。
可使用空格和缩进来增强语句的可读性。
MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。
数据库的注释:
单行注释:-- 注释内容 #注释内容(mysql特有)
多行注释:/* 注释内容 */
SQL分类
DDL(Data Definition Language)数据定义语言
用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等
DML(Data Manipulation Language)数据操作语言
用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等
DQL(Data Query Language)数据查询语言
用来查询数据库中表的记录(数据)。关键字:select, where 等
DCL(Data Control Language)数据控制语言(了解)
- 用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等
3.3 DDL-操作数据库
- R(Retrieve):查询
- 查询所有数据库
-- 查询所有数据库 SHOW DATABASES;
- 查询某个数据库的创建语句
-- 标准语法 SHOW CREATE DATABASE 数据库名称; -- 查看mysql数据库的创建格式 SHOW CREATE DATABASE mysql;
C(Create):创建
- 创建数据库
-- 标准语法 CREATE DATABASE 数据库名称; -- 创建db1数据库 CREATE DATABASE db1; -- 创建一个已存在的数据库会报错 -- 错误代码:1007 Can't create database 'db1'; database exists CREATE DATABASE db1;
- 创建数据库(判断,如果不存在则创建)
-- 标准语法 CREATE DATABASE IF NOT EXISTS 数据库名称; -- 创建数据库db2(判断,如果不存在则创建) CREATE DATABASE IF NOT EXISTS db2;
- 创建数据库、并指定字符集
-- 标准语法 CREATE DATABASE 数据库名称 CHARACTER SET 字符集名称; -- 创建数据库db3、并指定字符集utf8 CREATE DATABASE db3 CHARACTER SET utf8; -- 查看db3数据库的字符集 SHOW CREATE DATABASE db3;
- 练习:创建db4数据库、如果不存在则创建,指定字符集为gbk
-- 创建db4数据库、如果不存在则创建,指定字符集为gbk CREATE DATABASE IF NOT EXISTS db4 CHARACTER SET gbk; -- 查看db4数据库的字符集 SHOW CREATE DATABASE db4;
U(Update):修改
- 修改数据库的字符集
-- 标准语法 ALTER DATABASE 数据库名称 CHARACTER SET 字符集名称; -- 修改数据库db4的字符集为utf8 ALTER DATABASE db4 CHARACTER SET utf8; -- 查看db4数据库的字符集 SHOW CREATE DATABASE db4;
D(Delete):删除
- 删除数据库
-- 标准语法 DROP DATABASE 数据库名称; -- 删除db1数据库 DROP DATABASE db1; -- 删除一个不存在的数据库会报错 -- 错误代码:1008 Can't drop database 'db1'; database doesn't exist DROP DATABASE db1;
- 删除数据库(判断,如果存在则删除)
-- 标准语法 DROP DATABASE IF EXISTS 数据库名称; -- 删除数据库db2,如果存在 DROP DATABASE IF EXISTS db2;
使用数据库
- 查询当前正在使用的数据库名称
-- 查询当前正在使用的数据库 SELECT DATABASE();
- 使用数据库
-- 标准语法 USE 数据库名称; -- 使用db4数据库 USE db4;
3.4 DDL-操作数据表
- R(Retrieve):查询
- 查询数据库中所有的数据表
-- 使用mysql数据库 USE mysql; -- 查询库中所有的表 SHOW TABLES;
- 查询表结构
-- 标准语法 DESC 表名; -- 查询user表结构 DESC user;
- 查询表字符集
-- 标准语法 SHOW TABLE STATUS FROM 库名 LIKE '表名'; -- 查看mysql数据库中user表字符集 SHOW TABLE STATUS FROM mysql LIKE 'user';
C(Create):创建
- 创建数据表
- 标准语法
CREATE TABLE 表名( 列名1 数据类型1, 列名2 数据类型2, .... 列名n 数据类型n ); -- 注意:最后一列,不需要加逗号
- 数据类型
1. int:整数类型 * age int 2. double:小数类型 * score double(5,2) * price double 3. date:日期,只包含年月日 yyyy-MM-dd 4. datetime:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss 5. timestamp:时间戳类型 包含年月日时分秒 yyyy-MM-dd HH:mm:ss * 如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值 6. varchar:字符串 * name varchar(20):姓名最大20个字符 * zhangsan 8个字符 张三 2个字符 char 字符
- 创建数据表 ```sql -- 使用db3数据库 USE db3; -- 创建一个product商品表 CREATE TABLE product( id INT, -- 商品编号 NAME VARCHAR(30), -- 商品名称 price DOUBLE, -- 商品价格 stock INT, -- 商品库存 insert_time DATE -- 上架时间 );
复制表
-- 标准语法 CREATE TABLE 表名 LIKE 被复制的表名; -- 复制product表到product2表 CREATE TABLE product2 LIKE product;
U(Update):修改
- 修改表名
-- 标准语法 ALTER TABLE 表名 RENAME TO 新的表名; -- 修改product2表名为product3 ALTER TABLE product2 RENAME TO product3;
- 修改表的字符集
-- 标准语法 ALTER TABLE 表名 CHARACTER SET 字符集名称; -- 查看db3数据库中product3数据表字符集 SHOW TABLE STATUS FROM db3 LIKE 'product3'; -- 修改product3数据表字符集为gbk ALTER TABLE product3 CHARACTER SET gbk; -- 查看db3数据库中product3数据表字符集 SHOW TABLE STATUS FROM db3 LIKE 'product3';
- 添加一列
-- 标准语法 ALTER TABLE 表名 ADD 列名 数据类型; -- 给product3表添加一列color ALTER TABLE product3 ADD color VARCHAR(10);
- 修改列名称和数据类型
-- 修改数据类型 标准语法 ALTER TABLE 表名 MODIFY 列名 新数据类型; -- 将color数据类型修改为int ALTER TABLE product3 MODIFY color INT; -- 查看product3表详细信息 DESC product3; -- 修改列名和数据类型 标准语法 ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型; -- 将color修改为address,数据类型为varchar ALTER TABLE product3 CHANGE color address VARCHAR(30); -- 查看product3表详细信息 DESC product3;
- 删除列
-- 标准语法 ALTER TABLE 表名 DROP 列名; -- 删除address列 ALTER TABLE product3 DROP address;
D(Delete):删除
- 删除数据表
-- 标准语法 DROP TABLE 表名; -- 删除product3表 DROP TABLE product3; -- 删除不存在的表,会报错 -- 错误代码:1051 Unknown table 'product3' DROP TABLE product3;
- 删除数据表(判断,如果存在则删除)
-- 标准语法 DROP TABLE IF EXISTS 表名; -- 删除product3表,如果存在则删除 DROP TABLE IF EXISTS product3;