美文网首页
MySQL基础入门

MySQL基础入门

作者: RunningSnailCHN | 来源:发表于2020-04-09 09:06 被阅读0次

    在任何一组东西中,最重 要的只占其中一小部分,约20%,其余80%尽管是多数,却是次要的,这就是大家所知道的** 二八原则 ,换句话说:可以用最少的时间和精力学习到最核心的知识,即用20%的时间和精力来做到80%的效果,这也是这篇文章的初衷。本文将总结出MySQL中最常用的知识,以此达到快速学习的目的。MySQL是一个实用性工具,学习的最好方式是实践,实践,实践**。


    本文主要分为下面几部分:

    • 数据库中涉及到的基本概念
    • MySql安装与连接及工具
    • 数据操作
    • 索引的简单介绍

    1 基本概念

    数据库

    • 按照数据结构来组织、存储和管理数据的仓库,可以理解为一个文件夹或者是仓库,里面存放各种有结构的数据

    • 某种特定类型数据的结构化列表,类似于EXCEL中的表格

    模式

    • 关于数据库或表的描述信息,如表包含哪些列,每列的数据是数字还是文本等

    • 表中的一个字段。所有表都是由一个或多个列组成的,同一列数据类型相同

    • 表中的一个记录,MySQL 中以行的形式存储数据

    主键

    • 表中能够唯一标识每一行数据的的一列或多列,如登记学生的信息,学生都有唯一的学号,这个学号就可以设置为主键,当然也可以用身份证号

    2 MySql的安装与工具

    MySql的安装

    • mysql下载地址
      访问上述下载地址,根据自己的操作系统选择对应的安装包,目前最新的版本已经到了8.0,但是现在好多公司还是使用5.7左右的版本,因此也说明了版本不是越新越好的。

    连接工具

    安装mysql后,连接数据库有多种方法:

    • 命令行连接
    > mysql -h 127.0.0.1 -u root -p
    -- 使用root用户登录到本地3306端口上的数据库,也可以登录远程的,只要把-h 后面地址改成远程ip即可
    
    
    • 使用工具连接
      主要图形化工具有

    两个都是可以通过图形界面的形式访问数据库。可根据个人使用喜好选择。

    3 SQL 语法

    SQL 用于访问和处理数据库的标准的计算机语言,主要操作包括对数据库,表及表中记录的 增删改查(CRUD)。在我们新安装的数据库系统中,只有系统库,需要新建数据库才能进行后续操作,所以先学习数据库 的CRUD操作。

    数据库的操作

    • create database db_name;
    • drop database db_name;
    • RENAME DATABASE db_name TO new_db_name
    • show databases;
      以上是数据库所有的命令,很简单吧,需要注意的是 SQL 命令是不区分大小写的,一般习惯 sql支持的命令名称 用大写,其他自定义名称用小写,; 表示 一条命令的结束,命令行时要查询哪个数据库下的表有两种方式,一是用 use db_name; 切到对应数据库下,以后的操作就是针对这个数据库下的操作,二是可以使用db_name.table_name 的全限定的方式查询对应表。

    表的操作

    表的操作也有CRUD,不过稍微复杂一点。

    • show tables;
    • drop table table_name;
    • alter table old_table_name rename to new_table_name
    CREATE TABLE tablename
    (
    column1 datatype [NULL|NOT NULL] [CONSTRAINTS],
    column2 datatype [NULL|NOT NULL] [CONSTRAINTS],
    ...,
    primary key(column1 )
    );
    

    注, [ ] 表示这一项可写可不写。

    举个例子,建一个名称为 student 的表,有姓名 name,年龄 age,性别sex三列,建表语句如下:

    CREATE TABLE `student` (
      `name` varchar(30) CHARACTER SET utf8 NOT NULL,
      `age` int(11) DEFAULT NULL,
      `sex` char(1) CHARACTER SET utf8 NOT NULL,
      PRIMARY KEY (`name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
    

    表中记录的操作

    插入 insert

    为了能进行实操,先学习如何插入记录到表中,上面的例子中已经新建了表student,假设插入如下数据到表中

    姓名 年龄 性别
    张三 20
    李四 18
    王五 16
    韩梅梅 14
    李雷 14

    插入语句为:

    INSERT INTO student(name,age,sex) VALUES('张三',20,'男');
    INSERT INTO student(name,age,sex) VALUES('李四',18,'男');
    INSERT INTO student(name,age,sex) VALUES('王五',16,'男');
    INSERT INTO student(name,age,sex) VALUES('韩梅梅',14,'女');
    INSERT INTO student(name,age,sex) VALUES('李雷',14,'男');
    

    这样我们就得到了5条数据,也可以指定部分列进行插入,后面的值要和列对应。可以看出向表中插入数据的基本格式为:

    INSERT INTO table_name (column1,column2,column3,...)
    VALUES (value1,value2,value3,...);
    // 如果插入所有字段,table_name 后面的列可以省略。
    

    特别的,可以从别的表中查询插入,如向student2(和student表结构一致) 表插入数据年龄大于15的学生(关于如何查询下章介绍),SQL如下:

    INSERT INTO student2 
    SELECT name,age,sex 
    FROM student
    WHERE age > 15;
    // 语句形式为:Insert into Table2(字段1,字段2
    ,...) select 字段1,字段2,... from Table1;
    

    检索

    从表中查询需要的数据又称为检索,支持查询,去重,排序,分组,统计等操作。

    单列,多列,所有列的检索

    语法格式:

    SELECT col1[,col2,col3...] FROM table_name;
    或:
    SELECT *  FROM table_name;
    

    上面一条语句可以选择表中的一列或者多列进行展示,而第二条语句则进行所有列展示,可用于不知道表中字段情况查询。

    去重 distinct

    • distinct 作用于所有的列
    SELECT DISTINCT col1[,col2,col3...] FROM table_name;
    

    限制结果 limit

    有时不需要展示太多条数据,可以使用limit进行限制,语法如下:

    SELECT  col1[,col2,col3...] 
    FROM table_name
    LIMIT n[,m];
    

    limit 后面可带一个数字,表示取几条数据,也可以用逗号隔开的两条数据,表示从第n条开始取,取m条数据。

    注释

    注释主要用来备注说明,或者有时候忽略掉不需要的语句,主要有两种方式:

    • 行内注释 -- 或#
    • 多行注释 /* */
      如:
    -- 这是行注释, 注意-- 后面是要有一个空格的
    # 这也是行注释
    SELECT * FROM table_name ...;
    ...
    /*
    这是多行注释,可以换行
    */
    SQL语句...
    

    排序 order by

    如果需要对查询结果进行排序(升序或者降序),可以使用order by 子句,order by子句一定是select的最后一条子句,其还有如下特点:

    • 后可加 多列
    • 可按照列位置排序 即order by 1,2(1,2 表示select 后字段位置序号)
    • 可按非选择列排序,即不在select 后展示的列
    • 默认升序asc, 倒序用desc

    条件过滤 where

    当需要按照条件进行筛选数据时,可用where 子句,where子句一般跟在表名之后,

    • 支持的操作符有: + ,<> ,!= ,<, <=, >, >= ,BETWEEN ... AND ...,IS NULL,IS NOT NULL, 注意,IS NULL 不能用 = NULL 去判断
    • 逻辑操作符 AND OR
    • 逻辑操作符优先级
    • 通配符过滤 like
      • % 表示 任何字符出现任何次数,但不会匹配NULL
      • _ 只匹配单个字符
      • [] 指定一个字符集,匹配指定位置的一个字符,可使用[^ ] 来否定

    字段的计算

    有时需要对多列字段进行组合或者一些计算以达到目的,主要支持的计算有:

    • 字段拼接 concate函数
    • 去前后空格 trim
    • 字段别名(或叫导出列) As
    • 算术运算 +-*/

    函数

    函数是辅助字段计算的方式,一般给定一定个数输入,函数会输出一个值,主要可以分为以下几类,

    • 文本处理函数
    
    CONCAT(str1, str2, ...):拼接字符串
    CONCAT_WS(separator, str1, str2, ...):使用指定分隔符连接字符串
    LEFT(str, length):从左截取指定长度的子字符串
    RIGHT(str, length):从右截取指定长度的子字符串
    SUBSTRING(str, index, length):从指定位置处开始截取指定长度的子字符串
    LENGTH(str):返回字符串的长度
    LOWER(str):将字符串转换为小写格式
    UPPER(str):将字符串转换为大写格式
    LTRIM(str):去除字符串左侧的空格
    RTRIM(str):去除字符串右侧的空格
    TRIM(str):去除字符串两侧的空格
    FORMAT(X, D):按照指定的小数位数D将数值X转化为字符串
    LPAD(str, length, padStr):在字符串左侧用padStr将原字符串填充至指定长度,当指定长度小于原字符串长度时,截断原字符串
    RPAD(str, length, padStr):在字符串右侧用padStr将原字符串填充至指定长度,当指定长度小于原字符串长度时,截断原字符串
    REPLACE(str, from_str, to_str):将字符串中的所有匹配的字符串替换为新字符串
    REVERSE(str):将字符串逆序输出
    
    
    
    • 日期和时间处理函数
    NOW():返回当前的时间和日期
    CURDATE():返回当前的日期
    CURTIME():返回当前时间
    DATE(dateAndTime):提取日期时间表达式中的日期部分
    DAY():返回日期时间表达式中的天数部分
    YEAR():返回日期时间表达式中的年部分
    EXTRACT(unit FROM date):按照指定的时间单位从日期时间表达式中提取年、月、日、时间等部分
    DATE_FORMAT(date, format):按照指定格式显示时间日期
    DATE_ADD(date, INTERVAL exp unit)、DATE_SUB(date, INTERVAL exp unit):日期和时间的加减操作。返回值是否包含时间取决于给定的时间日期的表达式和时间单位。
    DATEDIFF(date1, date2):返回两个日期的差值,会忽略表达式中的时间,仅对日期进行运算
    ADDDATE(date, INTERVAL exp unit):等同于DATE_ADD()
    ADDDATE(date, days):在给定的日期上加上给定的天数
    ADDTIME(time1, time2):将两个时间表达式相加
    
    
    • 数值处理函数
    ABS() 返回一个数的绝对值
    COS() 返回一个角度的余弦
    EXP() 返回一个数的指数值
    PI() 返回圆周率
    SIN() 返回一个角度的正弦
    SQRT() 返回一个数的平方根
    TAN() 返回一个角度的正切
    

    数据汇总

    • 聚集函数:对某些行运行的函数,计算并返回一个值
    AVG() 返回某列的平均值
    COUNT() 返回某列的行数,使用COUNT(*)对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值。
    使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值
    MAX() 返回某列的最大值
    MIN() 返回某列的最小值
    SUM() 返回某列值之和
    

    数据分组

    分组即根据一列或者几列,将一个数据集划分成若干个“子集”,然后针对若干个“子集”进行数据处理

    • 分组是使用SELECT语句的GROUP BY子句建立的
    • 在非分组的列(即非group by 后面的列)上可以使用 COUNT, SUM, AVG,等函数
    • 过滤分组 having,支持所有WHERE操作符
      语法:
    SELECT column_name, function1(col1[,col2...])[, function2(col3,col4...)]
    FROM table_name
    WHERE condition
    GROUP BY column_name
    

    SELECT子句顺序

    子  句 说  明 是否必须使用
    SELECT 要返回的列或表达式
    FROM 从中检索数据的表 仅在从表选择数据时使用
    WHERE 行级过滤
    GROUP BY 分组说明 仅在按组计算聚集时使用
    HAVING 组级过滤
    ORDER BY 输出排序顺序

    修改 update

    • UPDATE table_name SET field = new_val[, field = new_val] [ WHERE condition1 [and condition2]]

    删除 delete

    • DELETE FROM table_name WHERE condition1 [and condition2]
    • 全表内容删除 DELETE FROM table_name or TRUNCATE TABLE table_name

    组合与连接 union / join

    组合 UNION /UNION ALL

    UNION/UNION ALL 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。UNION多个 SELECT 语句会删除重复的数据,而UNION ALL多个 SELECT 语句不会删除重复的数据。
    语法:

    SELECT expression1, expression2, ... expression_n
    FROM tables
    [WHERE conditions]
    UNION [ALL | DISTINCT]
    SELECT expression1, expression2, ... expression_n
    FROM tables
    [WHERE conditions];
    

    连接JOIN

    前面主要是在一张表中读取数据,但是在真正的应用中经常需要从多个数据表中读取数据。本节介绍多表关联连接操作JOIN。在 SELECT, UPDATE 和 DELETE 语句中都可使用 JOIN 来联合多表查询。
    JOIN 按照功能大致分为如下三类:

    • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
    • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
    • RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
      语法:
    SELECT col1,col2 ... 
    FROM table1 
    INNER|LEFT|RIGHT JOIN table2 
    ON condition1[,condition2,...]
    

    INNER JOIN

    img_innerjoin.gif

    INNER JOIN,内连接,或等值连接,主要产生同时符合table1和table2的一组数据

    LEFT JOIN

    img_leftjoin.gif

    LEFT JOIN左连接以左表table1为主表,即以主表产生一套完整的记录,去右表中匹配的记录 .如果没有匹配到,则置为null

    RIGTH JOIN

    img_rightjoin.gif

    RIGTH JOIN右连接和 LEFT JOIN 正好相反,以右表table2为主表,即以右表产生一套完整的记录,去左表中匹配的记录 .如果没有匹配到,则置为null。如果把 LEFT JOIN 中table1和table2互换位置,则结果等价于 RIGTH JOIN。

    4 MySQL索引操作

    索引的知识可以写成一本书,这里只简单介绍一部分。索引是一种特殊的文件,它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书的目录,能加快数据库的查询速度。

    直接创建索引

    CREATE [UNIQUE] INDEX index_name ON table_name(column1(length)[,column2(length),...]) ;
    

    修改表结构的方式添加索引

    ALTER TABLE table_name ADD [UNIQUE] INDEX index_name ON (column1(length)[,column2(length),...]);
    

    创建表的时候同时创建索引

    CREATE TABLE `table_name` (
    
    `id` int(11) NOT NULL AUTO_INCREMENT ,
    
    `name` varchar(50)  NOT NULL ,
    
    `sex` char(3) NULL ,
    
    `age` int(11) NULL DEFAULT NULL ,
    
    PRIMARY KEY (`id`),
    
    [UNIQUE] INDEX index_name (name(length))
    
    );
    

    删除索引

    DROP INDEX index_name ON table_name;
    

    帮助文档使用

    在 MySQL 使用过程中,可能经常会遇到以下问题:

    • 某个操作语法突然忘记了
    • 当前版本上,都支持哪些函数?
    • 当前版本上,是否支持某个功能?

    当然我们可能想到查找 MySQL 的文档。但是却要耗费大量的时间和精力。 所以对于以上问题,最好的解决办法是使用 MySQL 安装后自带的帮助文档,在遇到问题时可以方便快捷地进行查询

    按照层次看帮助

    如果不知道帮助能够提供些什么,可以用?contents 或者 help contents命令来显示所有可供查询的的分类,然后对于列出的分类,可以使用help 类别名称的方式针对用户感兴趣的内容做进一步的查看。

    快速查阅帮助

    在实际应用当中,如果需要快速查阅某项语法时,可以使用关键字进行快速查询。例如,想知道 show 命令都能看些什么东西,可以用如下命令:? showhelp show

    又如,想查看 CREATE TABLE 的语法,可以使用以下命令:
    ? CREATE TABLEhelp CREATE TABLE

    常用的网络资源

    https://www.mysql.com/ 是 MySQL 的官方网站,可以下载到各个版本的 MySQL 以及相关客户端开发工具等,提供了目前最权威的 MySQL 数据库及工具的在线手册。


    至此已经把MySQL 中基础部分总结完成,后续文章将总结MYSQL一些其他特性,如视图,存储过程,触发器,事务,游标,索引原理,性能优化等


    <END>

    相关文章

      网友评论

          本文标题:MySQL基础入门

          本文链接:https://www.haomeiwen.com/subject/ryfzuhtx.html