前言
最近刚刚复习了关系型数据库MySQL,现进行简单总结。
知识点
1. 数据库
DataBase(简称DB),用于存储和管理数据的仓库。
1.1 数据库的特点:
可持久化存储数据(数据库其实就是一个文件系统);
可高效存储和管理数据;
支持统一的方式来操作数据库(对于关系型数据库——SQL;对于非关系型数据库——NoSQL)
1.2 常见的数据库:
关系型数据库——MySQL(由于开源免费,功能强大支持千万级别的并发访问,web应用中常用)、Oracle、DB2(常用于银行系统)、Microsoft Sql Server(C#、.net常用)、SQLite(应用手机端的嵌入式小型数据库)
非关系型数据库——Redis(key-value)、HBase(列数据库)、MongoDB(文件数据库)
2. SQL
Structured Query Language,结构化查询语言,定义了操作所有RDBMS的规则,对于每一种数据库操作实现的具体方式可能有所不同(SQL语句有差异)
2.1 SQL通用语法:
- SQL语句可单行书写,可多行书写,每条语句最后以‘;’分号结尾
- 对于变量(表名、列名、值)可使用'_'来增强可读性
- SQL语句中可使用空格和缩进来增加语句的可读性
- MySQL数据库的SQL语句不区分大小写,建议关键字使用大写
- MySQL数据库支持三种注释:单行注释—— # XXXX; -- XXXX; 多行注释—— /* xxxx */,其中# XXX是MySQL特有的注释方式,其他数据库支持-- xxxx;和/* xxx */两种注释(注意-- xxx注释符号和注释内容中间有空格,如果没有空格会有结果但是SQL语句执行后会报错)
show databases; -- 显示所有数据库
use db1; # 使用db1数据库
/*
创建数据库db2
*/
create database db2;
2.2 SQL分类:DDL(数据定义语言)、DML(数据操作语言)、DQL(数据查询语言)、DCL(数据控制语言)下面以MySQL数据库为例进行详细总结。
3. 安装部署MySQL
MySQL数据库是目前应用最广的关系型数据库,安装部署方法参考链接:https://blog.csdn.net/bobo553443/article/details/81383194
MySQL Shell启动方式一共有两种。
3.1 MySQL Shell
一种是直接安装MySQL Shell应用程序,然后输出 \sql、\connect root@127.0.0.1并输入root用户的密码进入root用户操作MySQL shell环境。
3.2 MySQL Server
另一种是安装MySQL Server之后使用cmd进入其安装目录的bin目录(要么cmd直接cd进入;要么文件资源管理器的文件目录中直接输入cmd进入)输入 mysql -u root -p再输入密码即可
退出Shell环境可使用exit命令/quit命令。
MySQL提供可视化操作界面,使用MySQL Workbench应用程序连接server,根据需要建立schema(数据库)和表即可
MySQL安装目录中可以看到对于数据库而言对应的是一个文件夹,数据表对应一个文件。
4. DDL
Data Definition Language,数据定义语言,主要涉及数据库和数据表的CRUD操作。C(create)R(retrieve)U(update)D(delete)
4.1 数据库
4.1.1 查询数据库:
1. show databases;
2. show create database db1; 查看db1数据库的字符集character
/* 查询数据库:
1. show databases;
2. show create database db1; 查看db1数据库的字符集character
*/
mysql> show databases; -- 查看当前所有的数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sakila |
| sys |
| world |
+--------------------+
6 rows in set (0.00 sec)
mysql> show create database mysql; -- 查看mysql数据库的字符集
+----------+---------------------------------------------------------------------------------------------------------------------------------+
| Database | Create Database |
+----------+---------------------------------------------------------------------------------------------------------------------------------+
| mysql | CREATE DATABASE `mysql` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+---------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
4.1.2 创建数据库:
1. create database db1;
2. create database if not exists db1; -- 如果db1存在会报错,可在创建时进行判断。 如果db1不存在则创建数据库db1;如果存在则不做任何操作
3. create database db1 character set gbk; -- 设置数据库db1的字符集为gbk(可支持中文)
4. create databases if not exists db1 character set gbk;
/* 创建数据库:
1. create database db1;
2. create database if not exists db1; -- 如果db1存在会报错,可在创建时进行判断。 如果db1不存在则创建数据库db1;如果存在则不做任何操作
3. create database db1 character set gbk; -- 设置数据库db1的字符集为gbk(可支持中文)
4. create databases if not exists db1 character set gbk;
*/
mysql> create database db1; -- 创建数据库db1
Query OK, 1 row affected (0.38 sec)
mysql> show databases; -- 使用show查看到数据库db1创建成功
+--------------------+
| Database |
+--------------------+
| db1 |
| information_schema |
| mysql |
| performance_schema |
| sakila |
| sys |
| world |
+--------------------+
7 rows in set (0.00 sec)
mysql> create database db1; -- 在db1数据库已存在的情况下再次创建报错
ERROR 1007 (HY000): Can't create database 'db1'; database exists
mysql> create database if not exists db1; -- 增加判断条件,如果db1已存在不做任何操作
Query OK, 1 row affected, 1 warning (0.10 sec)
mysql> create database if not exists db2 character set gbk; -- 通用的创建数据库的标准语句
Query OK, 1 row affected (0.12 sec)
mysql> show create database db2;
+----------+------------------------------------------------------------------------------------------------+
| Database | Create Database |
+----------+------------------------------------------------------------------------------------------------+
| db2 | CREATE DATABASE `db2` /*!40100 DEFAULT CHARACTER SET gbk */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+------------------------------------------------------------------------------------------------+
1 row in set (0.05 sec)
4.1.3 删除数据库
1. drop database db1;
2. drop database if exists db1; -- 先判断db1是否存在,若存在则删除;若不存在则不做操作
/* 删除数据库:
1. drop database db1;
2. drop database if exists db1; -- 先判断db1是否存在,若存在则删除;若不存在则不做操作
*/
mysql> drop database db2; -- 删除数据库db2
Query OK, 0 rows affected (0.23 sec)
mysql> show databases; -- 显示数据库db2删除成功
+--------------------+
| Database |
+--------------------+
| db1 |
| information_schema |
| mysql |
| performance_schema |
| sakila |
| sys |
| world |
+--------------------+
7 rows in set (0.00 sec)
mysql> show create database db2; -- 展示db2字符信息,但此时db2已被删除所以报错
ERROR 1049 (42000): Unknown database 'db2'
mysql> drop database if exists db2; -- 删除数据库前先做判断,如果存在则删除
Query OK, 0 rows affected, 1 warning (0.09 sec)
4.1.4 修改数据库
alter database db1 character set gbk; --修改数据库db1的字符集为gbk
/* 修改数据库:
alter database db1 character set gbk; --修改数据库db1的字符集为gbk
*/
mysql> alter database db1 character set gbk; -- 修改db1字符集为gbk
Query OK, 1 row affected (0.18 sec)
mysql> show create database db1; -- 查看db1字符集,字符集修改为gbk
+----------+------------------------------------------------------------------------------------------------+
| Database | Create Database |
+----------+------------------------------------------------------------------------------------------------+
| db1 | CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET gbk */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
4.1.5 使用数据库
1. use db1; -- 使用数据库db1
2. select database(); # 查看当前使用的是哪个数据库
/* 使用数据库:
1. use db1; -- 使用数据库db1
2. select database(); # 查看当前使用的是哪个数据库
*/
mysql> select database(); -- 查看当前使用的数据库
+------------+
| database() |
+------------+
| mysql |
+------------+
1 row in set (0.00 sec)
mysql> use db1; -- 使用db1数据库
Database changed
mysql> select database(); -- 查看当前数据库已改变为db1
+------------+
| database() |
+------------+
| db1 |
+------------+
1 row in set (0.00 sec)
4.2 数据表
4.2.1 查询表
1. show tables; -- 查看当前数据库下所有的表
2. desc table1; -- 查看表table1的表结构(列名 列属性 列限制)
/* 查询表:
1. show tables; -- 查看当前数据库下所有的表
2. desc table1; -- 查看表table1的表结构(列名 列属性 列限制)
3. show create table table1; -- 查看table1的字符集
*/
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| table1 |
+---------------+
1 row in set (0.01 sec)
mysql> desc table1; -- 查看table1的表结构
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(4) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| sex | varchar(1) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.15 sec)
4.2.2 创建表
/* 创建表:
1.create table table1(
列名