在现代软件开发中,数据库是支撑应用的重要基础,而MySQL作为开源且高效的关系型数据库管理系统,广泛应用于各种企业和互联网应用中。无论是小型网站还是大型分布式系统,MySQL都能提供强大的数据存储与管理支持。
本篇教程将带领你从SQL的基础知识讲起,逐步深入到复杂的查询操作、优化技巧、事务处理等内容,帮助你全面掌握MySQL的使用,成为MySQL的高手。
SQL(Structured Query Language)是用于与关系型数据库系统交互的标准语言。SQL既可以用于查询、插入、更新、删除数据,也可用于定义数据库结构、管理用户权限等操作。它通过一套通用的语法标准,使得不同的数据库系统能够互通操作。
SQL主要分为以下几种类型:
CREATE
、ALTER
、DROP
等。INSERT
、UPDATE
、DELETE
等。SELECT
语句。GRANT
、REVOKE
等。数据库设计的三大范式旨在消除冗余数据,保证数据一致性和完整性。
第一范式要求数据库中的每个字段都必须是原子的,不能再分割。也就是说,每个字段必须存储单一的数据类型,避免出现重复的数据集合。
第二范式要求在第一范式的基础上,所有非主键字段必须完全依赖于主键,不能只依赖于主键的一部分。这样可以消除部分依赖。
第三范式要求所有非主键字段必须直接依赖于主键,不能通过其他非主键字段进行依赖。消除了传递依赖,确保数据的高效管理。
YYYY
。HH:MM:SS
。YYYY-MM-DD HH:MM:SS
。CREATE DATABASE mydb;
SHOW DATABASES;
USE mydb;
DROP DATABASE mydb;
CREATE TABLE students (
student_id INT PRIMARY KEY,
name VARCHAR(100),
age INT,
grade CHAR(1)
);
SHOW TABLES;
ALTER TABLE students ADD COLUMN gender CHAR(1);
DROP TABLE students;
主键约束确保每个表中的记录唯一且非空。一个表只能有一个主键。
非空约束确保列的每个值都不能为NULL。
通过DEFAULT
关键字为某些列设置默认值。
通过UNIQUE
约束确保列中的每个值都是唯一的。
外键约束确保两个表之间的关系一致性,即在主表中存在的值必须在外表中有对应的记录。
数据一致性指的是数据库中各数据表之间的关联数据在插入、更新、删除时的保持一致性。外键约束能确保这一点。
删除外键约束时,需使用ALTER TABLE
语句删除外键关联:
ALTER TABLE child_table DROP FOREIGN KEY fk_name;
INSERT INTO students VALUES (1, 'Alice', 20, 'A');
INSERT INTO students (student_id, name) VALUES (2, 'Bob');
INSERT INTO students (student_id, name, age, grade) VALUES
(3, 'Charlie', 22, 'B'),
(4, 'David', 23, 'C');
UPDATE students SET grade = 'A' WHERE student_id = 1;
UPDATE students SET age = 21 WHERE name = 'Alice';
UPDATE students SET grade = 'B';
DELETE FROM students WHERE student_id = 1;
DELETE FROM students WHERE grade = 'C';
DELETE FROM students;
DELETE
:逐条删除,支持条件,可以回滚。TRUNCATE
:快速删除所有记录,不能回滚。查询数据是MySQL操作中最常见的操作。可以通过SELECT
语句选择需要的数据。
SELECT * FROM students;
SELECT student_id, name FROM students;
SELECT 100 AS constant_value;
SELECT DISTINCT grade FROM students;
SELECT student_id, age + 1 AS new_age FROM students;
聚合函数对一组数据进行计算,常见的聚合函数有:
SELECT NOW(); -- 当前时间
SELECT DATE_ADD(NOW(), INTERVAL 1 DAY); -- 日期加一天
SELECT CONCAT('Hello', ' ', 'World'); -- 字符串拼接
SELECT LENGTH('MySQL'); -- 字符串长度
SELECT ROUND(123.456, 2); -- 四舍五入
SELECT * FROM students WHERE age > 20;
SELECT * FROM students WHERE grade IN ('A', 'B');
SELECT * FROM students WHERE age BETWEEN 20 AND 22;
SELECT * FROM students WHERE grade IS NULL;
SELECT * FROM students WHERE age > 20 AND grade = 'A';
SELECT * FROM students WHERE age > 20 OR grade = 'A';
SELECT * FROM students WHERE name LIKE 'A%';
SELECT * FROM students AS s;
SELECT student_id AS id, name AS student_name FROM students;
使用JOIN
进行多表查询。根据不同的关联关系,可以使用内连接、外连接等。
删除多表关联数据时,必须考虑外键约束与级联删除。
SELECT * FROM table1 CROSS JOIN table2;
SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id;
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id;
SELECT * FROM students WHERE age > (SELECT AVG(age) FROM students);
SELECT * FROM students WHERE EXISTS (SELECT 1 FROM students WHERE grade = 'A');
通过本教程的学习,你已经掌握了MySQL的基础知识和常见操作,包括数据库管理、数据表设计、查询、函数等内容。希望你能继续深入学习,提升自己的数据库设计和优化能力,成为一名MySQL的专家。