登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

骐骥一跃

日积跬步 业精于勤荒于嬉

 
 
 

日志

 
 

[原创]MySQL基础入门-05MySQL的SQL语法  

2006-12-10 23:22:10|  分类: 数据库 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

第四章 MySQL的SQL语法

本文作者:印第安 (indian@163.com)

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:

[原创]MySQL基础入门-05MySQL的SQL语法 - 印第安 - 印第安的 Blog

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

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

 

4.2 第一个MySQL查询

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

 

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

 

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

 

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

[原创]MySQL基础入门-05MySQL的SQL语法 - 印第安 - 印第安的 Blog

图 4.1 一个简单的查询

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

 

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

[原创]MySQL基础入门-05MySQL的SQL语法 - 印第安 - 印第安的 Blog

图 4.2 查询分成几行

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

 

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

 

SELECT USER()

select user()

SeLeCt UsEr()

 

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

 

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

[原创]MySQL基础入门-05MySQL的SQL语法 - 印第安 - 印第安的 Blog

图4.3 查询中的函数

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

 

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

[原创]MySQL基础入门-05MySQL的SQL语法 - 印第安 - 印第安的 Blog

图 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。

[原创]MySQL基础入门-05MySQL的SQL语法 - 印第安 - 印第安的 Blog

图 4.5 创建数据库

4.3.2 SHOW DATABASES语句

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

 

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

 

SHOW DATABASES

 

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

[原创]MySQL基础入门-05MySQL的SQL语法 - 印第安 - 印第安的 Blog

图 4.6 查看数据库

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

 

4.3.3 SELECT DATABASE()用法

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

[原创]MySQL基础入门-05MySQL的SQL语法 - 印第安 - 印第安的 Blog

图 4.7 选择的数据库

注:DATABASE()是一个函数。

 

4.3.4 USE语句

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

[原创]MySQL基础入门-05MySQL的SQL语法 - 印第安 - 印第安的 Blog

图 4.8 使用数据库

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

 

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

[原创]MySQL基础入门-05MySQL的SQL语法 - 印第安 - 印第安的 Blog

图 4.9 成为当前数据库

4.3.5 DROP DATABASE语句

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

 

DROP DATABASE db_name

 

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

[原创]MySQL基础入门-05MySQL的SQL语法 - 印第安 - 印第安的 Blog

图 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:

[原创]MySQL基础入门-05MySQL的SQL语法 - 印第安 - 印第安的 Blog

图 4.11 创建数据库表

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

 

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

 

4.4.2 SHOW TABLES语句

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

 

SHOW TABLES

 

命令的使用见图4.12。

[原创]MySQL基础入门-05MySQL的SQL语法 - 印第安 - 印第安的 Blog

图 4.12 查看数据库表

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

 

4.4.3 DESCRIBE TABLE语句

 

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

 

DESCRIBE TABLE tbl_name

 

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

[原创]MySQL基础入门-05MySQL的SQL语法 - 印第安 - 印第安的 Blog

图 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:

[原创]MySQL基础入门-05MySQL的SQL语法 - 印第安 - 印第安的 Blog

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

 

ALTER TABLE tbl_name MODIFY col_name col_declaration

 

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

[原创]MySQL基础入门-05MySQL的SQL语法 - 印第安 - 印第安的 Blog

图 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 是列的定义。

[原创]MySQL基础入门-05MySQL的SQL语法 - 印第安 - 印第安的 Blog

图 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 列:

[原创]MySQL基础入门-05MySQL的SQL语法 - 印第安 - 印第安的 Blog

图 4.17 增加一列

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

 

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

ALTER TABLE tbl_name DROP col_name

[原创]MySQL基础入门-05MySQL的SQL语法 - 印第安 - 印第安的 Blog

图 4.18 删除一列

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

 

4.4.5 DROP TABLE语句

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

 

DROP TABLE tbl_name

 

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

[原创]MySQL基础入门-05MySQL的SQL语法 - 印第安 - 印第安的 Blog

图 4.19 删除表

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

 

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

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

[原创]MySQL基础入门-05MySQL的SQL语法 - 印第安 - 印第安的 Blog

图 4.20 完整的建表

4.5.1 添加记录

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

 

  • 添加所有列的值:

INSERT INTO tbl_name VALUES(value1, value2,…)

 

例如:

 

[原创]MySQL基础入门-05MySQL的SQL语法 - 印第安 - 印第安的 Blog

图 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中的例子。* 代表所有字段,若要查询表中的部分字段的值,则将这些字段罗列出来即可,各字段间用逗号分隔。

[原创]MySQL基础入门-05MySQL的SQL语法 - 印第安 - 印第安的 Blog

图 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条件限定,则对所有记录进行更新修改。例如:

[原创]MySQL基础入门-05MySQL的SQL语法 - 印第安 - 印第安的 Blog

图 4.23 更新记录

4.5.4 DELETE语句

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

 

DELETE FROM tbl_name WHERE conditions

 

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

 

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

[原创]MySQL基础入门-05MySQL的SQL语法 - 印第安 - 印第安的 Blog

图 4.24 删除记录

4.6 本章小结

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

 

 

~全文完~

 

        indian

    2006年12月10日23:22 发表。

    2012年11月12日20:25:43 更新。排版美化。

  评论这张
 
阅读(5063)| 评论(1)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018