🌈赏金任务 - SQL分类大概有几种?SQL中什么是主键和外键,它们之间的区别是什么?

赏金任务每周更新,请持续关注哦 :love_letter:

题目

  • 模拟面试场景,面试官提问以下问题,你如何回答。
  • SQL分类大概有几种,分别的作用是什么?SQL中什么是主键和外键?它们之间的区别是什么?

参与方式

  • 本帖下方回复你的答案即可

赏金

  • 100元京东购物卡

活动时间

  • 2023年3月6日 - 2023年3月12日

本周赏金任务汇总:🌈 赏金任务发布 2023-03-06

本问题参与赏金活动,详情点击 :rainbow: 赏金活动上线啦 丨做赏金任务挑战千元奖金 查看活动介绍

SQL语言分为五大类:

DDL(数据定义语言) - Create、Alter、Drop 这些语句自动提交,无需用Commit提交。
DQL(数据查询语言) - Select 查询语句不存在提交问题。
DML(数据操纵语言) - Insert、Update、Delete 这些语句需要Commit才能提交。
DTL(事务控制语言) - Commit、Rollback 事务提交与回滚语句。
DCL(数据控制语言) - Grant、Revoke 授予权限与回收权限语句。

SQL主键和外键:结论

主键和外键是数据库设计中的重要概念,因为它们有助于建立表之间的关系并帮助确保数据的完整性。
一个主键可以唯一地识别一个表中的行,而一个外键则是通过引用相关表的主键将两个表联系在一起。
这里你应该注意的最重要的区别是,主键不能有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主要有三种形式:

  • 插入:INSERT
  • 更新:UPDATE
  • 删除:DELETE
    3. 数据定义语言DDL
    数据定义语言DDL用来创建数据库中的各种对象-----表、视图、索引、同义词、聚簇等如:
    CREATE TABLE(表)/VIEW(视图)/INDEX(索引)/SYN(同义词)/CLUSTER(簇)

DDL操作是隐性提交的!不能rollback。

4. 数据控制语言DCL

数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制。

数据库操纵事务发生的时间及效果,对数据库实行监视等。如:

    • GRANT:授权。
    • ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点。
      回滚—ROLLBACK

回滚命令使数据库状态回到上次最后提交的状态。其格式为:

SQL>ROLLBACK;

    • COMMIT [WORK]:提交。

在数据库的插入、删除和修改操作时,只有当事务在提交到数据库时才算完成。在事务提交前,只有操作数据库的这个人才能有权看到所做的事情,别人只有在最后提交完成后才可以看到。

5. 总结
其实大部分用到的是DQL和DML,偶尔会用到DDL。在实际的测试工作中只在部署相关的迭代版本的时候,会首先执行对应服务的ddl后再执行对应dml,若没有执行ddl,执行dml语句可能会报错。在测试工作中最常用到就是dql,进行数量正确性校验和数量的统计
二、sql中的主键和外键
1、主键
关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一
标识一条记录,该属性组就可以成为一个主键
例如在客户管理表(客户姓名、客户身份证、手机号),其中客户身份证是唯一的,那么客户身份证为主键;例如在发票信息表(发票代码、发票号码、发票状态)其中发票代码和发票代码组合才能确定唯一性,那么发票代码和发票号码的属性组是一个主键
2、外键
外键是用来和其他表建立联系用的,表的外键是另外一个表的主键
例如客户信息表(客户姓名、客户身份证、手机号,客户身份证为主键) 客户信息详细表(客户身份证、地址、性别等)
客户信息详细表中的客户身份证不是客户信息详细表的主键,但它和客户信息表中的客户身份证相对应,并且客户信息表中的客户身份证是客户信息表的主键,则称客户信息详细表中的客户身份证是客户信息表的外键
3、主键和外键的区别
(1)定义不同
主键为 唯一标识一条记录,不能有重复的,不允许为空;
外键为 表的外键是另一个表的主键,外键可以有重复的,可以为空值
(2)作用不同
主键是用来保证数据的完整性
外键是用来和其他表建立联系用的
(3)个数不同
主键只有一个,外键一个表可以有多个

SQL分类

SQL分类有多种,以下是其中一些:

  1. 数据查询语言(DQL)
  2. 数据操作语言(DML)
  3. 数据定义语言(DDL)
  4. 数据控制语言(DCL)

主键与外键

主键和外键是关系型数据库中的两个概念。

主键

主键(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子句来指定筛选条件,即客户姓名为“张三”。最终查询结果是所有客户名为“张三”的订单日期。