开发者问题收集

主数据库和 mySQL 中是否存在错误?

2022-05-30
287

我对 mySQL 和 SQL 都很陌生。我已经安装了 mysql workbench 和 mysql community server 来开始练习,就像我在许多教程中看到的那样。我有两个可能相互关联的问题。在许多脚本中,我看到了

USE master;

的用法,在我的 Workbench 版本(版本 8.0)中,当我尝试运行此查询时,提示“未知数据库‘master’。我不太确定 master 数据库有什么(我在 Google 上搜索过,我只知道在 master 数据库中创建自己的数据库是一种很好的做法)。

我的另一个问题更让我困惑,那就是当我使用 IF 时。

IF NOT EXISTS(SELECT name FROM master.dbo.sysdatabases
    WHERE name = 'mydatabase')
    CREATE DATABASE [mydatabase]

它一直给我错误:“IF 在此位置无效,预期为 EOF、ALTER、ANALYZE、BEGIN,...”

当我在 IF 之前使用 BEGIN 时,提示:IF 在此位置无效,预期为 EOF,';'

起初我以为它与 master 数据库有关,所以我尝试了一些不同:

IF OBJECT_ID('tablename','U') IS NULL
 CREATE TABLE tablename(
 ....);

我遇到了同样的错误。我在 stackoverflow 上找到的唯一内容是: statement-is-not-valid-in-this-position 有人说“您不能在 SQL 语句中使用 IF。您只能在存储过程或函数中使用它” 如果是这种情况,我在网上找到的脚本如何以这种方式使用 IF 语句? 这是一个应该可以工作的 SQL 代码示例:

USE [master]
GO

IF NOT EXISTS (SELECT name FROM master.dbo.sysdatabases 
WHERE name = 'HotelManagement')
CREATE DATABASE [HotelManagement] COLLATE Greek_CI_AI -- Collatiom : CI = Case Insensitive, AI = Accent Insensitive
GO

/* =====================
   CREATE ENTITIES 
======================*/
USE [HotelManagement]
GO

IF OBJECT_ID ('Customers', 'U') IS NULL
BEGIN
CREATE TABLE Customers
(
   Customer_ID int IDENTITY(1,1) PRIMARY KEY, 
   First_name varchar (50) not null, 
   Last_name varchar (50) not null, 
   Birth_date datetime,
   Issuing_authority varchar (50) not null, 
   Email varchar (50),
   Phone varchar (50)
)
END
2个回答

这很令人困惑,但每个品牌都有自己的 SQL 实现。

SQL 基于 ANSI 标准,但没有供应商实现整个标准。此外,SQL 标准允许供应商创建自己的 SQL 语言专有扩展。每个供应商至少都会这样做一点。

最重要的是,您不应该假设一个品牌数据库的 SQL 代码在另一个品牌上完全有效。由于它们都是基于 SQL,因此存在相似之处,但您确实需要分别研究每个品牌的文档。

您甚至需要研究所用数据库的特定 版本 的文档,因为每个供应商在每个版本中都会引入新功能(或弃用一些旧功能)。

以 MySQL 为例:

还有许多其他区别。等到您开始编写存储过程时再说吧!

Bill Karwin
2022-05-30

MySQL、Microsoft SQL Server (MSSQL)、Postgres 等都是不同的关系数据库管理系统。它们都使用结构化查询语言 (SQL) 与特定服务器进行通信。每种系统都有自己不同的特色和特色 - 但它们几乎具有相同的功能,并且最常用的语法 99% 相同。

您需要一个客户端软件/Web 应用程序来在数据库引擎上设计/编写/编辑/删除/读取/查询数据。这些被称为客户端软件。有些可以在您的本地机器上运行。其他人可能会从网页或您自己的 Web 服务器运行。

了解 关系数据库设计

了解 结构化查询语言

了解 SQL 客户端

nazim
2022-05-30