目录
MySQL 安装与配置
MySQL 是广泛使用的关系型数据库管理系统。
以下是 MySQL 在 Linux 和 Windows 上的安装与配置步骤。
在 Linux 上安装 MySQL
1. 更新包索引
sudo apt update
2. 安装 MySQL
sudo apt install mysql-server
3. 启动 MySQL 服务并配置
sudo systemctl start mysql
sudo systemctl enable mysql
4. 运行安全安装脚本
sudo mysql_secure_installation
该脚本将引导您完成设置 root 密码、删除匿名用户、禁用远程 root 登录和删除测试数据库等步骤。
5. 验证 MySQL 服务状态
sudo systemctl status mysql
6. 登录 MySQL
sudo mysql -u root -p
在 Windows 上安装 MySQL
1. 下载 MySQL 安装包
从 MySQL 官方网站 MySQL Downloads 下载 Windows 安装程序。
2. 运行安装程序
双击下载的安装程序,按照向导进行安装。
3. 选择安装类型
选择合适的安装类型(如 Developer Default、Server only 等)。
4. 配置 MySQL
按照提示配置 MySQL Server,如设置 root 用户密码、选择默认字符集等。
5. 启动 MySQL
安装完成后,MySQL 服务会自动启动。如果未启动,可以手动启动服务:
net start mysql
6. 登录 MySQL
打开命令提示符,输入:
mysql -u root -p
MySQL 基本配置
1. 修改配置文件
MySQL 的配置文件通常位于 /etc/mysql/my.cnf(Linux)
或 C:\ProgramData\MySQL\MySQL Server x.x\my.ini(Windows)
2. 常见配置选项
绑定地址(默认只允许本地连接):
bind-address = 0.0.0.0
最大连接数:
max_connections = 200
字符集:
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
3. 重启 MySQL 服务
配置修改后需要重启 MySQL 服务以应用更改。
在 Linux 上:
sudo systemctl restart mysql
在 Windows 上:
net stop mysql
net start mysql
用户和权限管理
1. 创建新用户
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
2. 授予权限
GRANT ALL PRIVILEGES ON database.* TO 'username'@'host';
3. 刷新权限
FLUSH PRIVILEGES;
4. 查看用户和权限
SELECT user, host FROM mysql.user;
SHOW GRANTS FOR 'username'@'host';
5. 删除用户
DROP USER 'username'@'host';
MySQL 数据库基本概念
MySQL 是一个流行的开源关系型数据库管理系统(RDBMS)。
它使用 SQL(结构化查询语言)来管理和操作数据。
有以下是一些 MySQL 数据库的基本概念:
1. 数据库(Database)
数据库是一个组织化的数据集合。在 MySQL 中,一个数据库包含多个表。
每个数据库都有一个名称,通过这个名称可以进行访问和操作。
2. 表(Table)
表是数据存储的基本单位,它由行和列组成。每张表都有一个唯一的名称。在一个表中,列(或字段)定义了数据的类型和结构,而行(或记录)存储了具体的数据。
3. 列(Column)
列是表中的一个垂直部分,每列包含一种特定的数据类型,例如整数、字符串、日期等。列定义了表的结构和数据属性。
4. 行(Row)
行是表中的一个水平部分,每行包含了一条记录的数据。行由多个列的数据组成,每一行代表一个实体的数据。
5. 索引(Index)
索引是一个数据结构,用于加速查询操作。它通过在表中创建额外的数据结构来提高查询效率。常见的索引类型有主键索引、唯一索引和全文索引。
6. 主键(Primary Key)
主键是表中一列或多列的组合,用于唯一标识表中的每一行。一个表只能有一个主键,主键中的列不能为空且必须唯一。
7. 外键(Foreign Key)
外键是一个或多个列的组合,用于建立和强制两个表之间的关系。外键列的值必须匹配另一表中主键或唯一键的值,从而实现表之间的参照完整性。
8. 约束(Constraint)
约束是应用在表列上的规则,用于确保数据的完整性和一致性。常见的约束有:
NOT NULL:列不能包含 NULL 值。
UNIQUE:列中的所有值必须唯一。
PRIMARY KEY:主键约束,唯一标识每一行。
FOREIGN KEY:外键约束,用于建立表之间的关系。
CHECK:确保列中的值满足特定条件。
9. 视图(View)
视图是基于一个或多个表的查询结果集。视图本质上是一个虚拟表,不存储数据,只存储查询逻辑。视图可以简化复杂查询并增强数据的安全性。
10. 存储过程(Stored Procedure)
存储过程是预编译的 SQL 代码块,存储在数据库服务器上,可以通过调用来执行特定任务。存储过程可以包含逻辑控制语句、变量和条件判断等。
11. 触发器(Trigger)
触发器是自动执行的 SQL 代码块,当表上的特定事件(如插入、更新或删除)发生时触发执行。触发器可以用于数据验证、自动填充等。
12. 事务(Transaction)
事务是一组操作的集合,这些操作要么全部执行成功,要么全部回滚。事务确保了数据库操作的原子性、一致性、隔离性和持久性(ACID 属性)。
13. SQL 语句
SQL 是用于访问和操作数据库的标准语言。常见的 SQL 语句包括:
SELECT:查询数据。
INSERT:插入数据。
UPDATE:更新数据。
DELETE:删除数据。
CREATE:创建数据库和表等对象。
ALTER:修改数据库和表等对象。
DROP:删除数据库和表等对象。
数据库和表的管理
数据库管理
创建数据库
CREATE DATABASE mydatabase;
查看现有数据库
SHOW DATABASES;
选择数据库
在执行操作之前,您需要选择要操作的数据库。
USE mydatabase;
修改数据库
MySQL 没有直接修改数据库名称的 SQL 语句,通常需要通过备份和恢复的方式实现。
以下是一个备份和恢复的示例:
导出数据库:
mysqldump -u username -p mydatabase > mydatabase.sql
创建新数据库并导入数据:
CREATE DATABASE newdatabase;
mysql -u username -p newdatabase < mydatabase.sql
删除旧数据库:
DROP DATABASE mydatabase;
删除数据库
使用 DROP DATABASE 语句删除一个数据库及其所有表。
DROP DATABASE mydatabase;
数据表管理
创建表
使用CREATE TABLE 语句创建一个新表。以下是一个包含各种数据类型和约束的
示例:
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
hire_date DATE NOT NULL,
salary DECIMAL(10, 2) CHECK (salary > 0)
);
查看现有表
使用 SHOW TABLES 语句查看当前数据库中的所有表。
SHOW TABLES;
查看表结构
使用 DESCRIBE 或 SHOW COLUMNS 语句查看表的结构。
DESCRIBE employees;
-- 或
SHOW COLUMNS FROM employees;
修改表结构
使用 ALTER TABLE 语句修改表的结构,如添加、修改或删除列。
添加列:
ALTER TABLE employees ADD COLUMN department VARCHAR(50);
修改列:
ALTER TABLE employees MODIFY COLUMN salary DECIMAL(12, 2);
重命名列:
ALTER TABLE employees CHANGE COLUMN department dept VARCHAR(50);
删除列:
ALTER TABLE employees DROP COLUMN dept;
添加约束:
ALTER TABLE employees ADD CONSTRAINT chk_salary CHECK (salary > 0);
重命名表
使用 RENAME TABLE 语句重命名表。
RENAME TABLE employees TO staff;
删除表
使用 DROP TABLE 语句删除一个表。
DROP TABLE employees;
复制表
复制表结构及其数据(不复制索引和约束):
CREATE TABLE new_employees AS SELECT * FROM employees;
仅复制表结构(无数据):