Mysql数据库基础和增删改查操作
发布人:shili8
发布时间:2024-11-20 12:01
阅读次数:0
**MySQL 数据库基础**
###什么是 MySQL?
MySQL 是一种开源的关系型数据库管理系统,支持多种编程语言。它被广泛用于 Web 应用、企业应用等。
### MySQL 的特点* 支持 ACID (Atomicity, Consistency, Isolation, Durability) 原则* 支持事务处理* 支持存储过程和函数* 支持视图* 支持索引和分区* 支持多种编程语言### MySQL 的安装和配置#### Windows 安装1. 下载 MySQL Community Server 的安装包2. 运行安装程序,选择安装位置和组件3. 配置 MySQL服务4. 启动 MySQL服务#### Linux 安装1. 使用 apt-get 或 yum 安装 MySQL2. 配置 MySQL服务3. 启动 MySQL服务### MySQL 的基本概念* **数据库**:一个数据库是指一个独立的存储空间,包含多个表。
* **表**:一个表是指一个二维数据结构,包含多行和多列。
* **行**:一行代表一个记录。
* **列**:一列代表一个字段。
### MySQL 的增删改查操作#### 增加数据
sql-- 创建一个新表CREATE TABLE users ( id INT AUTO_INCREMENT, name VARCHAR(255), email VARCHAR(255), PRIMARY KEY (id) ); -- 插入一条记录INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com'); -- 插入多条记录INSERT INTO users (name, email) VALUES ('Jane Doe', 'jane@example.com'), ('Bob Smith', 'bob@example.com');
#### 删除数据
sql-- 删除一条记录DELETE FROM users WHERE id =1; -- 删除多条记录DELETE FROM users WHERE name IN ('John Doe', 'Jane Doe'); -- 删除所有记录TRUNCATE TABLE users;
#### 修改数据
sql-- 更新一条记录UPDATE users SET email = 'john2@example.com' WHERE id =1; -- 更新多条记录UPDATE users SET email = 'example.com' WHERE name IN ('John Doe', 'Jane Doe'); -- 更新所有记录UPDATE users SET email = 'example.com';
#### 查询数据
sql-- 查询一条记录SELECT * FROM users WHERE id =1; -- 查询多条记录SELECT * FROM users WHERE name IN ('John Doe', 'Jane Doe'); -- 查询所有记录SELECT * FROM users;
### MySQL 的索引和分区#### 索引
sql-- 创建一个索引CREATE INDEX idx_name ON users (name); -- 删除一个索引DROP INDEX idx_name ON users;
#### 分区
sql-- 创建一个分区表CREATE TABLE users ( id INT AUTO_INCREMENT, name VARCHAR(255), email VARCHAR(255), PRIMARY KEY (id) ) ENGINE=InnoDB PARTITION BY RANGE (YEAR(date)) ( PARTITION p2010 VALUES LESS THAN (2010), PARTITION p2011 VALUES LESS THAN (2011), PARTITION p2012 VALUES LESS THAN (2012) ); -- 插入一条记录INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com'); -- 查询一个分区SELECT * FROM users WHERE YEAR(date) =2010;
### MySQL 的存储过程和函数#### 存储过程
sql-- 创建一个存储过程DELIMITER // CREATE PROCEDURE sp_get_users() BEGIN SELECT * FROM users; END// DELIMITER ; -- 调用一个存储过程CALL sp_get_users();
#### 函数
sql-- 创建一个函数DELIMITER // CREATE FUNCTION fn_get_user(id INT) RETURNS VARCHAR(255) BEGIN DECLARE name VARCHAR(255); SELECT name INTO name FROM users WHERE id = id; RETURN name; END// DELIMITER ; -- 调用一个函数SELECT fn_get_user(1) AS name;
### MySQL 的视图#### 视图
sql-- 创建一个视图CREATE VIEW v_users ASSELECT * FROM users; -- 查询一个视图SELECT * FROM v_users;
### MySQL 的事务处理#### 事务
sql-- 开始一个事务START TRANSACTION; -- 插入一条记录INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com'); -- 回滚一个事务ROLLBACK; -- 提交一个事务COMMIT;
### MySQL 的多种编程语言#### PHP
php// 连接到数据库$conn = new mysqli('localhost', 'username', 'password', 'database'); // 查询一条记录$result = $conn->query("SELECT * FROM users WHERE id =1"); // 输出一条记录while ($row = $result->fetch_assoc()) { echo $row['name'] . " "; } // 关闭连接$conn->close();
#### Python
# 连接到数据库import mysql.connectorconn = mysql.connector.connect( host='localhost', user='username', password='password', database='database' ) # 查询一条记录cursor = conn.cursor() cursor.execute("SELECT * FROM users WHERE id =1") # 输出一条记录row = cursor.fetchone() print(row['name']) # 关闭连接conn.close()
### MySQL 的安全性#### 权限控制
sql-- 给一个用户授权GRANT SELECT, INSERT, UPDATE, DELETE ON users TO 'username'@'localhost'; -- 取消一个用户的授权REVOKE SELECT, INSERT, UPDATE, DELETE ON users FROM 'username'@'localhost';
#### 加密
sql-- 创建一个加密表CREATE TABLE encrypted_users ( id INT AUTO_INCREMENT, name VARCHAR(255), email VARCHAR(255), password VARBINARY(255), PRIMARY KEY (id) ); -- 插入一条记录INSERT INTO encrypted_users (name, email, password) VALUES ('John Doe', 'john@example.com', AES_ENCRYPT('password'));
### MySQL 的性能优化#### 索引
sql-- 创建一个索引CREATE INDEX idx_name ON users (name); -- 删除一个索引DROP INDEX idx_name ON users;
#### 分区
sql-- 创建一个分区表CREATE TABLE users ( id INT AUTO_INCREMENT, name VARCHAR(255), email VARCHAR(255), PRIMARY KEY (id) ) ENGINE=InnoDB PARTITION BY RANGE (YEAR(date)) ( PARTITION p2010 VALUES LESS THAN (2010), PARTITION p2011 VALUES LESS THAN (2011), PARTITION p2012 VALUES LESS THAN (2012) );
#### 缓存
sql-- 创建一个缓存表CREATE TABLE cached_users ( id INT AUTO_INCREMENT, name VARCHAR(255), email VARCHAR(255), PRIMARY KEY (id) ) ENGINE=MEMORY; -- 插入一条记录INSERT INTO cached_users (name, email) VALUES ('John Doe', 'john@example.com');
### MySQL 的高可用性#### 主从复制
sql-- 创建一个主从复制CREATE USER 'slave_user'@'%' IDENTIFIED BY 'slave_password'; GRANT RELOAD, SUPER ON *.* TO 'slave_user'@'%'; CHANGE MASTER TO MASTER_HOST='master_host', MASTER_PORT=3306, MASTER_USER='slave_user', MASTER_PASSWORD='slave_password'; START SLAVE;
#### 分布式事务
sql-- 创建一个分布式事务CREATE TABLE distributed_users ( id INT AUTO_INCREMENT, name VARCHAR(255), email VARCHAR(255), PRIMARY KEY (id) ) ENGINE=InnoDB; INSERT INTO distributed_users (name, email) VALUES ('John Doe', 'john@example.com'); COMMIT;
### MySQL 的扩展性#### 分布式存储
sql-- 创建一个分布式存储CREATE TABLE distributed_users ( id INT AUTO_INCREMENT, name VARCHAR(255), email VARCHAR(255), PRIMARY KEY (id) ) ENGINE=InnoDB; INSERT INTO distributed_users (name, email) VALUES ('John Doe', 'john@example.com'); COMMIT;
#### 分布式计算
sql-- 创建一个分布式计算CREATE TABLE distributed_users ( id INT AUTO_INCREMENT, name VARCHAR(255), email VARCHAR(255), PRIMARY KEY (id) ) ENGINE=InnoDB; INSERT INTO distributed_users (name, email) VALUES ('John Doe', 'john@example.com'); COMMIT;
### MySQL 的安全性#### 权限控制
sql-- 给一个用户授权GRANT SELECT, INSERT, UPDATE, DELETE ON users TO 'username'@'localhost'; -- 取消一个用户的授权REVOKE SELECT, INSERT, UPDATE, DELETE ON users FROM