一、数据库高级语言的概念
数据库高级语言,如SQL(Structured Query Language,结构化查询语言),是一种专门用于与数据库进行交互的高级编程语言。它允许用户在高级数据结构上工作,不需要了解具体的底层数据存储方法,因此具有跨数据库系统的通用性。SQL是数据库开发和管理中最基础也是最核心的语言,广泛应用于各种关系型数据库管理系统(RDBMS)。
二、数据库高级语言的特性
- 非过程性:SQL是一种非过程性语言,用户只需要描述所需的数据操作,而不需要指定具体的操作步骤。这使得SQL语言更加简洁、直观。
- 集合操作:SQL将记录集作为操作对象,所有SQL语句都接受该集作为输入,并将该集作为输出返回。这个集合特性允许SQL语句的嵌套,使得SQL语言非常灵活和强大。
- 跨数据库系统通用性:由于SQL语言的标准化,不同底层结构的不同数据库系统可以使用相同的SQL语言作为数据输入和管理的接口。
三、数据库高级语言的功能
- 数据定义:通过数据定义语言(DDL),可以创建、删除和修改数据库结构和表,如CREATE TABLE、ALTER TABLE和DROP TABLE等命令。
- 数据操纵:数据操纵语言(DML)用于对数据库中的数据进行插入、更新、删除和检索操作,如INSERT、UPDATE、DELETE和SELECT等命令。
- 数据查询:数据查询语言(DQL)是SQL的核心部分,能够灵活地对数据库中的数据进行检索,如使用SELECT语句进行复杂的数据查询。
- 数据控制:数据控制语言(DCL)用于定义数据库用户的访问权限和管理安全策略,如GRANT和REVOKE等命令。
四、与其他编程语言的对比
- 与低级语言的对比:低级语言(如汇编语言、机器语言)运行在底层,主要实现软硬件交互。而数据库高级语言则运行在底层搭起的各种平台上,实现与数据库的交互和数据管理。
- 与通用编程语言的对比:虽然Python、Java等通用编程语言也广泛用于数据库开发,但它们通常需要通过特定的库或框架(如Python的SQLAlchemy、Java的JDBC等)与数据库进行交互。相比之下,SQL语言更加专注于数据库操作,具有更高的效率和更简洁的语法。
五、总结
数据库高级语言(如SQL)是数据库开发和管理中不可或缺的工具。它以其简洁的语法、强大的功能和跨数据库系统的通用性而著称。通过掌握数据库高级语言,用户可以更加高效地管理和操作数据库中的数据,为各种应用场景提供有力的支持。
创建表和添加约束
假设我们有两个表:students
(学生)和 courses
(课程),以及一个关联表 enrollments
(选课)。
-- 创建学生表,添加主键约束
CREATE TABLE students (
student_id INT AUTO_INCREMENT PRIMARY KEY, -- 主键约束
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL
);
-- 创建课程表,添加主键约束
CREATE TABLE courses (
course_id INT AUTO_INCREMENT PRIMARY KEY,
course_name VARCHAR(100) NOT NULL,
course_description TEXT
);
-- 创建选课表,添加主键约束,外键约束
CREATE TABLE enrollments (
enrollment_id INT AUTO_INCREMENT PRIMARY KEY,
student_id INT,
course_id INT,
enrollment_date DATE,
FOREIGN KEY (student_id) REFERENCES students(student_id), -- 外键约束
FOREIGN KEY (course_id) REFERENCES courses(course_id)
);
插入数据
-- 插入学生数据
INSERT INTO students (first_name, last_name, email) VALUES
('John', 'Doe', 'john.doe@example.com'),
('Jane', 'Smith', 'jane.smith@example.com');
-- 插入课程数据
INSERT INTO courses (course_name, course_description) VALUES
('Mathematics', 'Introduction to Algebra'),
('Science', 'Physics 101');
-- 插入选课数据
INSERT INTO enrollments (student_id, course_id, enrollment_date) VALUES
(1, 1, '2023-10-01'),
(2, 2, '2023-10-02'),
(1, 2, '2023-10-03');
查询数据
-- 查询所有学生
SELECT * FROM students;
-- 查询所有课程
SELECT * FROM courses;
-- 查询所有选课记录
SELECT * FROM enrollments;
-- 查询选了"Physics 101"课程的学生
SELECT s.first_name, s.last_name
FROM students s
JOIN enrollments e ON s.student_id = e.student_id
JOIN courses c ON e.course_id = c.course_id
WHERE c.course_name = 'Science';
更新数据
-- 更新学生信息
-- where是条件,就比如是要修改id为1的QQ邮箱
UPDATE students SET email = 'john.newemail@example.com' WHERE student_id = 1;
-- 更新课程信息
UPDATE courses SET course_description = 'Advanced Algebra' WHERE course_id = 1;
删除数据
注意!where是条件的意思,就比如要删除id为2的同学
-- 删除某个学生
DELETE FROM students WHERE student_id = 2;
-- 删除某个课程
DELETE FROM courses WHERE course_id = 2;
-- 删除某个选课记录
DELETE FROM enrollments WHERE enrollment_id = 3;
练习题
- 创建表:
- 创建一个名为
teachers
的表,包含以下字段:teacher_id
(主键,自增)、first_name
(非空)、last_name
(非空)、email
(唯一,非空)。 - 创建一个名为
departments
的表,包含以下字段:department_id
(主键,自增)、department_name
(非空)。 - 创建一个名为
teacher_departments
的表,包含以下字段:teacher_department_id
(主键,自增)、teacher_id
(外键,引用teachers
表的teacher_id
)、department_id
(外键,引用departments
表的department_id
)。
- 创建一个名为
- 插入数据:
- 向
teachers
表中插入3名老师的信息。 - 向
departments
表中插入2个部门的信息。 - 向
teacher_departments
表中插入数据,表示哪些老师属于哪些部门。
- 向
- 查询数据:
- 查询所有老师及其所属的部门名称。
- 查询没有分配任何老师的部门。
- 更新数据:
- 更新一个老师的电子邮件地址。
- 更新一个部门的名称。
- 删除数据:
- 删除一个老师及其相关的所有记录(在
teacher_departments
表中)。 - 删除一个没有任何老师分配的部门。
- 删除一个老师及其相关的所有记录(在
通过这些练习,你可以进一步熟悉MySQL的基本操作以及约束的使用。希望这些示例和练习题对你有帮助!