mySQL 中的 master 数据库和 IF 错误?

master databse and IF errors in mySQL?

总的来说,我是 mySQL 和 sql 的新手。我已经安装 mysql workbench 和 mysql 社区服务器开始练习,正如我在许多教程中看到的那样。我有两个可能相互关联的问题。在许多脚本中,我看到

的用法
USE master;

在我的 workbench 版本(8.0 版)中,当我尝试 运行 时,此查询显示“未知数据库 'master'”。我不太确定主数据库有什么(我用谷歌搜索了一下,我只知道在 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,';'

起初我认为它与主数据库有关,所以我尝试了一些不同的方法:

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

我遇到了同样的错误。我在 Whosebug 上发现的唯一一件事是: 有人说“您不能在 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

MySQL、微软SQL服务器(MSSQL)、Postgres等都是不同的关系数据库管理系统。它们都使用结构化查询语言 (SQL) 与特定服务器进行通信。每个都有自己不同的口味、樱桃和糖霜 - 但它们几乎运行相同的功能,而且大多数使用的语法 99% 相同。

您需要一个客户端 software/web 应用程序来 design/write/edit/delete/read/query 数据库引擎上的数据。这些称为客户端软件。有些可以 运行 在您的本地计算机上。其他人可能 运行 来自网页或您自己的网络服务器。

学习Relational Database Design

学习Structured Query Language

学习SQL Clients

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

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

最重要的是,您不应该假设 SQL 一种品牌数据库的代码完全适用于不同品牌。有相似之处,因为它们都是基于 SQL,但您确实需要分别研究每个品牌的文档。

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

在MySQL的情况下:

还有许多其他差异。等到你开始编写存储过程!