暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如何通过MySQL进行数据库基本操作

晟数学院 2021-04-16
368

点击“蓝字”关注我们


前言

本文博客基于数据库MySQL8.0.23,编译器IntelliJ IDEA 2019.3.3,在IDEA中进行数据库连接并进行SQL基本语句操作。

01

连接数据库

首先打开IDEA工作界面,新建工程,打开数据库Database,点击DaTa Source进入数据库连接界面



输入用户名及密码测试连接成功后就点击OK,就可以连接好数据库了。



在连接好图后可以得到下图的效果。SQL的数据库在右边可一一展示,也可以选择只展示一部分。左半部分的空白部分,是编写数据库程序的地方,可以把cmd命令里的指令操作给可视化操作。


02

进行数据库SQL编写的基本语句

进入数据库后,需要掌握基本的SQL语句进行数据库、表的建立和操作;也需要掌握查询的基本方式;积累一些常用的SQL函数集合。本模块着重介绍这方面的基本内容,包括代码即样例。


创建数据库,表以及更新数据的方法


(1)

【创建/使用/删除】【数据库/表】输入标题


在学习掌握数据库基本命令的过程中,创建/删除是最为重要的命令。利用CREATE命令来创建数据库和表。DROP命令删除。USE命令使用数据库,实现数据库间的切换。


比如说,我们要建立一个名字叫做WNB的数据库,里头要有一个叫做student的表格,表格里分为学号,姓名,年级号,性别,出生日期,家庭地址,邮箱。



    -- 建立数据库,把create替换为drop即删除数据库
    create database if not exists WNB;
    use WNB #使用数据库/表
    create table if not exists student(
    `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
    `name` VARCHAR(30) NOT NULL COMMENT '姓名',
    `gradeid` INT(1) NOT NULL COMMENT '年级号',
    `sex` VARCHAR(2) NOT NULL COMMENT '性别',
    `birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
    `address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
    `email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY(`id`)
    )ENGINE = INNODB DEFAULT CHARSET=utf8
    -- 建立表,INNOBE是引擎,CHARSET是字体形式,一般这种配置显示汉字比较好


    (2)

    【更改】【数据库/表】


    更改数据库、表的命令中,DESC命令,显示出表的结构信息,可以用来检查修改情况。此外,在进行修改时:ALTER是最为重要的命令。利用RENAME AS命令来修改表名。MOTIFY/CHANGE命令都可以进行字段的修改,只不过Change命令只重命名字段,而Modify可以修改约束和字段类型。drop命令删除操作。

      -- 显示表结构
      DESC student;
      -- 修改表
      ALTER table student RENAME AS student1;
      -- 添加字的字段
      ALTER TABLE student ADD age INT(11);
      -- 修改表的字段
      ALTER TABLE student MODIFY age VARCHAR(11); -- 修改约束和字段类型
      ALTER TABLE student CHANGE age age1 INT(1); -- 重命名字段
      -- 删除字段
      ALTER TABLE student DROP age1;
      -- 删除表
      DROP TABLE IF EXISTS student;


      (3)

      【创建/使用/删除】【数据库/表】输入标题


      更改数据库、表的信息命令时,INSERT INTO插入命令,是最为重要的命令。格式为INSERT INTO 标明 (字段1,字段2……)VALUES(对应字段1,对应字段2……),比如说我们插入三个数据,如下代码操作即可。


      UPDATE命令来设置数据,往往联立WHERE命令进行条件的判断。


      DELETE命令和TRUNCATE命令都可以对表中数据进行删除操作。只不过TRUNCATE命令会清空数据表,让计数器归零。


      可以训练以下的代码内容:

        -- 插入操作:需要一一对应,需要以“;”结尾
        INSERT INTO `student`(`id`,`name`,`gradeid`,`sex`,`birthday`,`address`,`email`)
        VALUES (1000,'张三',3,'男','2004-8-9','宿舍楼A101','WNB@qq.com'),
        (1001,'李四',3,'女','2005-4-9','宿舍楼C101','WFR@qq.com'),
        (1002,'王五',3,'男','1999-12-9','宿舍楼A201','ZBN@qq.com');
        -- 更新数值操作
        UPDATE `student` SET `name` = '赵六' WHERE id =1001; -- where表示条件判断
        -- 清空指定信息
        DELETE FROM `student` WHERE id=1000; -- 清空指定信息,但不会影响计数器
        TRUNCATE `student`  -- 清空student表,计数器会归零,不会影响事务


        注意:可用同样的方式可以自己创建result,subject等表内容,插入自己的数值结果。


        查询操作


        (1)

        查询【基本知识】和【命令】


        查询命令即SELECT,是最为重要的命令,也是数据库操作中最为重要的基础内容。格式为SELECT [某一(些)字段/*(表示全部)] FROM [表名];对于一些重复出现的信息,用DISTINCT命令进行去重,保留一个信息。


        除了WHERE命令外,LIKE命令所支持的模糊查询,也一样应用广泛,需要掌握。其中“%”表示字符数不限,一个“_”只能代表一个字符, 通过一一比对字符,来判定查询结果。


        可以进行如下的训练操作。

          -- 查询全部学生
          SELECT * FROM student;
          -- 查询指定字段
          SELECT `id` AS 学号,`name` AS 姓名 FROM student;
          -- 查询全部成绩,distinct去重,每个学号只显示一条
          SELECT DISTINCT `id` FROM result;
          -- 查看版本
          SELECT VERSION();
          -- 考试成绩+1分显示
          SELECT `id`,`mark`+1 AS '提分后' FROM result;
          -- where选择查询
          SELECT `id`,`subid`,`mark` FROM result
          WHERE id !=1000;
          -- Like模糊查询
          SELECT `id`,`name` FROM student
          WHERE `name` LIKE '%牛%'-- %表示N位数,一个“_”表示一个字母


          (2)

          【联合查询】


          联合查询是联合多张表进行数据的查询,是查询的重点和难点,也是实现数据库目标功能查询的重要手段。联合查询最主要分为联合交叉查询、左、右联表查询三种形式。


          JOIN,是联合查询最为标志性的命令,前面通过搭配INNER、LEFT、RIGHT来实现查询的分类。格式为:SELECT [内容] FROM [表] AS [新的名称1] [联合方式] JOIN [表2] AS [新的名称2] ON [新的名称1].[某字段]= [新的名称2].[某字段]对于ON代表的是选择条件,显然两个都会有相同字段的表,才能联合起来一起查询,为避免两个表中查询的字段混叠,需要在SELECT中确定选择查询的是哪一张表的信息。左右联表查询的返回值即为哪个表的值,另一个表的更改,不会引起查询结果的变换。


          可以进行如下的训练操作。

            -- 联合查询
            -- 格式:联立subject表和result表,课程id号是联合的媒介,
            -- 注意书写格式,对于媒介字段需要特别标明是选自哪个表的。
            SELECT id,s.subid,subname,mark
            FROM `subject` AS s
            INNER JOIN result AS r
            ON s.subid=r.subid


            -- 左右联表
            -- 注意:与联合查询不同之处在于命令,左Left,右Right,
            -- 左联表查询会从左表返回所有值即使右表没有匹配,
            -- 右联表同理,左右联表和联合查询可以同时使用。
            SELECT id,s.subid,subname,mark
            FROM `subject` AS s
            LEFT JOIN result AS r
            ON s.subid=r.subid
            -- 注意:由于是左联表查询,返回左表的值即subject,如果
            -- result表里内容发生改变,得到的结果不会出现右表的改变。


            (3)

            【分页和排序】


            排序和分页都位于Where命令之后,而排序位置靠前分页位置。

            排序的命令格式: order by [方式],其中方式填asc为升序;desc降序

            分页的命令格式: limit 起始值,页面的大小1


            可以进行如下的训练操作:比如在subject表里,建立了一门名叫数据库的课程。要求查询《数据库》课程成绩排名前5的学生信息,并且要求学生该门课程的分数要大于90。 容易知道,需要联合查询科目、成绩以及学生三张表,课程号和学号是连接三张表的纽带。由于成绩排名,并且要取出前5名,所以需要考虑排序和分页。

              -- 执行命令:
              SELECT s.id,`name`,`subname`,mark
              FROM `student` s
              INNER JOIN `result` r
              ON s.id=r.id
              INNER JOIN `subject` sub
              ON sub.subid=r.subid
              WHERE subname='数据库' AND mark>=90 -- mark是分数字段,可自己设置
              ORDER BY mark DESC
              LIMIT 0,5


              mysql常用函数表


              MySQL官网提供非常多的内置函数信息,以下整理的这些函数,对于一般的数据库操作是十非常有用的,所以还请各位收藏保留这部分内容,最好能熟练应用,可事半功倍。


              下面是一些内置函数应用练习:

                --(1)基本函数
                -- 数学运算
                SELECT ABS(-8) -- 绝对值
                SELECT CEILING(9.4) -- 向上取整
                SELECT FLOOR(9.4) -- 向下取整
                SELECT RAND() -- 返回随机数
                SELECT SIGN(10) -- 判断一个数的符号 0-0,负数-1,正数1
                -- 字符串函数
                SELECT CHAR_LENGTH('Hello world!') -- 字符串长度
                SELECT CONCAT('Hello',' world','!') -- 拼接字符
                SELECT INSERT('我爱美食世界',1,2,'超级热爱') -- 查询,
                -- 从某个位置开始代替某个长度,本例子是从“我”字符开始替换,2个字节长度,
                -- 即把“我爱”替换成“超级喜欢”
                SELECT UPPER('wangshen') -- 大写字母
                SELECT LOWER('WANGSHEN') -- 小写字母
                SELECT INSTR('Wangshen','n') -- 返回第一次出现子串的索引
                SELECT REPLACE('A说你很厉害','你','他') -- 替换出现的指定字符串,你换成他
                SELECT SUBSTR('AB说他可是特别牛逼',4,6) -- 返回指定的字符子串(源字符串,截取位置,长度)截取出来“他可是特别牛”
                SELECT REVERSE('猫吃鱼') -- 反转,得到鱼吃猫的结果
                -- 查询姓 王-->李的同学
                SELECT DISTINCT REPLACE(`name`,'王','李') FROM student
                WHERE `name` LIKE '王%'
                -- 获取时间
                SELECT NOW() -- 获取当下时间
                SELECT CURDATE() -- 获取当前日期,等同于 SELECT CURRENT_DATE(); SELECT LOCALTIME() -- 获取本地时间;SELECT SYSDATE(); -- 获取系统时间
                SELECT DAY(NOW()) -- 获取当下天数
                --(2)聚合函数
                聚合函数用途非常广泛,最常用的来说,分为countsum,avg,max,min五种。
                用法:
                SELECT COUNT(*) FROM student; -- 不会忽略NULL
                SELECT COUNT(id) FROM student; -- 会忽略NULL值
                SELECT COUNT(1) FROM student; -- 本质计算行数
                SELECT SUM(`mark`) AS 总和 FROM result
                SELECT AVG(`mark`) AS 平均分 FROM result
                SELECT MAX(`mark`) AS 最高分 FROM result
                SELECT MIN(`mark`) AS 最低分 FROM result
                -- 获取成绩单中成绩信息


                推荐阅读

                Mysql底层优化(通讯、缓存池,引擎,分支)

                2021-01-27

                PostgreSQL备份工具 pgBackRest使用

                2021-01-26

                点击“阅读原文”

                文章转载自晟数学院,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论