简单学习MySQL

MySQL学习笔记

前言

由于笔者不是专业人士,所以对数据库的学习就仅存在与基础使用。本篇学习笔记为梳理这一个星期的学习。

首先让我们了解一下什么是mysql数据库,现在数据库基础学习主要为三种数据库:大型数据库Oracle,中型数据库SQLsever,小型数据库mysql,前两种笔者在几年前也曾学习过,所以拥有一些数据库的基础。
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

RDBMS 术语

数据库: 数据库是一些关联表的集合。
数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
外键:外键用于关联两个表。
复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

安装

现在mysql已经在Windows平台上提供了可视化的安装,非常简单。在这里稍微要注意的是mysql的版本问题,由于mysql的版本号变化很大,我所选用还是老版本5.7 ,不是8.0,虽然只差一代╮(╯▽╰)╭

语法

虽然现在在Windows平台上提供了大量的可视化管理软件,但对于sql语法,作为一个学生,还是要学会基础,不说别的,代码的逼格不是鼠标能比的_

创建数据库

CREATE DATABASE 数据库名;

删除数据库

DROP DATABASE 数据库名;

选择数据库

USE 数据库名;

创建数据表

CREATE TABLE table_name (column_name column_type);

约束
NULL / NOT NULL 空值约束
PRIMARY KEY 主键约束
FOREIGN KEY 外键约束,初学者不推荐使用,在操作数据库时sql语句会变得臃肿复杂,测试数据极为不方便

AUTO_INCREMENT 定义列为自增的属性,一般用于主键,数值会自动加1。
CHARSET 设置编码。

删除数据表

DROP TABLE table_name ;

插入数据

INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( value1, value2,...valueN );

***注意***
插入或修改数据时一定要严格按照数据类型

例如:
UTF-8:一个汉字=3个字节
GBK:一个汉字=2个字节
varchar(n) 表示 n 个字符,无论汉字和英文,Mysql 都能存入 n 个字符,仅是实际字节长度有所区别

MySQL 检查数据长度语句

    select LENGTH(fieldname) from tablename

查询数据

通用语法

    SELECT column_name,column_name
    FROM table_name
    [WHERE Clause]
    [LIMIT N][ OFFSET M]

where子句(条件查询):按照“条件表达式”指定的条件进行查询。
group by子句(分组):按照“属性名”指定的字段进行分组。group by子句通常和count()、sum()等聚合函数一起使用。
having子句(筛选):有group by才能having子句,只有满足“条件表达式”中指定的条件的才能够输出。
order by子句(排序):按照“属性名”指定的字段进行排序。排序方式由“asc”和“desc”两个参数指出,默认是按照“asc”来排序,即升序。
limit(限制结果集): 取出查询结果的条数或位置。

***注意***
where和having的区别:

作用的对象不同。WHERE 子句作用于表和视图,HAVING 子句作用于组。
WHERE 子句不能包含聚集函数
HAVING 子句总是包含聚集函数

进阶查询(关系型数据库核心
  • 多表连接查询
    • 内连接 ( 内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值 )

      select * from book as a,stu as b where a.sutid = b.stuid
      
    • 外连接 ( 以一种表为基表,基表的所有行、列都会显示,外表如果和条件不匹配则所有的外表列值都为NULL )

      • 左连接(以左表为基准)

            select * from book as a left join stu as b on a.sutid = b.stuid
        
      • 右连接(以右表为基准)

            select * from book as a right join stu as b on a.sutid = b.stuid
        
      • 全外连接 ( 完整外部联接返回左表和右表中的所有行 )

            select * from book as a full outer join stu as b on a.sutid = b.stuid
        
    • 交叉连接 ( 交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积 )

          select * from book as a cross join stu as b order by a.id
      
  • 子查询 / 嵌套查询 ( 把内层查询结果当作外层查询的比较条件 )
    • 相关子查询 ( 内部查询的执行依赖于外部查询的数据 )
        select * from score as a where a.score>(select avg(b.score) from score as b where a.cou_id=b.cou_id);
    
    • 非相关子查询 ( 内部查询的执行独立于外部查询 )
        select * from score as a where a.cou_id=1 and a.score>(select avg(b.score)from score as b where b.cou_id=1);
    
模糊查询
    SELECT field1, field2,...fieldN
    FROM table_name
    WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'

通配符

  • _ 匹配一个字符
  • % 匹配多个字符

正则表达式

    SELECT field1, field2,...fieldN
    FROM table_name
    WHERE field1 REGEXP 'somevalue'

^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置。
$ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 ‘\n’ 或 ‘\r’ 之前的位置。
. 匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用象 '[.\n]' 的模式。
[...] 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 “plain” 中的 ‘a’。
[^...] 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 “plain” 中的’p’。
p1|p2|p3 匹配 p1 或 p2 或 p3。例如,'z|food' 能匹配 “z” 或 “food”。'(z|f)ood' 则匹配 “zood” 或 “food”。
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}
{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。

更新数据

    UPDATE table_name SET field1=new-value1, field2=new-value2 
    [WHERE Clause]

注意执行时一定要看清where子句,否则可能会更新整个表

删除数据

    DELETE FROM table_name [WHERE Clause]

注意执行时一定要看清where子句,否则可能会删除整个表

修改

    alter table table_name [ DROP | ADD | MODIFY | CHANGE | DEFAULT] [some]

总结

上述为mysql最为基础增删改查等操作的sql语法,及一些注意事项,对于每一个数据库来说其sql都不尽相同,所以使用时还是要查询操作手册
这周算是把sql语句复习了一遍,顺便了解学习了mysql的操作。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值