目录
1. Key(键)
2. Index(索引)
3.Key和Index的区别
4. Primary Key(主键)
5. Foreign Key(外键)
6.主键和外键的关系
温馨提示: 闪电按钮不同的执行功能
首先,我想先介绍一下简单介绍SQL中的Key(键)和Index(索引)。
1. Key(键)
基本概念
定义:Key是数据库表中用于标识或关联数据的特殊列(或列组合)。它像一个“标签”或“身份证”,帮助数据库管理记录。
通俗解释:想象一个大图书馆,书上有编号(Key),用来快速找到某本书或确认它是唯一的。Key是数据库里给每行数据贴上的“识别码”。
2. Index(索引)
基本概念
定义:Index是数据库为表中的一列(或多列)创建的特殊数据结构,加快数据检索速度。
通俗解释:想象图书馆的书目索引,书按编号排序,查书时不用翻遍所有书架,直接找索引上的页码。Index就像给数据库加了个“快速查找表”。
3.Key和Index的区别
目的:
Key(主键、外键、唯一键)主要用于数据完整性和关系。
Index主要用于查询优化。
比喻:Key像身份证和户口簿,Index像图书馆的索引卡。
4. Primary Key(主键)
什么是主键?
定义:主键是一个表中用来唯一标识每行记录的列或列组合。就像每个人的身份证号码,保证没有重复。
通俗解释:想象一个班级花名册,每个人都有一个唯一的学号(比如001、002),主键就是这个学号,确保找不到两个“张三”混淆。
特点:
-
唯一性:每行数据的主键值必须不同。
-
非空:主键不能是NULL,必须有值。
-
不可变:一旦设好,主键值一般不该改(改了会影响关联)。
举例说明:
这是一张个人信息表。表中分别有ID,名字,姓氏,性别,电话 。从表中我们可以看到,ID是这张表的主键,因为其他列中都有重复的值。它们的值无效,或者是重复的。
5. Foreign Key(外键)
什么是外键?
定义:外键是表A中的一列(或多列),它的值必须指向表B的主键,建立了两表之间的关系。
通俗解释:想象一个班级花名册(表A)和成绩表(表B),成绩表里有个“学生ID”列,指向花名册里的“学号”(主键),这样就能知道哪个成绩属于哪个学生。外键就像“关系纽带”。
特点:
-
引用性:外键值必须是它所引用的主键值之一,或者是NULL(如果允许)。
-
关联性:通过外键,多个表可以“联手”管理数据。
带有主键的表称为父表(parent table),带有外键的表称为子表(child table) 。
6.主键和外键的关系
-
联系:外键依赖主键,外键的值必须来自它引用的表的主键,形成了表之间的“父子关系”。
-
比喻:主键是“户主”的身份证,外键是“家庭成员”持有的户主身份证号码,靠这个联系起家庭(表)。
这张表显示了订单,客户,产品之间的关系。这个设计模拟了一个咖啡店的订单系统,客户可以购买产品,订单记录谁买了什么。
箭头的方向显示链接,从父表的主键指向子表的外键。
箭头表示外键关系:
orders.customer_id → customers.id:订单指向客户。
orders.product_id → products.id:订单指向产品。
SHOW DATABASES; #显示当前服务器上的所有数据库。CREATE DATABASE coffee_store; #创建一个名为coffee_store的新数据库。如果已存在则报错USE coffee_store; #切换到coffee_store数据库中,接下来的操作都在这里CREATE TABLE products(id INT auto_increment PRIMARY KEY, #id是主键(从1开始),INT表示类型#auto_increment表示自动递增,每次有新的记录时,id自动加1#保证每行id唯一且非空,像产品唯一的“产品编号”。name VARCHAR(30),price DECIMAL(3,2)
);CREATE TABLE customers(id INT auto_increment PRIMARY KEY,first_name VARCHAR(30),last_name VARCHAR(30),gender ENUM('F','M'),phone_number VARCHAR(11)
);CREATE TABLE orders
(id INT auto_increment PRIMARY KEY,products_id INT,customer_id INT,order_time DATETIME,FOREIGN KEY(product_id) REFERENCES products(id),FOREIGN KEY(customer_id) REFERENCES customers(id)#FOREIGN KEY 这是个关键字,告诉数据库下面我要定义一个外键#(customer_id)括号里是外键的列名,在当前表叫customer_id#REFERENCES是个关键字,指customer_id的值要去对应的customers表里找id#customers(id) 分别是参考表的表名和列名#组合起来的意思是在当前表里,customer_id列是外键。它的值必须是customers表中id列的值之一
);SHOW TABLES; #显示当前数据库中的所有表。
温馨提示: 闪电按钮不同的执行功能
在 MySQL Workbench 中,工具栏上有三个与执行 SQL 查询相关的闪电按钮(lightning bolt buttons),它们的功能各不相同。
1. 第一个闪电按钮
功能:执行整个 SQL 脚本。
描述:这个按钮会运行 SQL 查询面板(SQL Query Panel)中当前所有内容,无论你是否选中了特定部分。只要面板中有 SQL 语句,它就会从头到尾执行所有语句。
2. 第二个闪电按钮
功能:执行当前选中的 SQL 语句或高亮部分。
描述:这个按钮只执行你在 SQL 查询面板中手动选中的部分。如果没有选中任何内容,它会执行光标当前所在的单个语句(从光标位置到语句的末尾)。
使用场景:当你只想测试或运行脚本中的一部分时非常有用。例如,你有一个长脚本,但只想运行其中一个 SELECT 查询。
3. 第三个闪电按钮
功能:对当前光标下的语句执行 EXPLAIN 分析。
描述:这个按钮不会直接执行 SQL 语句,而是生成该语句的执行计划(Execution Plan)。执行计划显示 MySQL 如何执行查询,包括使用的索引、表扫描方式等,帮助你优化查询性能。
使用场景:
-
当你想分析某个查询的性能瓶颈或优化 SQL 语句时,使用这个按钮。
-
例如,如果你怀疑某个 SELECT 查询运行缓慢,可以用 EXPLAIN 检查它是否使用了正确的索引。
4.手形按钮
功能:停止执行的查询。 如果你正在运行一个查询,该查询正在检索成千上万的数据,它可以停止查询而不是继续等待。
应用场景:只在查询时才有效,如果正常状态下点击,不会有任何事发生。