信息(information)是人脑对现实性世界事物的存在方式、运动状态及事物之间联系的抽象反应。
数据库的发展
1.人工管理阶段 1950年之前
2.文件系统阶段 1950-1960年
3.数据库阶段 1960-至今
我们这里介绍的是传统的关系性数据库——MySQL,主要介绍它的SQL语句的使用
数据表的管理和表中数据的操纵
MySQL 是一个流行的关系型数据库管理系统 (RDBMS),它使用 SQL (结构化查询语言) 来管理和查询数据。以下是一些基本的 SQL 语句示例,用于在 MySQL 数据库中执行各种操作。
1. 创建数据库
CREATE DATABASE database_name; |
CREATE DATABASE database_name;
2. 选择数据库
USE database_name; |
USE database_name;
3. 创建表
CREATE TABLE table_name ( | |
column1 datatype, | |
column2 datatype, | |
column3 datatype, | |
.... | |
); |
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype,
....
);
例如:
CREATE TABLE users ( | |
id INT AUTO_INCREMENT PRIMARY KEY, | |
name VARCHAR(50) NOT NULL, | |
email VARCHAR(100) UNIQUE NOT NULL, | |
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP | |
); |
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
4. 插入数据
INSERT INTO table_name (column1, column2, column3, ...) | |
VALUES (value1, value2, value3, ...); |
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
例如:
INSERT INTO users (name, email) | |
VALUES ('John Doe', 'john.doe@example.com'); |
INSERT INTO users (name, email)
VALUES ('John Doe', 'john.doe@example.com');
5. 查询数据
SELECT column1, column2, ... | |
FROM table_name | |
WHERE condition; |
SELECT column1, column2, ...
FROM table_name
WHERE condition;
例如:
SELECT * FROM users WHERE name = 'John Doe'; |
SELECT * FROM users WHERE name = 'John Doe';
6. 更新数据
UPDATE table_name | |
SET column1 = value1, column2 = value2, ... | |
WHERE condition; |
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
例如:
UPDATE users | |
SET email = 'john.newemail@example.com' | |
WHERE name = 'John Doe'; |
UPDATE users
SET email = 'john.newemail@example.com'
WHERE name = 'John Doe';
7. 删除数据
DELETE FROM table_name | |
WHERE condition; |
DELETE FROM table_name
WHERE condition;
例如:
DELETE FROM users WHERE id = 1; |
DELETE FROM users WHERE id = 1;
8. 删除表
DROP TABLE table_name; |
DROP TABLE table_name;
9. 删除数据库
DROP DATABASE database_name; |
DROP DATABASE database_name;
注意:DROP
语句会永久删除数据或表,所以请小心使用。
以上只是 SQL 语句的基础部分。MySQL 支持许多更复杂的查询和操作,包括连接、子查询、索引、视图、存储过程、触发器等。如果你需要更高级的功能,建议查阅 MySQL 官方文档或相关教程。
1. 连接(JOIN)
连接用于从两个或多个表中检索数据。
示例:
SELECT orders.order_id, customers.customer_name, products.product_name | |
FROM orders | |
INNER JOIN customers ON orders.customer_id = customers.customer_id | |
INNER JOIN order_details ON orders.order_id = order_details.order_id | |
INNER JOIN products ON order_details.product_id = products.product_id; |
SELECT orders.order_id, customers.customer_name, products.product_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id
INNER JOIN order_details ON orders.order_id = order_details.order_id
INNER JOIN products ON order_details.product_id = products.product_id;
2. 子查询(SUBQUERY)
子查询是嵌套在另一个查询中的查询。
示例:
-- 查询订单总额超过 1000 的客户 | |
SELECT customer_name | |
FROM customers | |
WHERE customer_id IN ( | |
SELECT customer_id | |
FROM orders | |
WHERE order_total > 1000 | |
); |
-- 查询订单总额超过 1000 的客户
SELECT customer_name
FROM customers
WHERE customer_id IN (
SELECT customer_id
FROM orders
WHERE order_total > 1000
);
3. 索引(INDEX)
索引用于提高查询性能。
示例:
-- 为 customers 表的 customer_name 列创建索引 | |
CREATE INDEX idx_customer_name ON customers(customer_name); | |
-- 删除索引 | |
DROP INDEX idx_customer_name ON customers; |
-- 为 customers 表的 customer_name 列创建索引
CREATE INDEX idx_customer_name ON customers(customer_name);
-- 删除索引
DROP INDEX idx_customer_name ON customers;
4. 视图(VIEW)
视图是基于 SQL 语句的结果集的可视化表。
示例:
-- 创建一个视图,显示订单和客户的信息 | |
CREATE VIEW view_customer_orders AS | |
SELECT orders.order_id, customers.customer_name, orders.order_date | |
FROM orders | |
INNER JOIN customers ON orders.customer_id = customers.customer_id; | |
-- 从视图中查询数据 | |
SELECT * FROM view_customer_orders; | |
-- 删除视图 | |
DROP VIEW view_customer_orders; |
-- 创建一个视图,显示订单和客户的信息
CREATE VIEW view_customer_orders AS
SELECT orders.order_id, customers.customer_name, orders.order_date
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;
-- 从视图中查询数据
SELECT * FROM view_customer_orders;
-- 删除视图
DROP VIEW view_customer_orders;
5. 存储过程(STORED PROCEDURE)
存储过程是一组为了完成特定功能的 SQL 语句集合。
示例:
DELIMITER // | |
CREATE PROCEDURE InsertNewCustomer(IN p_name VARCHAR(50), IN p_email VARCHAR(100)) | |
BEGIN | |
INSERT INTO customers (name, email) VALUES (p_name, p_email); | |
END // | |
DELIMITER ; | |
-- 调用存储过程 | |
CALL InsertNewCustomer('Jane Smith', 'jane.smith@example.com'); | |
-- 删除存储过程 | |
DROP PROCEDURE InsertNewCustomer; |
DELIMITER //
CREATE PROCEDURE InsertNewCustomer(IN p_name VARCHAR(50), IN p_email VARCHAR(100))
BEGIN
INSERT INTO customers (name, email) VALUES (p_name, p_email);
END //
DELIMITER ;
-- 调用存储过程
CALL InsertNewCustomer('Jane Smith', 'jane.smith@example.com');
-- 删除存储过程
DROP PROCEDURE InsertNewCustomer;
6. 触发器(TRIGGER)
触发器是与表事件(如 INSERT、UPDATE 或 DELETE)相关联的命名数据库对象,当表上出现指定事件时,触发器将自动激活并执行。
示例:
-- 创建一个触发器,在插入新订单时更新客户的总订单数 | |
DELIMITER // | |
CREATE TRIGGER trg_after_order_insert | |
AFTER INSERT ON orders | |
FOR EACH ROW | |
BEGIN | |
UPDATE customers | |
SET total_orders = total_orders + 1 | |
WHERE customer_id = NEW.customer_id; | |
END // | |
DELIMITER ; | |
-- 禁用触发器 | |
ALTER TABLE orders DISABLE TRIGGER trg_after_order_insert; | |
-- 启用触发器 | |
ALTER TABLE orders ENABLE TRIGGER trg_after_order_insert; | |
-- 删除触发器 | |
DROP TRIGGER trg_after_order_insert; |
-- 创建一个触发器,在插入新订单时更新客户的总订单数
DELIMITER //
CREATE TRIGGER trg_after_order_insert
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
UPDATE customers
SET total_orders = total_orders + 1
WHERE customer_id = NEW.customer_id;
END //
DELIMITER ;
-- 禁用触发器
ALTER TABLE orders DISABLE TRIGGER trg_after_order_insert;
-- 启用触发器
ALTER TABLE orders ENABLE TRIGGER trg_after_order_insert;
-- 删除触发器
DROP TRIGGER trg_after_order_insert;
请注意,上述示例中的表结构(如 orders
、customers
等)是假设的,你可能需要根据你自己的数据库结构进行调整。同时,确保在执行任何数据库更改(如创建、删除或修改表、索引、视图、存储过程或触发器)之前备份你的数据。