加载中...
MySQL基础语法
发表于:2023-04-01 | 分类: 数据库

数据库基本概念

  1. 数据库的英文单词:DataBase,简称:DB
  2. 什么是数据库?
    • 用于存储和管理数据的仓库
  3. 数据库的特点:
    • 持久化存储数据,本质是一个文件系统
    • 方便存储和管理数据
    • 使用统一的方式操作数据库 – SQL

MySQL 8.0安装与配置

使用Docker安装MySQL

  1. 拉取MySQL 8镜像

    docker pull mysql:8
  2. 创建数据持久化目录

    mkdir -p /path/to/mysql/data
  3. 运行MySQL容器

    docker run --name mysql8 \
      -e MYSQL_ROOT_PASSWORD=your_password \
      -p 3306:3306 \
      -v /path/to/mysql/data:/var/lib/mysql \
      -v /path/to/mysql/conf:/etc/mysql/conf.d \
      -d mysql:8

Docker环境下的配置文件

Docker中MySQL的主配置文件位于容器内的/etc/mysql/my.cnf,自定义配置可以通过挂载配置文件到/etc/mysql/conf.d目录实现。以下是一个基本的配置文件示例(custom.cnf):

[mysqld]
# 字符集设置
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

# 连接设置
port=3306
max_connections=1000

# InnoDB配置
innodb_buffer_pool_size=1G
innodb_log_file_size=256M
innodb_log_buffer_size=64M
innodb_flush_log_at_trx_commit=1

# 日志设置
slow_query_log=1
slow_query_log_file=/var/lib/mysql/slow.log
long_query_time=2

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

配置文件说明:

  • character-set-server:服务器字符集,推荐使用utf8mb4
  • max_connections:最大连接数
  • innodb_buffer_pool_size:InnoDB缓冲池大小,建议设置为总内存的50%-70%
  • innodb_log_file_size:事务日志文件大小
  • slow_query_log:开启慢查询日志

MySQL登录

  1. 容器内登录

    docker exec -it mysql8 mysql -uroot -p
  2. 主机登录

    mysql -h127.0.0.1 -uroot -p
  3. 带参数登录

    mysql --host=127.0.0.1 --user=root --password=your_password

SQL语言

SQL概述

Structured Query Language(结构化查询语言)是所有关系型数据库的标准语言。

SQL通用语法规则

  1. SQL语句可以单行或多行书写,以分号结尾
  2. 可使用空格和缩进提高可读性
  3. MySQL 8不区分大小写,但建议关键字大写
  4. 注释方式:
    • 单行注释:– 注释内容
    • 单行注释:# 注释内容(MySQL特有)
    • 多行注释:/* 注释内容 */

SQL分类

  1. DDL(Data Definition Language)数据定义语言

    • 用于定义数据库对象:数据库、表、列等
    • 关键字:CREATE、DROP、ALTER等
  2. DML(Data Manipulation Language)数据操作语言

    • 用于对表中数据进行增删改
    • 关键字:INSERT、DELETE、UPDATE等
  3. DQL(Data Query Language)数据查询语言

    • 用于查询表中记录
    • 关键字:SELECT、WHERE等
  4. DCL(Data Control Language)数据控制语言

    • 用于定义数据库访问权限和安全级别
    • 关键字:GRANT、REVOKE等

DDL:数据库操作

创建数据库

-- 创建数据库
CREATE DATABASE db_name;

-- 判断不存在则创建
CREATE DATABASE IF NOT EXISTS db_name;

-- 指定字符集创建
CREATE DATABASE db_name CHARACTER SET utf8mb4;

查询数据库

-- 查看所有数据库
SHOW DATABASES;

-- 查看创建语句
SHOW CREATE DATABASE db_name;

修改数据库

-- 修改字符集
ALTER DATABASE db_name CHARACTER SET utf8mb4;

删除数据库

-- 删除数据库
DROP DATABASE db_name;

-- 判断存在则删除
DROP DATABASE IF EXISTS db_name;

DDL:表操作

创建表

CREATE TABLE table_name (
    id INT,
    name VARCHAR(50),
    age INT,
    score DECIMAL(5,2),
    birth_date DATE,
    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

数据类型说明:

  • INT:整数类型
  • VARCHAR:可变长字符串
  • DECIMAL:精确小数
  • DATE:日期,格式YYYY-MM-DD
  • TIMESTAMP:时间戳,自动记录创建和更新时间

修改表

-- 修改表名
ALTER TABLE old_name RENAME TO new_name;

-- 添加列
ALTER TABLE table_name ADD column_name datatype;

-- 修改列
ALTER TABLE table_name MODIFY column_name new_datatype;

-- 删除列
ALTER TABLE table_name DROP column_name;

DML:数据操作

插入数据

-- 指定列插入
INSERT INTO table_name(column1, column2) VALUES(value1, value2);

-- 全列插入
INSERT INTO table_name VALUES(value1, value2, ...);

更新数据

UPDATE table_name SET column1=value1, column2=value2 WHERE condition;

删除数据

-- 删除满足条件的记录
DELETE FROM table_name WHERE condition;

-- 清空表(效率更高)
TRUNCATE TABLE table_name;

DQL:数据查询

SELECT 
    [DISTINCT] column1, column2
FROM 
    table_name
[WHERE 
    condition]
[GROUP BY 
    column]
[HAVING 
    group_condition]
[ORDER BY 
    column [ASC|DESC]]
[LIMIT 
    offset, row_count];

条件查询

-- 比较运算符
SELECT * FROM students WHERE age >= 20;

-- 范围查询
SELECT * FROM students WHERE age BETWEEN 20 AND 30;

-- IN查询
SELECT * FROM students WHERE age IN (18, 20, 22);

-- 模糊查询
SELECT * FROM students WHERE name LIKE '张%';

-- NULL值查询
SELECT * FROM students WHERE score IS NULL;

DCL:权限管理

用户管理

-- 创建用户
CREATE USER 'username'@'host' IDENTIFIED BY 'password';

-- 修改密码
ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';

-- 删除用户
DROP USER 'username'@'host';

权限管理

-- 授予权限
GRANT privileges ON database.table TO 'username'@'host';

-- 撤销权限
REVOKE privileges ON database.table FROM 'username'@'host';

-- 查看权限
SHOW GRANTS FOR 'username'@'host';
上一篇:
Node.js TypeScript#1. Modules, process参数, 文件系统基础
下一篇:
MySQL常见基础写法