Skip to main content

数据库

安装配置

见运维篇

启动服务

windows系统
net stop 服务名
net start 服务名

打开服务面板
运行 -> services.msc 打开服务设置面板 -> 找到mysql打开80

可视化工具

navicat 客户端

DataGrip 2023.3.4

注释方式

# 来注释
-- 来注释
/* 来注释 */

导出和导入

导出的时候选择,同时勾选表结构和表数据。

创建表方式

1️⃣ 使用图形化界面创建表

  1. 连接数据库
    • 打开 DataGrip → 在 Database 面板点击 + → Data Source → MySQL(或其他数据库类型)
    • 填写连接信息(主机、端口、用户名、密码)
    • 测试连接成功后点击 OK
  2. 选择数据库
    • 展开连接 → 找到你要创建表的数据库 → 右键点击 Tables → New → Table
  3. 填写表名和字段
    • 在弹出的窗口中:
      • Table name:输入表名
      • Columns
        • 点击 + 添加字段
        • 输入字段名
        • 选择类型(如 INT, VARCHAR(255), DATETIME 等)
        • 可勾选 Primary KeyNot NullAuto Increment 等选项
  4. 保存表
    • 确认无误后点击 OKApply
    • 表会出现在数据库列表中

💡 Tip:可以在界面下方切换到 DDL 标签页,DataGrip 会自动生成对应的 SQL 语句。


2️⃣ 使用 SQL 语句创建表

  1. 打开 SQL Console
右键点击数据库 → New → Console
  1. 编写 SQL
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
  1. 执行 SQL

3️⃣ 查看和修改表

  • 查看表结构:右键表 → Jump to DDLModify Table
  • 修改表结构
    • 图形化修改 → Modify Table
    • 或直接写 ALTER TABLE SQL:
ALTER TABLE users ADD COLUMN last_login DATETIME;

Schema

MySQL 里,Schema 基本上就是 数据库(Database) 的另一种叫法

基本概念

  • Schema = Database
    • 在 MySQL 中,创建一个 schema 就相当于创建一个数据库
    • Schema 用来组织和存储表、视图、存储过程、函数等对象
  • 语法
-- 创建 schema(数据库)
CREATE SCHEMA my_schema;

-- 等价于
CREATE DATABASE my_database;

注意:在 MySQL 中,CREATE SCHEMACREATE DATABASE 完全等价,功能一样。


使用 Schema

  • 切换当前 Schema / 数据库
USE my_schema;
  • 查看所有 Schema
SHOW SCHEMAS;
-- 或
SHOW DATABASES;
  • 删除 Schema
DROP SCHEMA my_schema;
-- 等价于 DROP DATABASE my_schema;

SQL语句分类

分类作用
DDL语句数据定义语句(Data Define Language),例如:创建(create),修改(alter),删除(drop)等
DML语句数据操作语句,例如:增(insert),删(delete),改(update),查(select)
DCL语句数据控制语句,例如:grant,commit,rollback等
DQL数据查询语句 select

常用语句

数据库操作

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

-- 创建数据库
CREATE DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

-- 使用数据库
USE dbname;

-- 删除数据库
DROP DATABASE IF EXISTS dbname;

-- 修改数据库字符集
ALTER DATABASE dbname CHARACTER SET utf8mb4;

-- 查看数据库创建语句(字符集等)
SHOW CREATE DATABASE dbname;

表操作

-- 查看所有表
SHOW TABLES;

-- 查看表结构
DESC 表名;

-- 查看表的建表语句
SHOW CREATE TABLE 表名;

-- 创建表
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 删除表
DROP TABLE IF EXISTS 表名;

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

-- 添加列
ALTER TABLE users ADD COLUMN email VARCHAR(100);

-- 修改列类型
ALTER TABLE users MODIFY COLUMN age SMALLINT;

-- 删除列
ALTER TABLE users DROP COLUMN email;

-- 修改表字符集
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4;

数据操作

-- 查询所有
SELECT * FROM users;

-- 条件查询
SELECT * FROM users WHERE age > 18;

-- 插入数据
INSERT INTO users (name, age) VALUES ('Alice', 25);

-- 更新数据
UPDATE users SET age = 30 WHERE name = 'Alice';

-- 删除数据
DELETE FROM users WHERE id = 1;

-- 计数
SELECT COUNT(*) FROM users;

-- 排序
SELECT * FROM users ORDER BY age DESC;

-- 分页
SELECT * FROM users LIMIT 10 OFFSET 20; -- 从第21条开始,取10条

索引与主键

-- 创建普通索引
CREATE INDEX idx_name ON users(name);

-- 创建唯一索引
CREATE UNIQUE INDEX idx_email ON users(email);

-- 删除索引
DROP INDEX idx_name ON users;

-- 添加主键
ALTER TABLE users ADD PRIMARY KEY (id);

-- 删除主键
ALTER TABLE users DROP PRIMARY KEY;

用户与权限

-- 查看用户
SELECT user, host FROM mysql.user;

-- 创建用户
CREATE USER 'testuser'@'%' IDENTIFIED BY 'password';

-- 授权
GRANT ALL PRIVILEGES ON dbname.* TO 'testuser'@'%';

-- 撤销权限
REVOKE ALL PRIVILEGES ON dbname.* FROM 'testuser'@'%';

-- 刷新权限
FLUSH PRIVILEGES;

-- 删除用户
DROP USER 'testuser'@'%';

事务与锁

-- 开始事务
START TRANSACTION;

-- 提交事务
COMMIT;

-- 回滚事务
ROLLBACK;

-- 设置事务隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

其他常用

-- 当前时间
SELECT NOW();

-- MySQL 版本
SELECT VERSION();

-- 当前数据库
SELECT DATABASE();

-- 当前用户
SELECT USER();

运算符

算术运算符

运算符说明示例
+加法SELECT 5 + 3 AS sum; 返回 8
-减法SELECT 5 - 3 AS diff; 返回 2
*乘法SELECT 5 * 3 AS product; 返回 15
/除法SELECT 5 / 2 AS quotient; 返回 2.5
DIV整数除法SELECT 5 DIV 2 AS int_div; 返回 2
% / MOD取模SELECT 5 % 2 AS remainder; 返回 1

示例说明:算术运算符用于对数值字段或常量进行数学运算。

比较运算符

运算符说明示例
=等于SELECT * FROM employees WHERE salary = 5000;
!= / <>不等于SELECT * FROM employees WHERE salary != 5000;
>大于SELECT * FROM employees WHERE salary > 5000;
<小于SELECT * FROM employees WHERE salary < 5000;
>=大于等于SELECT * FROM employees WHERE salary >= 5000;
<=小于等于SELECT * FROM employees WHERE salary <= 5000;

示例说明:比较运算符用于筛选满足条件的记录。

区间比较运算符

运算符说明示例
BETWEEN ... AND ...在区间内SELECT * FROM employees WHERE salary BETWEEN 3000 AND 8000;
NOT BETWEEN ... AND ...不在区间SELECT * FROM employees WHERE salary NOT BETWEEN 3000 AND 8000;
IN (...)在集合中SELECT * FROM employees WHERE department_id IN (10,20,30);
NOT IN (...)不在集合中SELECT * FROM employees WHERE department_id NOT IN (10,20,30);

示例说明:用于快速判断字段值是否落在指定区间或集合中。

模糊匹配

运算符说明示例
LIKE模糊匹配SELECT * FROM employees WHERE name LIKE 'A%'; (名字以A开头)
%任意长度通配符SELECT * FROM employees WHERE name LIKE '%son'; (名字以son结尾)
_单字符通配符SELECT * FROM employees WHERE name LIKE '_a%'; (第二个字符是a)
NOT LIKE不匹配SELECT * FROM employees WHERE name NOT LIKE 'A%';
REGEXP正则匹配SELECT * FROM employees WHERE name REGEXP '^A.*n$';

示例说明:模糊匹配用于部分匹配字符串或复杂模式匹配。

-- 模糊匹配,包含son的字段 
SELECT * FROM employees WHERE name LIKE '%son%';

-- 模糊匹配,查询名字以son开头的字段
SELECT * FROM employees WHERE name LIKE 'son%';

-- 模糊匹配,查询名字有A这个字,同时A的前边只有一个字
SELECT * FROM employees WHERE name LIKE '_A';

-- 查询当前mysql数据库的字符集情况
show variables like '%character%';

逻辑运算符

运算符说明示例
AND&&逻辑与SELECT * FROM employees WHERE salary > 5000 AND department_id = 10;
OR或``
NOT!逻辑非SELECT * FROM employees WHERE NOT salary > 5000;
XOR异或两个条件只能满足一个的数据

示例说明:逻辑运算符用于组合多个条件进行筛选。

-- 查询查询employee表中的 empname包含赵,同时年龄大于25的数据
select * from employee where empname like '%赵%' and empage > 25;

-- 查询查询employee表中的 empname包含赵,同时年龄大于25的数据
select * from employee where empname like '%赵%' && empage > 25;

-- 查询查询employee表中的性别为男,或年龄大于30的数据
select * from employee where empname = '男' or empage > 30;

-- 查询查询employee表中的性别为男,或年龄大于30的数据
select * from employee where empname = '男' || empage > 30;

-- 逻辑异或,两个条件只能满足一个的数据
select * from employee where empage > 30 xor empsex = '男';

null值处理

运算符 / 函数说明示例
IS NULL判断是否为 NULLSELECT * FROM employees WHERE commission IS NULL;
IS NOT NULL判断不为 NULLSELECT * FROM employees WHERE commission IS NOT NULL;
<=>安全等于(可比较 NULL)SELECT NULL <=> NULL; 返回 1
IFNULL(a,b)a 为 NULL 返回 bSELECT IFNULL(commission, 0) FROM employees;
COALESCE(a1,a2,...,an)返回第一个非 NULLSELECT COALESCE(NULL,NULL,'A'); 返回 'A'

示例说明:用于判断或处理字段为 NULL 的情况。

位运算符

运算符说明示例
&按位与SELECT 6 & 3; 返回 2
``按位或
^按位异或SELECT 6 ^ 3; 返回 5
~按位取反SELECT ~6; 返回 -7
<<左移SELECT 6 << 1; 返回 12
>>右移SELECT 6 >> 1; 返回 3

示例说明:位运算符用于对整数的二进制位进行操作,常用于权限、标志位等场景。