首页 理论教育 MySQL数据库操作基础

MySQL数据库操作基础

时间:2023-08-24 理论教育 版权反馈
【摘要】:本小节主要介绍使用SQL语言来操作和定义数据库。DQL,用来查询数据库中表的记录,常用操作有SELECT、FROM、WHERE等。注意:此处MySQL80只是在笔者电脑上安装的数据库自定义的一个名称,每个人根据自己的设置会有所不同。

MySQL数据库操作基础

小节主要介绍使用SQL语言来操作和定义数据库。SQL最初是由IBM开发出来的一种商业查询语言。从那时起,它就成为关系数据库管理系统(RDBMS)的标准查询语言。SQL是一种声明性语言,即用户只需描述所要的结果即可,而不必描述获得结果的过程。

总的来看,SQL语句分为5类。

(1)DDL(Data Definition Language,数据定义语言),定义数据库的结构。其主要命令有CREATE、ALTER、DROP等,CREATE命令可以用来创建一个新的表,一个表的视图,或者数据库中的其他对象;ALTER命令可以修改数据库中的某个已有的数据库对象,如一个表;DROP命令可以删除整个表,或者表的视图,或者数据库中的其他对象。此外,TRUNCATE命令可截断表内容,在系统开发期常用;COMMENT命令可为数据字典添加备注。DDL不需要commit,因此在使用DDL时要慎重。

(2)DML(Data Manipulation Language,数据操作语言),用来处理数据库中的数据。常用操作有INSERT、UPDATE、DELETE等。INSERT命令创建一条记录;UPDATE修改记录;DELETE删除记录。

(3)DQL(Data Query Language,数据查询语言),用来查询数据库中表的记录,常用操作有SELECT、FROM、WHERE等。

(4)DCL(Data Control Language,数据控制语言),用来定义数据库的访问权限和安全级别,及创建用户。常用操作有GRANT、REVOKE等。GRANT为用户赋予访问权限;REVOKE撤回授权权限。

(5)TCL(Transaction Control Language,事务控制语言),用来定义把一连串的操作作为单个逻辑工作单元处理。在本节的最后有关于数据库事务的详细描述。

注意:有的教材中将SQL语言分为4类,把DQL划入到DML中,即把SELECT也看作DML语言,因为SELECT只是用来查询,并没有操作改变数据库的内容。读者在了解了这些语句的具体作用后,便能领会这样划分的用意,不必过于纠结SQL到底该划分为几类。

用图3-6来概括SQL Language。

图3-6 SQL组成

1.启动并连接MySQL

通过管理员权限打开cmd窗口,输入“net start MySQL80”,启动MySQL数据库服务,如图3-7所示,也可以通过其他方法启动该服务。

注意:此处MySQL80只是在笔者电脑上安装的数据库自定义的一个名称,每个人根据自己的设置会有所不同。

图3-7 打开命令行工具

输入“mysql-u root-p”,然后根据提示输入密码登录即可。结果如图3-8所示,表明数据库连接成功。

图3-8 成功连接界面

2.创建数据库

连接MySQL数据库后,可以通过create语句进行数据库的创建,相关语法如下:

以下示例创建了一个MyDatabase数据库:

create database MyDatabase;

3.删除数据库

可通过drop语句进行数据库的删除,相关语法如下:

以下示例删除Mydatabase数据库:

drop database MyDatabase;

4.选择数据库

可通过use切换选择不同数据库,相关语法如下:

以下示例进入了MyDatabase数据库:

use MyDatabase;

5.创建、删除数据表

使用create table语句创建表,基本语法如下:

...;

以下示例创建了一个student学生信息表:

create table student

(Sid char(10)primary key,

Sname char(10),

Sgender char(2),

Sage int,

Sdept char(20)

);

删除表操作语法:

通过以下语句删除表:

drop table student;

6.插入数据

基本语法如下:

通过如下语句进行数据的插入:

Insert into student

(Sid,Sname,Sgender,Sage,Sdept)

values

(10100001,ˈ小明ˈ,ˈ男ˈ,19,ˈrsˈ);

多条记录导入的语法类似,如下结果所示:

由于后续需要用到student、course、sc三个表数据,因此请读者自行创建这三个表并插入数据,结果如下所示:

7.查询数据

查询数据的基本语法如下:

【例】查询student表中所有的记录:

select*from student;

【例】查询student中所有人的名字与其对应的系:

select Sname,Sdept from student;

8.查询条件where语句

通过where语句可以设定查询条件。

【例】通过where语句查询student中性别为男的记录:

select*from studentwhere Sgender=ˈ男ˈ;

9.更新语句

更新表的内容,基本语法如下:

【例】通过以下语句将小明的年龄由18岁更新为20岁:

Update student set Sage=20 where Sid=10100001;

10.删除语句

删除记录的语法如下:

11.查询条件like语句

查询条件like语句基本语法如下:

【例】通过以下语句查询出所有以设计两个字结尾的课程:

Select*from course where Cname likeˈ%设计ˈ;

结果如下:

12.union语句

union的相关语法如下:

通过以下语句联合查询student表中的Sid列以及course表中Cname列:

select sid from student

union

select cname from course;

结果如下:

13.order by排序语句

通过以下语句查询student中的所有记录并按Sid降序排列:

select*from student order by Sid desc;

结果如下:

通过以下语句查询student中的所有记录并按Sid升序排列:

select*from student order by Sid asc;(www.xing528.com)

结果如下:

14.group by分组语句

通过group by对查询到的结果进行分组,基本语法如下:

通过以下语句从学生选课表中选出所有人的Sid以及每个人对应的选课数量:

select Sid,count(*)from sc group by Sid;

结果如下:

15.连接语句

本例需要用到student表,课程表course,学生选课表sc。

(1)内连接(inner join),该语句的主要作用是将左右两个表中符合条件的内容输出,此处需要注意的是,只有两个表分别满足要求才能输出记录。

select*from student inner join sc on student.Sid=sc.Sid;

(2)左连接(left join),是以左表为基础,满足条件的左表记录均输出,右表中对应的记录若有缺失部分则以NULL填充。

select*from student left join sc on student.Sid=sc.Sid;

(3)右连接(right join),是以右表为基础,满足条件的右表记录均输出,左表中对应的记录若有缺失部分则以NULL填充。

select*from course right join sc on course.Cid=sc.Cid;

16.NULL值处理

经过前面的学习,读者已经知道该如何利用SQL SELECT命令及WHERE子句来读取数据表中的数据。但是如果当查询字段值为NULL时,就会导致查询命令无法工作。在MySQL中提供了三种运算符来解决这种问题。

(1)is NULL:当列的值是NULL,此运算符返回true。

(2)is not NULL:当列的值不为NULL,运算符返回true。

(3)<=>:比较操作符,当比较的两个值为NULL时返回true。

由于NULL值的特殊性,除了不能用“=NULL”或“!=NULL”在列中查找NULL值外,在MySQL中,NULL值与任何其他值的比较(即使是NULL)永远返回false。

【例】通过“select*from course where Cpno=NULL”来搜索course表中的NULL值记录。

上述查询的结果是Empty set,即查询失败。接下来使用is NULL语句进行查询,结果如下:

通过“select*from course where Cpno is not NULL”语句查询course表中Cpno列的属性值不是NULL值的记录,结果如下:

在实际的开发过程中,开发人员应根据工程需要,灵活地使用有关NULL值的操作语句,这样可以避免不必要的麻烦。

17.事务

MySQL事务主要用于处理操作量大、复杂度高的数据。例如,在人员管理系统中,如果要删除一个人员,既需要删除人员的基本资料,也要删除和该人员相关的信息,如邮箱、文章等。这样,这些数据库操作语句就构成一个事务。

在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务。

(1)事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行。

(2)事务用来管理insert,update,delete等语句。

一般来说,事务必须满足4个条件:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。

原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。数据库事务是数据库运行中的逻辑工作单位(或称为单元),单元中的每个步骤就是执行每句SQL,开始要定义一个事务边界(通常以BEGIN命令开始),在SQL语句全部下达后,COMMIT确认所有操作变更,此时事务完成;如果事务在执行过程中发生错误,会被回滚(rollback)到事务开始前的状态,就像这个事务从来没有执行过。

一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。若事务成功,整个数据集合都必须是事务操作后的状态,若事务失败,所有数据都必须与开始事务之前一样没有变更,不能发生部分数据有变更,而部分数据没有变更的情况。例如,银行数据库系统,处理用户间转账记录等操作,要严格确保数据的一致性。

隔离性:数据库具有允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。即事务与事务之间,必须互不干扰,用户意识不到别的用户的事务,各个事务之间相互不可见。事务隔离分为不同级别,包括读未提交(read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(serializable)。

持久性:事务处理结束后,对数据的修改就是永久的,即使系统故障也不会丢失。

一般在开发过程中使用BEGIN,ROLLBACK,COMMIT来实现事务的处理:①BEGIN,开始一个事务;②ROLLBACK,事务回滚;③COMMIT,事务确认。

首先使用创建表的方法创建一个空表number,在此注意,需要加入engine=innodb语句,因为只有使用了Innodb数据库引擎的表才支持事务,创建过程如下:

通过select语句查询number表是空表:

begin表示开始一个事务:

利用前面讲解过的插入数据集的语句进行数据的插入,在此插入no为3,name为奇数,过程如下:

同理,插入no为4,name为偶数,如下所示:

同理,插入no为5,name为奇数,如下所示:

通过commit语句确认事务,即结束该事务,如下所示:

通过select*from number语句查询,结果如下:begin表示开始一个事务:

向表中插入一条新的记录,如下:

插入新记录后的number表中的所有记录,如下:

rollback表示事务回滚:

事务回滚将导致最终的结果是之前那条新记录没有插入number表中:

关于事务的例子就列举这么多,如果读者对事务感兴趣,可以自行查阅资料进行更深入的学习。

18.索引

MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。打个比方,如果合理地设计并使用索引的MySQL是一辆兰博基尼,那么没有设计和使用索引的MySQL就是一个人力三轮车,它们在速度上相差很多,这也说明了索引对于MySQL运行的重要性。

索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。

创建索引时,用户需要明确哪些字段需要建立索引,一般对于SQL查询语句的条件中相关字段需要建立索引(及where语句中的相关字段)。实际上,索引也是一个逻辑表,该表保存了主键与索引字段,并指向实体表的记录。

虽然索引大大提高了查询速度,但是需要注意的是,太多索引会导致数据库更新效率降低,例如,更新数据库中某一个具有多个索引的表,更新效率就不会高。具体包括对表进行INSERT、UPDATE和DELETE等操作。因为更新表时,MySQL不仅要更新表中数据,还要更新相对应的多个索引文件。

【例】为student表创建一个索引n,如下:

如果要删除一个索引名为n的索引,使用如下语句:

四、MySQL视图简介和使用

数据库视图View又称为虚拟表或逻辑表。因为数据库视图与数据库表类似,它由行和列组成,因此可以根据数据库表查询数据。大多数数据库管理系统(包括MySQL)允许用户通过具有一些先决条件的数据库视图来更新基础表中的数据。

数据库视图可以帮助用户简化复杂查询。通过数据库视图,用户只需使用简单的SQL语句,而不是使用具有多个连接的复杂的SQL语句进行操作。同时,数据库视图有助于限制特定用户的数据访问权限。开发者可能不希望所有用户都可以查询敏感数据的子集。可以使用数据库视图将非敏感数据仅显示给特定用户组。

安全是任何关系数据库管理系统的重要指标,数据库视图为数据库管理系统提升了额外的安全性。数据库视图允许创建只读视图,以将只读数据公开给特定用户。这样特定用户只能以只读视图检索数据,但无法更新和修改数据。

数据库视图实现向后兼容。假设有一个中央数据库,许多应用程序正在使用它。此时如果需要重新设计数据库以适应新的业务需求,或者是需要删除一些表并创建新的表,而且不影响其他应用程序,在这种情况下,可以创建与将要删除的旧表具有相同模式的数据库视图。

总结而言,数据库视图有如下优点。

(1)提高数据安全性。通过视图,用户只能查询和修改指定的数据。数据库授权命令可以限制用户的操作权限,但不能限制到特定行和列上。使用视图可以将用户的权限限制到特定的行和列上。

(2)提高表的逻辑独立性。视图可以屏蔽原有表结构变化带来的影响。原有的表结构增加列和删除未被引用的列,对视图都不会造成影响。

当然,数据库视图也有缺点。

(1)性能降低。从数据库视图查询数据可能会很慢,特别是如果视图是基于其他视图创建的。

(2)依赖关系变强。一个根据数据库基础表创建的视图,每当更改与其相关联的表的结构时,都必须更改视图。

(3)视图中无实际数据。数据库中只存放视图的定义,并没有存放视图中的数据,数据存放在原来的表中。

(4)视图中的数据依赖于原来的表中的数据,表中的数据发生变化,显示在视图中的数据也会改变。

在读者对数据库视图有了一定的了解后,我们将介绍数据库视图的基本操作。

1.创建视图

创建视图一般使用create view视图名。具体语句为:

2.查看视图

查看视图可以使用describe语句、Show table status语句、Show create view语句等。

使用describe语句查看视图字段信息。基本语法:

使用Show table status语句查看视图的基本信息。基本语法:

MYSQL数据库可以通过执行SHOW TABLE STATUS命令来获取每个数据表的信息。

使用Show create view语句查看创建视图的定义语句和视图的字符编码格式。基本语法:

3.修改视图

修改语句,基本语法:

修改前:

修改语句:

修改后:

4.删除视图

删除语句,基本语法:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈