sql错误使用SQL时可能遇到的错误包括标点问题、超出设置参数和约束的操作、保留词的无效使用、逻辑问题、信息丢失等。错误的变化也可能基于所使用的SQL版本。由于错误的选择多种多样,本文将重点讨论在使用SQL时可能遇到的一些错误。为了理解错误发生的原因以及如何防止它,能够破译错误代码或消息所指示的内容是很有帮助的。如果您最近开始使用SQL,那么您可能会遇到多个错误;此外,对于经验丰富的SQL用户也是如此。

你是否考虑过参加一门课程来学习更多关于Oracle数据库管理的概念,比如参数和逻辑数据结构?如果是这样的话,那么就在Udemy上探索一门课程。

标点符号

关于标点错误;语法错误通常包括基本标点符号错误。例如;如果逗号被省略或放错位置,句点或空格被添加到不应该添加的位置,或者用于编程对象的单词没有正确地与其他对象的顺序相关,那么可能会出现语法相关的错误。为了演示语法错误是如何发生的,我提供了以下示例:

在这个场景中,我试图创建一个名为Employee_Tbl的表,该表包含以下列:Employee_Id、Employee_First、Employee_Last和Employee_dept。我收到一个错误,指示语法中发生了错误。语法错误的错误消息可能因使用的SQL版本和错误的根本原因等因素而有所不同。我在本例中收到的错误消息如下:“您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解使用“Employee_First varchar(20)、Employee_Last varchar(20)、Employee_Department int(”在第4行:“和基于MySQL的语法预期)附近的正确语法。以下是我在尝试创建表时键入的内容:

创建表员工_tbl(employee_id数字(5)员工_first varchar(10),employee_last varchar(10),employee_department number(5));插入员工_tbl值(1475,'doyle','clayton',01410);插入Employee_tbl值(1476,'Wilbert','Holmes',02420);插入员工_tbl值(1477,'kristen','walters',03410);插入员工_tbl值(1478,'凯瑟琳','Mckinney',04420);插入员工_tbl值(1479,'adam','wade',05430);插入员工_tbl值(1545,'miranda','摩根',06430);插入Employee_tbl值(1546,'Elisa','Wolfe',07410);插入员工_tbl值(1547,'琥珀','miles',08430);插入员工_tbl值(1548,'aimee','Green',09420); insert into Employee_Tbl values (1549, 'Ken', 'Norton', 10430); insert into Employee_Tbl values (1630, 'Sean', 'Taylor', 10530); insert into Employee_Tbl values (1631, 'Erma', 'Snyder', 10610); insert into Employee_Tbl values (1632, 'Hugh', 'Elliot', 10720); insert into Employee_Tbl values (1633, 'Pete', 'Jones', 10810); insert into Employee_Tbl values (1634, 'Connie', 'Grant', 10910); insert into Employee_Tbl values (1635, 'Josephine', 'Sullivan', 20420);

在查看上面的代码时,问题可能不会立即显而易见。我已经创建了所有四列的表,并为每个列使用了正确的数据类型。我在我创建的列中插入了正确的顺序中的所有值,我在字符(名称)周围放置了单引号,并且我也在Create表语句的末尾添加了半冒号正如每个插入语句的末尾。仔细观察后,已发现遗漏逗号是此语法错误的原因(在Create表语句中的employEe_id列之后)。添加缺少逗号后,架构已为表构建,并创建了表(如下所示)。

employee_id employee_first employee_last employee_department

1475 Doyle Clayton 1410

1476 Wilbert Holmes 2420

1477克里斯汀·沃尔特斯3410

1478凯瑟琳麦金尼4420

1479亚当韦德5430

1545米兰达摩根6430

1546 Elisa Wolfe 7410

1547琥珀哩8430

1548 Aimee Green 9420

1549 ken诺顿10430

1630肖恩泰勒10530

1631 Erma Snyder 10610

1632 Hugh Elliot 10720

1633皮特·琼斯10810

1634康妮授予10910

1635约瑟芬沙利文20420

如果省略了Oracle中应该在Insert语句中的逗号,那么他们可以收到ORA-00917错误代码。对于下一个案例,请考虑我使用MySQL,并且在尝试使用以下SELECT语句时收到错误代码1064,以便从employee_first列包含“Doyle”字段值的employee_tbl中选择所有列:

从employee_tbl中选择*,其中employee_first ='doyle;

在上面的示例中,错误的原因是Doyle之后缺少一个单引号。添加单个报价并再次运行查询后,正确的查询结果显示如下:

employee_id employee_first employee_last employee_department

1475 Doyle Clayton 1410

截断和隐式转换

当字段值无意中被截断时,它具有其组件的一部分作为其字段的限制设置的结果删除。在SQL中,还有一个截断表格语句,可以在诸如应删除表时的情况下使用。当收到与截断相关的错误消息时;它通常是由于为列字段输入的数据,由于无效的格式或太多字符,基于为已输入数据的列设置的限制而被视为无效的格式或太多字符。

隐式转换涉及正在转换为“幕后”的字段的数据类型,作为数据要自动转换为与列数据集的限制或参数兼容的数据类型。如果数据未正确转换,则可能发生错误。作为示例,在使用下面显示的CREATE TABLE语句时,已收到包含该语句的错误消息“数据截断:不正确的日期值”。同样,Oracle中数据转换的问题可能导致ORA-01858的错误代码。

随时尝试识别可能触发了以下代码中截断的错误:

创建表Employee_Tbl (Employee_Id int(5), Employee_First varchar(10), Employee_Last varchar(10), Employee_Department int(5), Hire_Date date);insert into Employee_Tbl values (1475, 'Doyle', 'Clayton', 01410, ' 2012年1月1日');insert into Employee_Tbl values (1476, 'Wilbert', 'Holmes', 02420, '01-JAN-2012');insert into Employee_Tbl values (1477, 'Kristen', 'Walters', 03410, '01-MAY-2012');insert into Employee_Tbl values (1478, 'Catherine', 'Mckinney', 04420, '01- 1- 2014');insert into Employee_Tbl values (1479, 'Adam', 'Wade', 05430, '01- 1- 2014');insert into Employee_Tbl values (1545, 'Miranda', 'Morgan', 06430, '01- 01- 2012');insert into Employee_Tbl values (1546, 'Elisa', 'Wolfe', 07410, '01-APR-2014');insert into Employee_Tbl values (1547, 'Amber', 'Miles', 08430, '01- 1- 2012');insert into Employee_Tbl values (1548, 'Aimee', 'Green', 09420, '01-MAY-2014'); insert into Employee_Tbl values (1549, 'Ken', 'Norton', 10430, '01-JAN-2012'); insert into Employee_Tbl values (1630, 'Sean', 'Taylor', 10530, '01-JAN-2012'); insert into Employee_Tbl values (1631, 'Erma', 'Snyder', 10610, '01-MAY-2012'); insert into Employee_Tbl values (1632, 'Hugh', 'Elliot', 10720, '01-JAN-2014'); insert into Employee_Tbl values (1633, 'Pete', 'Jones', 10810, '01-JAN-2012'); insert into Employee_Tbl values (1634, 'Connie', 'Grant', 10910, '01-JAN-2014'); insert into Employee_Tbl values (1635, 'Josephine', 'Sullivan', 20420, '01-MAY-2014');

将数据类型更改为Hire_date列的varchar后,已创建表。

创建表Employee_Tbl(Employee_Id int(5)、Employee_First varchar(10)、Employee_Last varchar(10)、Employee_Department int(5)、Hire_Date varchar(20);)

您可以看到日期似乎是正确显示的。

从Employee_Tbl中选择*,其中Employee_Id=1475;

employee_id employee_first employee_last employee_department hire_date

1475道尔·克莱顿1410 2012年1月1日

保留字

与其他编程语言一样,SQL具有指定为保留单词的单词。编程语言中的保留单词是稍微保留或保护能够从预定义的上下文中使用的单词。与其他方面一样,保留单词可能与每个版本的SQL不同。SQL中有丰富的保留单词;某些单词的示例包括以下内容:在其中,更新,Union,行,选择,输出,模块和电流。以不希望这个词的方式使用保留字也被分类为语法错误,并且可以在Oracle中在MySQL或错误代码ORA-01747中接收错误代码1064。

假设该列已被命名为Insert,而不是员工_tbl表的第一个列。

创建表员工_tbl(插入int(5),---保留的Word employee_first varchar(10),employee_last varchar(10),employee_department int(5),hire_date varchar(20));

错误消息将显示为使用保留字,不仅可以导致错误,而且还可以导致请求,例如与对象创建或查询相关的请求,被拒绝。

束缚

约束可以被描述为为特定领域设置的限制或必需的指导方针。在许多情况下;设置限制是为了只允许使用已定义的参数。可设置的参数包括与以下相关的参数:数据范围、数据类型、数据唯一性、允许修改的级别等。例如;如果在列上设置了一个约束以禁止空值,那么当某些字段值包含空值时,试图完成该列的任务可能会导致错误。

您是否可以确定以下代码应在尝试创建和向表添加值时产生错误的原因?

创建表员工_tbl(employee_id int(5)不是null,employee_first varchar(10),employee_last varchar(10),employee_department int(5),hire_date varchar(20));insert into Employee_Tbl values (1475, 'Doyle', 'Clayton', 01410, ' 2012年1月1日');insert into Employee_Tbl values (1476, 'Wilbert', 'Holmes', 02420, '01-JAN-2012');insert into Employee_Tbl values (1477, 'Kristen', 'Walters', 03410, '01-MAY-2012');insert into Employee_Tbl values (1478, 'Catherine', 'Mckinney', 04420, '01- 1- 2014');insert into Employee_Tbl values (1479, 'Adam', 'Wade', 05430, '01- 1- 2014');insert into Employee_Tbl values (1545, 'Miranda', 'Morgan', 06430, '01- 01- 2012');insert into Employee_Tbl values (1546, 'Elisa', 'Wolfe', 07410, '01-APR-2014');插入员工_tbl值(null,'琥珀色','miles',08430,'01 -Jan-2012');insert into Employee_Tbl values (1548, 'Aimee', 'Green', 09420, '01-MAY-2014'); insert into Employee_Tbl values (1549, 'Ken', 'Norton', 10430, '01-JAN-2012'); insert into Employee_Tbl values (1630, 'Sean', 'Taylor', 10530, '01-JAN-2012'); insert into Employee_Tbl values (1631, 'Erma', 'Snyder', 10610, '01-MAY-2012'); insert into Employee_Tbl values (1632, 'Hugh', 'Elliot', 10720, '01-JAN-2014'); insert into Employee_Tbl values (1633, 'Pete', 'Jones', 10810, '01-JAN-2012'); insert into Employee_Tbl values (1634, 'Connie', 'Grant', 10910, '01-JAN-2014'); insert into Employee_Tbl values (1635, 'Josephine', 'Sullivan', 20420, '01-MAY-2014');

上面的代码会导致错误的原因是因为employee_id列具有添加到的not null约束,并且琥珀哩的字段在employee_id列中具有空值。有兴趣了解有关关系数据库和数据类型的更多信息吗?考虑完成UDEMY的教程。

代码不一致

甚至可能存在某些情况,其中操作完成而没有错误,但它不会产生正确或预期的结果。代码中逻辑问题可能导致错误或根本导致输出不利。例如,考虑一下,我们早先使用的员工_TBL不应拥有多个部门的任何员工。如果使用以下查询,则它将导致表中未返回的数据:

从employee_tbl中选择*,其中employee_department = 01410和employee_department = 02420;

事务和网络错误

数据库管理员通常处理的错误包括与SQL server相关的错误。网络相关错误代码的示例为1602;这可能是由各种问题引起的,例如从数据库到网络的连接不可用。事务涉及进程,例如存储过程和例程的进程。事务处理应使事务能够开始、继续和结束。如果在交易过程中发生错误;在某些情况下,交易将无法完成。管理员使用错误处理方法,其中可能包括Try…Catch构造的实现。Try…Catch constructs可以设置为自动识别特征或错误,根据识别的潜在错误执行操作,并检索错误信息。

错误日志

错误日志是存储的文件,包含错误和潜在错误的记录信息。为了将与概述条件相关联的事件指定为可能的错误,可以实现设置,以定义应该触发警报的事件类型。监视错误日志是一个很好的实践。如果发生错误,则管理员或其他授权数据库用户应研究错误,以确定其根本原因;水平的严重程度;以及哪些数据库对象与错误关联。错误日志监视可以帮助防止正在发生的问题和防止数据丢失。如果您希望了解如何深入研究错误日志以及如何保存和恢复数据,然后在Udemy上发现的包容性教程可能是非常有价值的.

结论

用户,管理员和程序员可以遇到错误。错误的特点是可能涉及严重程度,相关事件,对应代码和日志的位置的误差。了解错误代码或消息指示的指示可以帮助纠正和/或阻止错误。在学习SQL或掌握SQL管理的基础时,错误通常可以提供要完成任务和维护数据库操作所需的线索。

SQL中的顶级课程

SQL和PostgreSQL:完整的开发人员指南
斯蒂芬·格里德
4.7 (1,340)
评价最高
完整的SQL训练营2021:从零到英雄
何塞波罗拉
4.7 (97,704)
畅销书
Ultimate MySQL BootCamp:从SQL初学者到专家
柯尔特·斯蒂尔,伊恩·肖诺弗
4.6 (53,535)
畅销书
SQL-MySQL用于数据分析和商业智能
365个职业
4.6 (27,320)
畅销书
高级SQL: SQL专家认证准备课程
甲骨文大师培训•全球80000多名学生,代码之星学院
4.4 (2,089)
完成SQL和数据库训练营:零到精通[2021]
安德烈Neageie,Mo Binni
4.6 (1,391)
SQL初学者:使用MySQL学习SQL和数据库设计
Tim Buchalka的学习编程学院,Jon Avis - SQL讲师
4.5 (9,909)
SQL&PostgreSQL为初学者:成为一个SQL专家
Jon Avis-SQL讲师
4.5 (3,156)
畅销书

更多SQL课程

SQL学生还学习

赋予你的团队。引领行业。

通过Udemy为Business获取组织的在线课程和数字学习工具库的订阅。

请求演示