赏金任务每周更新,请持续关注哦
题目
- 模拟面试场景,面试官提问以下问题,你如何回答。
- SQL分类大概有几种,分别的作用是什么?SQL中什么是主键和外键?它们之间的区别是什么?
参与方式
- 本帖下方回复你的答案即可
赏金
- 100元京东购物卡
活动时间
- 2023年3月6日 - 2023年3月12日
本周赏金任务汇总:🌈 赏金任务发布 2023-03-06
本问题参与赏金活动,详情点击 赏金活动上线啦 丨做赏金任务挑战千元奖金 查看活动介绍
赏金任务每周更新,请持续关注哦
本周赏金任务汇总:🌈 赏金任务发布 2023-03-06
本问题参与赏金活动,详情点击 赏金活动上线啦 丨做赏金任务挑战千元奖金 查看活动介绍
DDL(数据定义语言) - Create、Alter、Drop 这些语句自动提交,无需用Commit提交。
DQL(数据查询语言) - Select 查询语句不存在提交问题。
DML(数据操纵语言) - Insert、Update、Delete 这些语句需要Commit才能提交。
DTL(事务控制语言) - Commit、Rollback 事务提交与回滚语句。
DCL(数据控制语言) - Grant、Revoke 授予权限与回收权限语句。
主键和外键是数据库设计中的重要概念,因为它们有助于建立表之间的关系并帮助确保数据的完整性。
一个主键可以唯一地识别一个表中的行,而一个外键则是通过引用相关表的主键将两个表联系在一起。
这里你应该注意的最重要的区别是,主键不能有NULL值,而外键可以接受NULL值。
主键是表中的一个列(或一组列),用于唯一地识别表中的每一行。它不能包含空值,并且在表中的所有行中必须是唯一的。一个表中只允许有一个主键。
一个主键基本上是 “UNIQUE “和 “Not Null “约束的组合。因此,它不能是一个NULL值。关于主键需要注意的另一点是,它的值不能从父表中删除。
外键是一个表中的一个列(或一组列),指的是另一个表中的主键。它被用来在两个表之间建立联系,并被用来在数据库中执行参考完整性。外键基本上是一个表中的字段/列,类似于其他表的主键。
与主键不同,一个表可以有一个以上的外键。而且,在关系数据库中,外键可以包含重复值和空值。一个外键的值可以从子表中删除。
下表强调了主键和外键之间的所有重要区别
Key | 主键 | 外键 |
---|---|---|
Basic | 它用于唯一地识别表中的数据。 | 它用于维护表之间的关系。 |
Null | 它不可能是NULL。 | 它可以接受NULL值。 |
重复的 | 两条或多条记录不能有相同的主键。 | 它可以为一个外键属性携带重复的值。 |
Index | Primary有聚类索引。 | 默认情况下,它不是聚类索引。 |
Tables | 可以在临时表上定义主键约束。 | 它不能被定义在临时表上。 |
SQL分类大概有三种:DDL、DML和DQL。DDL(数据定义语言)用于定义和管理数据库对象,比如表、列、索引、触发器等。DML(数据操作语言)用于对数据库中的数据进行增、删、改操作。DQL(数据查询语言)用于查询数据库中的数据并返回查询结果。这三种语言通常用于数据库的创建、修改、维护和查询。
主键和外键是数据库设计中非常重要的概念。主键是一组唯一标识表中每一行记录的字段或组合字段。主键的作用是保证表中数据的完整性和唯一性,防止重复数据的插入。主键通常用于表的索引、约束和关联关系的定义。
外键是一个表中的字段,它与另一个表的主键相对应。外键的作用是定义表与其他表之间的关联关系。例如,如果一个表中包含了一个与另一个表中的主键相对应的外键,那么这些表之间就建立了关联关系。外键可以用来保证数据的完整性和一致性,防止数据的不一致和错误。
主键和外键之间的区别在于它们的作用和定义不同。主键用于唯一标识表中每一行记录,而外键用于定义表与其他表之间的关联关系。在数据库设计中,主键和外键通常用于表的索引、约束和关联关系的定义,它们是确保数据一致性和完整性的重要工具。
使用MySQL语言创建学生表和成绩表,并定义主键和外键的示例代码。
创建学生表:
CREATE TABLE student (
id INT(10) NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
gender VARCHAR(10) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
在这个代码中,我们创建了一个名为student的表,包含了id、name和gender三个字段。其中,id字段是主键,通过AUTO_INCREMENT关键字自动递增生成。这样,每个学生的id都是唯一的。
创建成绩表:
CREATE TABLE score (
id INT(10) NOT NULL AUTO_INCREMENT,
student_id INT(10) NOT NULL,
subject VARCHAR(50) NOT NULL,
score INT(10) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (student_id) REFERENCES student(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
在这个代码中,我们创建了一个名为score的表,包含了id、student_id、subject和score四个字段。其中,id字段是主键,通过AUTO_INCREMENT关键字自动递增生成。而student_id字段则是外键,通过FOREIGN KEY关键字和REFERENCES语句与学生表中的id字段相对应,建立学生表和成绩表之间的关联关系。这样,我们就可以将每个学生的成绩与学生表中的对应学生关联起来,实现数据的一致性和完整性。
一、sql分类
SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL
1. 数据查询语言DQL
数据查询语言DQL基本结构是由SELECT组成的查询块:
例如select *from 表名 where 查询条件
2 .数据操纵语言DML
数据操纵语言DML主要有三种形式:
DDL操作是隐性提交的!不能rollback。
4. 数据控制语言DCL
数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制。
数据库操纵事务发生的时间及效果,对数据库实行监视等。如:
回滚命令使数据库状态回到上次最后提交的状态。其格式为:
SQL>ROLLBACK;
在数据库的插入、删除和修改操作时,只有当事务在提交到数据库时才算完成。在事务提交前,只有操作数据库的这个人才能有权看到所做的事情,别人只有在最后提交完成后才可以看到。
5. 总结
其实大部分用到的是DQL和DML,偶尔会用到DDL。在实际的测试工作中只在部署相关的迭代版本的时候,会首先执行对应服务的ddl后再执行对应dml,若没有执行ddl,执行dml语句可能会报错。在测试工作中最常用到就是dql,进行数量正确性校验和数量的统计
二、sql中的主键和外键
1、主键
关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一
标识一条记录,该属性组就可以成为一个主键
例如在客户管理表(客户姓名、客户身份证、手机号),其中客户身份证是唯一的,那么客户身份证为主键;例如在发票信息表(发票代码、发票号码、发票状态)其中发票代码和发票代码组合才能确定唯一性,那么发票代码和发票号码的属性组是一个主键
2、外键
外键是用来和其他表建立联系用的,表的外键是另外一个表的主键
例如客户信息表(客户姓名、客户身份证、手机号,客户身份证为主键) 客户信息详细表(客户身份证、地址、性别等)
客户信息详细表中的客户身份证不是客户信息详细表的主键,但它和客户信息表中的客户身份证相对应,并且客户信息表中的客户身份证是客户信息表的主键,则称客户信息详细表中的客户身份证是客户信息表的外键
3、主键和外键的区别
(1)定义不同
主键为 唯一标识一条记录,不能有重复的,不允许为空;
外键为 表的外键是另一个表的主键,外键可以有重复的,可以为空值
(2)作用不同
主键是用来保证数据的完整性
外键是用来和其他表建立联系用的
(3)个数不同
主键只有一个,外键一个表可以有多个
SQL分类有多种,以下是其中一些:
主键和外键是关系型数据库中的两个概念。
主键(Primary key)是一列或一组列,用于唯一标识关系表中的每一行数据。主键必须是唯一的,不能为空,且在表中每一行数据中的值都不能重复。主键常用于将多个关系表连接起来,以便更高效地查询和管理数据。
外键(foreign key)是一列或一组列,用于在关系表中引用其他表中的主键。外键与主键之间建立了联系,用于实现关系数据库中的表间关联。在外键与主键之间建立联系后,就可以用它们来确保表数据之间的一致性和完整性。
主键与外键之间的区别在于他们的作用不同:主键用于唯一标识关系表中的每一行数据,而外键用于建立表与表之间的联系,并确保数据之间的完整性和一致性。
当我们想使用两个表之间关联数据的时候,例如我们有一个“订单”表和一个“客户”表,每一个订单表中都需要关联到一个客户,而每一个客户可能有多个订单,那么这个时候如果我们使用关系型数据库来保存数据,就可以在“订单”表中建立一个外键指向“客户”表的主键。例如:
客户表:
客户编号 | 客户姓名 | 客户电话 |
---|---|---|
1 | 张三 | 1333333333 |
2 | 李四 | 1444444444 |
订单表:
订单编号 | 客户编号(外键) | 订单日期 |
---|---|---|
1 | 1 | 2021/10/01 |
2 | 1 | 2021/10/02 |
3 | 2 | 2021/10/02 |
在订单表中的“客户编号”一列就是外键,它指向了客户表中的主键“客户编号”,确保了订单表中每一个订单都有一个对应的客户,同时也确保了订单表中的客户编号值在客户表中必须存在。
为了建立订单表和客户表之间的主外键关系,可以使用SQL语句来创建表和外键约束,示例如下:
创建客户表:
CREATE TABLE customer (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(50),
customer_phone VARCHAR(20)
);
创建订单表:
CREATE TABLE order (
order_id INT PRIMARY KEY,
order_date DATETIME,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customer (customer_id)
);
在订单表中,我们使用FOREIGN KEY关键字来指定“customer_id”列为外键,它引用了客户表中的“customer_id”列作为参照列。当创建外键约束时,MySQL会确保订单表中的customer_id列值在客户表中有对应的匹配项,否则在插入或更新数据时会返回错误。
可以使用SQL语句来连接订单表和客户表,然后按条件查询:
SELECT order_date
FROM customer
JOIN order ON customer.customer_id = order.customer_id
WHERE customer.customer_name = '张三';
这个SQL语句使用JOIN来将订单表和客户表连接起来,使用ON子句指定连接用的列。然后使用WHERE子句来指定筛选条件,即客户姓名为“张三”。最终查询结果是所有客户名为“张三”的订单日期。