MySQL基础入门-05MySQL的SQL语法

第四章 MySQLSQL语法

本文作者: 印第安 ([email protected])

 

4.1 SQL语言介绍及数据库对象间的关系

4.1.1 SQL简介

SQL是英文Structured Query Language的缩写,翻译成中文就是“结构化查询语言”。其最早是IBM的圣约瑟研究实验室为其关系数据库管理系统SYSTEM R开发的一种查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。目前,SQL语言已被确定为关系数据库系统的国际标准,被绝大多数商品化关系数据库系统采用,如Oracle、Sybase、DB2、Informix、Microsoft SQL Server、Access这些数据库管理系统都支持SQL语言作为查询语言。

 

注:可以把“SQL”读作“sequel”,也可以按单个字母的读音读作S-Q-L。 两种发音都是正确的,每种发音各有大量的支持者,在本书中,认为“SQL”读作“sequel”。

 

4.1.2 数据库软件中的术语

数据库中的数据是按照一定的格式存储的,表现出来就像一个表格一样,见表1。

 

表名:职工

职工号

姓名

出生年月

性别

部门

职务

电话号码

1121

王平

08/21/73

开发部

工程师

64336789

1102

孙小艳

09/06/74

开发部

工程师

64667892

2089

魏东国

09/05/65

市场部

部门经理

65426956

3240

田元君

09/12/82

财务部

会计师

65783254

2205

尹玉斌

07/23/80

市场部

项目经理

65334563

2306

欧阳擎天

02/21/73

采购部

经济师

58796541

表 1 一个简单的表

 

表中的一行在数据库术语中称作“记录”,表中的一列在数据库术语中称作“字段”,列名称称作“字段名”,如职工号、姓名、出生年月等都是字段名。列和行的交叉(单元格)称作“字段值”,它也就是各种具体的数据值了。

 

数据库术语中,所有字段和记录的集合就构成了一张“表(Table)”。所有表的集合就构成了具体的“数据库(Database)”。

 

广义上讲,一个数据库就包括数据库、表和记录,它们的关系如图4.0:

 


图 4.0 数据库、表和记录间的关系

 

打个形象的比喻,它们之间的关系就像库存仓库中的商品。首先我们要搭建一个仓库(数据库),然后我们要制作存放商品的箱子(表),最后把商品(记录)分门别类放进箱子储存进仓库。

 

4.2 第一个MySQL查询

连接上MySQL服务器,如果忘记了,查看前面章节。本节介绍有关与mysql 交互应该了解的一些知识。

 

为了在mysql 中输入一个查询,只需键入查询命令即可。在查询的结尾处,键入一个英文分号(“;”)并按Enter 键。分号告诉mysql 该查询是完整的。(如果你喜欢键入两个字符的话,也可以使用“ g”终止查询。)

 

在键入一个查询之后, mysql 将其发送到服务器上。该服务器处理此查询并将结果送回 mysql, mysql将此结果显示出来。

 

下面是一个简单查询的例子和结果:

 


图 4.1 一个简单的查询

 

它给出当前的日期和时间。mysql 还在结果中显示行数计数。

 

因为mysql 需要见到分号才发送查询到服务器,所以在单一的行上不需要键入分号。如果有必要,可将一个查询分为几行,如下所示:

 


图 4.2 查询分成几行

 

请注意,在键入查询的第一行后,提示符从“mysql”变成了“–>”。这表示mysql 允许继续键入这个查询。这是一个重要的提示,因为如果在查询的末尾忘记了分号,此提示将有助于提醒您查询尚不完整。否则您会一直等下去,心里还纳闷为什么mysql 执行查询花这么长的时间还没完;而mysql 也搞不清为什么结束查询的键入要花您那么多的时间!

 

大部分情况下,用大写字符、小写字符或大小写字符混合键入查询没什么关系。下列查询全是等价的:

 

SELECT USER()

select user()

SeLeCt UsEr()

 

本书中的例子用大写字符表示SQL 关键字和函数名,用小写字符表示数据库、表和列名。

 

如果在查询中调用一个函数,在函数名和后跟的圆括号中间不允许有空格,例:

 

 


图4.3 查询中的函数

 

这两个查询看上去差别不大,但第二个失败了,因为圆括号并没有紧跟在函数名的后面。

 

如果已经开始键入一个多行的查询,而又不想立即执行它,可键入‘ c’ 来跳过(放弃)它,如:

 


图 4.4 查询中断

 

请注意,提示符又变回了“mysql>”,这表示mysql 为键入的新查询作好了准备。

 

4.3 创建和使用数据库

现在开始创建一个名称为 Jokes 的数据库,以后的所有例程都是基于这个数据库。

 

我们将从头开始,先创建数据库,再创建表,然后输入数据,以后可以对这些数据进行操作。

 

正如我前面打的那个形象的比喻,先搭建了仓库,再定做箱子,然后才可以把商品放入箱子库存。所以使用数据库管理系统(DBMS)涉及几个步骤:

 

1) 创建(初始化)数据库。

2) 创建数据库中的表。

3) 对表进行数据添加、查询、修改或删除。

 

4.3.1 CREATE DATABASE语句

为了创建一个新的数据库,用mysql 连接到数据库然后发布CREATE DATABASE 语句,具体语法如下:

 

CREATE DATABASE db_name

 

此语句指定了数据库名:db_name。这个名字是由用户任意取,但是只能是数字、字母和“_”、“$”的组合。我们创建 Jokes 数据库,见图4.5。

 


图 4.5 创建数据库

 

4.3.2 SHOW DATABASES语句

创建数据库后,我们怎么知道它是否被创建成功呢?mysql 有个反馈消息给我们:“Query OK, 1 row affected (0.01 sec)”。这个表示我们刚才成功创建了Jokes数据库。

 

另外,mysql有个查看数据库的命令:

 

SHOW DATABASES

 

这个命令可以查看MySQL上存在哪些数据库,见图4.6。

 


图 4.6 查看数据库

 

我们可以看到除了我们刚才创建的jokes数据库外,还有几个数据库。mysql和information_schema是系统自带的,我们不要碰它。test数据库是一个空数据库,测试用的,可以删除。

 

4.3.3 SELECT DATABASE()用法

创建数据库后,这个新创建的数据库并不是当前数据库。这可从执行下面的查询看出:

 


图 4.7 选择的数据库

 

注:DATABASE()是一个函数。

 

4.3.4 USE语句

为了使jokes 成为当前数据库,发布USE 语句即可:

 


图 4.8 使用数据库

 

USE 为少数几个不需要分号(“;”)终结符的语句之一,当然,加上终结符也不会出错。HELP 是另一个不需要分号(“;”)终结符的语句。如果想了解不需要终结符的语句有哪些,可发布HELP 语句。

 

在发布了USE 语句后,jokes 成为缺省数据库:

 


图 4.9 成为当前数据库

 

4.3.5 DROP DATABASE语句

如果不需要数据库了,我们可删除它,语法如下:

 

DROP DATABASE db_name

 

比如,我们创建一个“_a1b2$3”的数据库,然后删除它,见图4.10。

 


图 4.10 删除数据库

 

4.4 创建和使用数据库表

数据库创建后,它里面是个空的,在MySQL服务器上表现为一个空文件夹(目录)。本节中我们将创建 jokes 数据库所需的表。

 

创建数据库表前,我们先来分析下日常生活中的一张表。

 

表名:joke

ID

笑话内容

提交者

1

甲:世界名流是什么意思?乙:世界各地有名的流氓。

王丽

2

语文老师以“足球赛”为题,让学生写一篇短文。还不到一分钟,有个学生就交卷了,只写了4个字:“雨天停赛。”

张军

表2 笑话表

 

这是一个3行3列的表,第1行是表头存放列名(字段名),第2行往下存放具体的每列的数据(值)。在数据库中,数据的存放也是以这种结构存放的。

 

4.4.1 CREATE TABLE语句

我们用CREATE TABLE语句创建数据库表,语法格式如下:

 

CREATE TABLE tbl_name (columm_describe)

 

其中tbl_name是用户定义的表名,column_describe是列的说明。

如,我们创建上面的表2:

 


图 4.11 创建数据库表

 

CREATE TABLE语句中每个列的说明由列名、类型以及列属性组成。

 

Joke表中我们用了varchar列类型。Varchar(n)表示该列包含可变长度的字符串值,其最大长度为n个字符。NULL(值可缺少)和NOT NULL(必须填充)表示是否允许不填值。列类型和列属性说明将在下章具体介绍。

 

4.4.2 SHOW TABLES语句

与创建完数据库后可以查看数据库是否创建成功一样,创建完表后可以用 SHOW TABLES 命令查看数据库表是否创建成功。语法如下:

 

SHOW TABLES

 

命令的使用见图4.12。

 


图 4.12 查看数据库表

 

SHOW TABLES 命令是查看数据库中的表名,如果要查看刚才创建的joke表的结构是否正确,就要用另一个命令了。

 

4.4.3 DESCRIBE TABLE语句

 

DESCRIBE TABLE语句是用来查看表结构是否正确,包括查看字段名、字段类型和字段属性等。其具体语法如下:

 

DESCRIBE TABLE tbl_name

 

我们还是看一个实际操作的例子就清楚了,见图4.13。

 


图 4.13 查看表结构

 

DESCRIBE可以简写为DESC,上面的命令清楚的显示了字段的名称、字段的类型、是否允许NULL值等信息。如果这些名称、类型、属性等等不是你所期望的,或者在输入的过程中有错误,用DESCRIBE TABLE命令就可以清楚的查看,进而对其修改。

 

4.4.4 ALTER TABLE语句

ALTER TABLE语句允许对表重命名或修改其结构,其语法如下:

 

ALTER TABLE tbl_name action_list

 

tbl_name 指定表名,表示对哪个表进行操作。action_list 指定一个或多个操作,各操作之间用逗号分隔。各个操作依次执行。有如下的操作:

 

  • 对表重命名。这很简单,只需给出旧表名和新表名即可:

 

ALTER TABLE tbl_name RENAME new_tbl_name

 

将表tbl_name重新命名为new_tbl_name。如,我们将joke表名更改为jokestable:

 


图 4.14 更改表名

  • 更改列(字段)的定义。使用MODIFY子句更改列的定义:

 

ALTER TABLE tbl_name MODIFY col_name col_declaration

 

col_declaration为列定义,它与CREATE TABLE语句中所用格式相同。MODIFY是在MySQL 3.22.16 中引入的。例子见图4.15。

 


图 4.15 更改列定义

 

从图4.15我们看到content字段在更改前是varchar(20),不允许NULL值。更改后变成varchar(80),允许NULL值。

 

  • 更改列的名称和定义。使用CHANGE语句可以更改列的名称,同时又可更改列的定义。语法如下:
  •  

ALTER TABLE tbl_name CHANGE old_col_name new_col_name col_declaration

 

old_col_name为列的原名称,new_col_name为列的新名称,col_declaration是列的定义。

 

 


图 4.16 更改列名称和定义

 

从图4.16中我们可以看到writer列(字段)在更改前名称是writer,类型是varchar(10),允许NULL值。更改后名称是submit,类型是varchar(8),不允许NULL。如果不想改动列名,可两次给出相同的列名。

 

ALTER TABLE tbl_name CHANGE col_name col_name col_declaration

 

  • 给表添加一列。

 

ALTER TABLE tbl_name ADD tbl_name col_declaration [FIRST | AFTER col_name]

 

col_declaration 为列定义,它与CREATE TABLE 语句中所用的格式相同。如果给出FIRST 关键字则增加的列成为表中第一列,如果给出了AFTER col_name,则增加的列放置在指定的列后。如果未指定增加列的位置,则此列成为表中最后一列。

 

col_declaration 我们增加前面“遗漏”了的ID列:

 


图 4.17 增加一列

 

图4.17中增加了一个ID列,类型为int整数类型,不允许NULL值,被设置成主键,自动递增编号,并且把ID列放在首位。

 

  • 删除列。从表中删除指定的列。
  •  

ALTER TABLE tbl_name DROP col_name

 


图 4.18 删除一列

 

注意:删除列后,列中的所有数据也将一同被删除。

 

4.4.5 DROP TABLE语句

DROP TABLE语句用来从数据库中删除指定的表。语法如下:

 

DROP TABLE tbl_name

 

比如,我们删除jokestable数据库,见图4.19。

 


图 4.19 删除表

 

注意:删除表将删除表中的所有记录。

 

4.5 添加、检索、修改和删除记录

仓库(数据库)搭建了,箱子(表)也定做好了,最后就是把商品(记录)放入箱子库存了。我们首先还是重建刚才的jokestable表:

 

 


图 4.20 完整的建表

 

4.5.1 添加记录

添加新记录。表建立后里面是空的,现在我们将一些数据放入其中。使用INSERT语句手工将记录插入某个表中。INSERT语句有几种形式:

 

  • 添加所有列的值:

 

INSERT INTO tbl_name VALUES(value1, value2,…)

 

例如:

 


图 4.21 插入记录

 

VALUES中包含表中每列的值,并且按表中列的次序给出,如果是字符串或日期就要用单引号或双引号括起来。可利用单个的INSERT语句将几个记录插入表中:

 

INSERT INTO tbl_name VALUES(…), (…), …

 

  • 添加指定列的值。只添加我指定列的值。

 

INSERT INTO tbl_name (col_name1, col_name2, …) VALUES(value1, value2, …)

 

  • 对于MySQL 3.22.10以上的版本,输入记录还有一种形式:

 

INSERT INTO tbl_name SET col_name1=value1, col_name2=value2, …

 

4.5.2 SELECT语句

SELECT语句用于从指定的表中检索出记录,这些被检索出的记录就形成了一个集合,简称为记录集。该语句的用法为:

 

SELECT Fields_list FROM tbl_name WHERE conditions

 

看着有些头晕?我们把它分开下:

 

SELECT 要选择的东西

FROM 一个或多个表

WHERE 数据必须满足的条件

 

看图4.21中的例子。*代表所有字段,若要查询表中的部分字段的值,则将这些字段罗列出来即可,各字段间用逗号分隔。

 


图 4.22 检索记录

 

WHERE为指定的条件,比如

 

SELECT * FROM product WHERE price<100

 

4.5.3 UPDATE语句

UPDATE语句用于更新修改指定记录的数据,其用法为:

 

UPDATE tbl_name SET col_name1=value1, col_name2=value2, … WHERE conditions

 

对符合条件的记录,更新修改指定字段的值。若没有WHERE条件限定,则对所有记录进行更新修改。例如:

 


图 4.23 更新记录

 

4.5.4 DELETE语句

DELETE语句用于删除指定的记录,其用法为:

 

DELETE FROM tbl_name WHERE conditions

 

删除符合条件的记录。若没有WHERE条件,则删除指定表中的全部记录。

 

例如,删除jokestable表中提交者为anndy的记录:

 


图 4.24 删除记录

4.6 本章小结

这章我们主要讲了些MySQL中的基本SQL语法,从创建数据库开始,然后创建数据库表,最后添加记录。每一个步骤都有若干个相关SQL命令对其进行操作,掌握好了SQL语法你就掌握了敲开数据库的钥匙。

你可能感兴趣的:(sql,基础,语法)