前面我们已经讲述了,登录时,我们使用mysql –u root –p命令进行,此时如果设置了密码,则需要输入密码。

输入密码后即进入MySQL的操作界面,此时,命令行窗体左侧显示“mysql>”表示此时可接受mysql命令。

  • (1)列出全部数据库命令

我们使用“show databases;”命令列出当前MySQL管理的全部数据库。(注意:mysql命令以英文;为结束符)。

这里可以看到,目前mysql管理的数据库共有4个。

  • (2)切换数据库

我们可以在上述显示的4个数据库中进行切换,表示当前所使用的是哪个数据库。我们使用“use”+数据库名进行数据库切换。如

  • (3)列出当前数据库下全部表

我们使用“show tables;”命令,列出当前数据库下全部表名称,如

  • (4)创建一个数据库。

使用“create database”+数据库名,来创建一个新的数据库。如,按本节开始的例子,我们创建一个名为“db_edu_sys”的数据库,并切换至该数据库。

从提示信息上我们看到,我们成功创建了名为“db_edu_sys”,并将当前数据库切换至该数据库。

  • (5)向数据库中添加表。

我们使用SQL语句“CREATE TABLE”命令进行添加表的操作。

例如,上述例子中,我们建立教师表(Teacher),可以写成如下SQL语句

CREATE TABLE teacher(ID int auto_increment primary key,t_name varchar(30),t_title varchar(50));

这时,我们再查看数据库中的表,可以看到新建立的教师表(teacher)。

  • (6)导入sql文本

有时,对多条SQL语句进行操作时,我们一条一条的写入不是很方便,尤其是在有事务操作和结构化语句时,就更加困难,因此,我们可以将SQL语句事先写好,保存在文本中,然后一次性导入到数据库中,我们使用如下命令对sql文本进行导入。

“source ”+文本文件

如source c:/createtable.sql

(如果不写路径名,则默认为当前路径,即执行“mysql –u root –p”时前面显示的路径。)

我们将学生表、课程表、选课表、教学表写到一个sql文本中,一次导入。这个文本我们命名为createtable.sql,其内容如下:

CREATE TABLE student(ID int auto_increment primary key,s_name varchar(30),s_class varchar(50));

CREATE TABLE course(ID int auto_increment primary key,c_name varchar(30),c_credit varchar(50));

CREATE TABLE teaching(ID int auto_increment primary key,t_ID int,c_ID int);

CREATE TABLE selection(ID int auto_increment primary key,s_ID int,c_ID int);

我们运行导入,结果如下:

  • (7)查看表结构

我们可以通过“DESCRIBE”+表名,来查看某一张表的表结构,如执行“DESCRIBE teacher”结果如下

  • (8)添加数据

向表内添加数据要使用SQL语句“INSERT INTO”,如,我们要向teacher表中添加一条教师的信息,可以写成如下形式:

INSERT INTO teacher(t_name,t_title) VALUES('张老师','副教授');

执行后,如下

  • (9)查询数据

我们通过SQL语句“SELECT … FROM … WHERE …”进行查询,其中“SELECT”后面是要查询的字段名称,可以多个,也可以用“*”,表示查询全部字段,“FROM”后面是要查询的表名,“WHERE”后面是查询条件,支持“AND”和“OR”的组合。

查询条件中,运算符号可以为“=”(等于),“>”(大于),“<”(小于),“LIKE”(类似于),“<>”(不等于)等,请按照实际情况进行书写。比如,我们要查询出所有姓名不等于空的教师的信息,可以使用如下SQL语句:

SELECT * FROM teacher WHERE t_name <> '';

  • (10)删除数据

我们使用SQL语句的“DELETE FROM…WHERE”进行数据删除操作。例如,删除ID为1且姓名为张的老师

DELETE FROM teacher WHERE t_name LIKE '张%' AND ID = 1;

  • (11)修改数据

我们使用SQL语句“UPDATE [tablename] SET … WHERE …”来进行修改数据操作,例如,将ID为2的老师姓名改为“王志超”可以写作

UPDATE teacher SET t_name='王志超' WHERE ID=2;

  • (12)导出数据

我们使用“SELECT … FROM [tablename] INTO OUTFILE …”进行数据导出,例如,使用如下语句进行数据导出操作:

SELECT * FROM teacher INTO OUTFILE "E:/mysql-8.0.23/teacher.txt";

执行结果如下

得到的文件teacher.txt内容如下:

  • (13)数据库备份与恢复

使用mysqldump对MySQL进行备份。(注意:mysqldump是一个可执行程序,请直接在命令行下运行,不要进入mysql控制台后再运行)

例如,使用下面的命令对指定的数据库进行备份。

mysqldump -uroot -p123456 db_edu_sys > "E:/mysql-8.0.23/db_edu_sys.sql"

将“db_edu_sys”数据库备份至“E:/mysql-8.0.23/db_edu_sys.sql”文件中,执行后如下图所示

这里会出现一个警告:在命令行上使用密码是不安全的。但是,命令已经执行完毕了,我们到对应的文件夹下可以看到备份出来的文件。部分内容如下:

即表明已经备份成功。

恢复数据库时,导入备份文件(参看本节第(6)点)即可,我们进入mysql命令行状态,输入下列语句即可恢复数据:

 USE db_edu_sys

SET SQL_LOG_BIN=0;

source "E:/mysql-8.0.23/db_edu_sys.sql";
  • (14)事务

我们来讨论下数据库中一个比较重要的概念——事务,这在数据操作时会经常遇到。

我们将上述5个数据表内容进行了填充,将教师表、学生表、课程表、教学表、选课表内容进一步充实,每个表中都存在了数据。

考虑这样一种情况,有一门课程(例如:课程ID:1,课程名称:高等数学),已被教师(教师ID:2,教师姓名:王志超)领取了教学任务,同时,该课程被学生(学生ID:1,学生姓名:李晓军)选课。由于一些原因,我们准备删除这门课程,那么,我们怎么删除才能保证数据的一致性呢?

如果要删除这门课程,我们首先要删除教师教学任务,还要删除学生的选课情况,最后才能删除这门课程,同时,我们还要保证上述过程必须同时完成,不能只删除了课程,而教学任务和选课情况没有删除,这样就会在教学表和选课表中留下不一致的数据(无法与课程表关联)。

我们将必须一起完成的操作成为一个原子操作,我们使用事务来完成这个操作。即,当整个过程均无误的完成时,我们对事务过程整体进行提交,确保事务操作全部完成;而当事务操作中部分操作出现错误时,我们可以通过“回滚”确保事务全部都没有提交,返回没有执行该事务时的状态,从而确保数据的一致性。

例如,上述操作我们可以通过以下事务代码进行

delimiter $

CREATE PROCEDURE deleteCourse(IN cid int)  -- 声明删除课程的存储过程(函数)参数为课程ID

BEGIN

  DECLARE i_error integer; -- 定义一个变量,用于接收出错信息

  DECLARE CONTINUE handler FOR SQLEXCEPTION SET i_error = 1; -- 一旦出错则将变量设置为1

  START TRANSACTION ;   -- 发起事务

  DELETE FROM teaching WHERE c_ID=cid;   -- 删除教学表中有关该课程数据

  DELETE FROM selection WHERE c_ID=cid;  -- 删除选课表中有关该课程数据

  DELETE FROM course WHERE id=cid;       -- 删除课程表中的该课程

  IF i_error = 1 THEN    -- 判断是否出错

     ROLLBACK;          -- 回滚事务

  ELSE

     COMMIT;             -- 提交事务

  END IF;

END $

定义了上述存储过程后,在命令行下调用

Call deleteCourse(1);

即可执行对应的事务,按照上述分析结论,同时删除3个表对应的课程表编号为1的全部数据。

  • (15)复杂SQL查询

本节的最后,我们介绍复杂一些的SQL查询——多表联合查询。

在实际运用查询时,单独对一个表的查询往往不能满足查询的需求,这时就需要对多表进行联合查询。例如,我们想查询“数值分析”这门课的教师姓名是什么,这就涉及到从“课程表”、“教学表”和“教师表”3个表中联合查询出结果,我们使用“AND”关键字进行查询。

SELECT a.t_name,c.c_name FROM teacher a,teaching b,course c WHERE a.ID = b.t_ID AND b.c_ID = c.ID AND c.c_name='数值分析';

再比如,我们想要查询哪些课程都由哪个教师教学,以便学生进行选课,我们可以使用左连接的方式进行查询。

(“左连接”即表示,只有左侧表中有数据,无论右侧表中是否有数据,都可查询出结果,右侧无数据的表使用“NULL”表示。本例中,由于不是所有的课程都由老师领取了教学任务,因此,将“课程表”放在左侧连接教学任务表,没有教师领取任务的课程,教师姓名一栏为“NULL”),SQL查询语句如下:

SELECT a.ID AS 课程编号,a.c_name AS 课程,b.t_name AS 教师 FROM
course a LEFT JOIN
(SELECT c.t_name,d.c_ID
FROM teacher c,teaching d WHERE c.ID=d.t_ID) b
ON a.ID = b.c_ID;

查询结果为:

本节小结

这一节,我们简单讲述了MySQL数据库的操作和一些基本的SQL语句,因为在后面的章节中,本节的内容会大量使用,请读者熟练掌握。有关SQL语法和相关操作,尤其是多表联合查询、存储过程和事务处理等,内容相对较难,有兴趣的读者可以参考有关数据库的书籍,这里仅为入门级的描述。本节中的数据库和表的设计还很简单,只为了说明问题并便于理解,由于本书后续环节还将使用这里的数据库和表,到时我们会对它们进行优化处理。有关本节所涉及的有关代码、表结构,成书过程中我们会逐渐整理并挂在书后附件对应的网站上,请读者自行下载学习。

1.4 数据库和常用SQL语句(正文)——MySQL数据库命令和SQL语句的更多相关文章

  1. MySQL数据转移至SQL Server详解

    最近有个活是mysql数据转移到sql server 2012,直接手动转工作量太大,发现网上有工具教程,则记录一下. 一.安装MySQL ODBC驱动为MySQL安装Connector/ODBC驱动 ...

  2. 在PL/SQL使用游标获取数据及动态SQL

    1.游标概念: 当在PL/SQL块中执行DML(增删改)时,Oracle会为其分配上下文区(Context Area),游标是指向上下文区的指针 2.  游标分类: A.  隐式游标 a.  在PL/ ...

  3. MySQL数据迁移到SQL Server

    数据迁移的工具有很多,基本SSMA团队已经考虑到其他数据库到SQL Server迁移的需求了,所以已经开发了相关的迁移工具来支持. 此博客主要介绍MySQL到SQL Server数据迁移的工具:SQL ...

  4. Hadoop集群(第10期副刊)_常用MySQL数据库命令

    1.系统管理 1.1 连接MySQL 格式: mysql -h主机地址 -u用户名 -p用户密码 举例: 例1:连接到本机上的MySQL. 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入 ...

  5. window 常用MySQL数据库命令总结

    登录:cmd - mysql -uroot -p 创建数据库:CREATE DATABASE `tpcms` DEFAULT CHARACTER SET utf8 COLLATE utf8_gener ...

  6. Hadoop集群(第11期)_常用MySQL数据库命令

    1.系统管理 1.1 连接MySQL 格式: mysql -h主机地址 -u用户名 -p用户密码 举例: 例1:连接到本机上的MySQL. 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入 ...

  7. 数据库命令行操作语句 linux 详细

    1.连接数据库 命令: use <数据库名> 2.查看表的引擎类型等状态信息 SHOW TABLE STATUS [FROMdb_name] [LIKE 'pattern'] 3.当前数据 ...

  8. MySQL 数据 导入到 SQL Service

    1.下载安装ODBC驱动程序 地址:http://dev.mysql.com/downloads/connector/odbc/ 注意:系统的版本问题( 我的是64位的win7系统,但是SQL Ser ...

  9. MySQL数据查询子查询语句

随机推荐

  1. hdu2546 饭卡

    Problem Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负) ...

  2. Miller_Rabbin算法判断大素数

    普通的素数测试我们有O(√ n)的试除算法.事实上,我们有O(s*log³n)的算法. 下面就介绍一下Miller_Rabbin算法思想: 定理一:假如p是质数,且(a,p)=1,那么a^(p-1)≡ ...

  3. 梨子带你刷burp练兵场(burp Academy) - 服务器篇 - Sql注入 - SQL injection UNION attack, determining the number of columns returned by the query

    目录 SQL injection UNION attack, determining the number of columns returned by the query SQL injection ...

  4. 2020ICPC·小米 网络选拔赛第一场

    2020ICPC·小米 网络选拔赛第一场 C-Smart Browser #include <string> #include <iostream> std::string s ...

  5. CF1471-C. Strange Birthday Party

    CF1471-C. Strange Birthday Party 题意: 你要举办一场生日派对.派对有\(n\)个人,每个人都有一个数字\(k_i\).超市有\(m\)件礼物,购买每件礼物需要花费\( ...

  6. ssh原理及加密传输

    1.ssh??(保证过程中是加密的,即安全的)ssh 是 Secure Shell 的缩写,是一个建立在应用层上的安全远程管理协议.ssh 是目前较为可靠的传输协议,专为远程登录会话和其他网络服务提供 ...

  7. 【转】Docker 核心技术与实现原理

    转自:https://draveness.me/docker 提到虚拟化技术,我们首先想到的一定是 Docker,经过四年的快速发展 Docker 已经成为了很多公司的标配,也不再是一个只能在开发阶段 ...

  8. MySQL 误删用户故障解决方案

    目录 "误删"所有用户 解决方式一: 停止数据库 跳过 授权表 和 网络启动(重要) 插入新的用户 重启启动数据库 解决方式二: 停止数据库 跳过 授权表 和 网络启动(重要) 授 ...

  9. Kubernets二进制安装(5)之私有仓库harbor搭建

    在IP地址为192.168.80.50,机器名为mfyxw50上搭建私有仓库harbor harbor下载地址: harbor下载连接地址:https://github.com/goharbor/ha ...

  10. Python——Django框架——django-simple-captcha(验证码)

    一.引用 包 pip install django-simple-captcha 二.将captcha加入setting的 INSTALLED_APPS 三.运行python manager.py m ...