zoukankan      html  css  js  c++  java
  • MySQL基础语法

    数据库第二步:学习MySQL的语法

    参考以下内容:

    《MySQL必知必会》

    CyC2018/CS-Notes/blob/master/notes/SQL   (基础总结)

    CyC2018/CS-Notes/blob/master/notes/MySQL   (进阶、优化)

    牛客MySQL入门教程  (主要跟着这个来)


    MySQL简介

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle甲骨文公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性

    • MySQL 是开源的,所以你不需要支付额外的费用。
    • MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
    • MySQL 使用标准的 SQL 数据语言形式。
    • MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。
    • MySQL 对PHP有很好的支持,PHP 是目前最流行的 Web 开发语言。
    • MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为8TB。
    • MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。

    WEB 应用方面 MySQL 是最好的 RDBMS

    RDBMS 术语

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

    • 表头(header): 每一列的名称;
    • (col): 具有相同数据类型的数据的集合;
    • (row): 每一行用来描述某条记录的具体信息;
    • (value): 行的具体信息, 每个值必须与该列的数据类型相同;
    • (key): 键的值在当前列中具有唯一性

    MySQL安装(Linux系统)

    Windows自带的Access是文件形式的数据库,仅适合小型数据;

    MySQL适合在Linux上安装使用,适合大型数据库的运行。

    我踩坑安装写了一篇博客Ubuntu20.04安装MySQL8.0 

    https://www.cnblogs.com/qyf2199/p/12929601.html

    MySQL的PHP语法

    PERL, C, C++, JAVA 和 PHP。 在这些语言中,Mysql在PHP的web开发中是应用最广泛。

    MySQL 连接

    以下是从命令行中连接mysql服务器的简单实例:

    在以上实例中,我们使用了root用户(-u)登录到mysql服务器,当然你也可以使用其他mysql用户登录。

    退出 mysql> 命令提示窗口可以使用 exit 命令,如下所示:

    数据库DB:

    选择

     

    数据类型

    • 数值
    • 字符串
    • 日期时间

     

     

     

    Table:

    Ubuntu20.04+MySQL8.0  可以把汉语带入编程环境,不用额外加引号(对比上图):

    ->  作用是:换行、形式好看。没有实际意义,也可以去掉(对比上图):

    展示 所有 表TABLES:

    Describe描述:

    各个属性的基本约束:TYPE/ NULL / Key /Default

    DATA:

    例子:

    看下效果:

    查询数据:

     例子:

    含WHERE的复杂SELECT语句:

     

    UPDATE 改

    DELETE


    LIKE:在WHERE语句中使用,相当于=   

    例子:mysql> select * from nowcoder_tbl where nowcoder_author like '%COM';

    UNION:取并集(去重复

    UNION ALL:取并集(有重复

     

    排序 ORDER BY : 可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 SELECT默认升序。

     

    GROUP BY分组:我们可以使用 COUNT, SUM, AVG按列分组

     

    连接JOIN:

    • 内连接 INNER JOIN
    • 左连接 LEFT JOIN
    • 右连接 RIGHT JOIN

    INNER JOIN内连接是最精简的,左中右连接都有的部分,如上图。

    左连接有左表全部行,多出来右表null的行;

    详细例子参考:https://www.nowcoder.com/tutorial/10006/144ef491d592407a8597ae87c6a09e31

     


    JOIN 和 UNION 的理解:

    • 表的加法 (UNION)  //行数变多
    • 以列为单位对表进行联结 (JOIN)     //属性变多(横向扩展)//如果没有where进行筛选,就是笛卡尔积

    //内连接:两张表的连接id都有的记录(行)才可以

    //左连接:左表的每行只多不少,不匹配的就使右表相应字段为空

    https://blog.csdn.net/ljxfblog/article/details/52066006


    NULL值处理

     

    正则表达式

    例子:

     

     

    事务:ACID

    参照例子: https://www.nowcoder.com/tutorial/10006/19b107c5f4e84544b448af6c52002087  自己试试

    ALTER 修改表名、表的属性字段

    如果需要修改字段类型及名称, 你可以在ALTER命令中使用 MODIFYCHANGE 子句 。

    参照例子: https://www.nowcoder.com/tutorial/10006/31ed1b8338cf4cc8b4b96aa196b45781  自己试试

    索引:  INDEX

    虽然索引大大提高了查询速度,同时却会降低更新表的速度。

    如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。

    单列索引:一个索引一个列

    组合索引:一个索引多个列

     ALTER TABLE tbl_name ADD UNIQUE index_name (column_list)

    https://www.nowcoder.com/tutorial/10006/3aab8cb0cbb94e608de595c9084b71fb

    临时表  TEMPORARY TABLE

    当你使用 SHOW TABLES命令显示数据表列表时,你将无法看到 SalesSummary表。

    如果你退出当前MySQL会话,再使用 SELECT命令来读取原先创建的临时表数据,那你会发现数据库中没有该表的存在,因为在你退出时该临时表已经被销毁了。

    复制表   INSERT INTO... SELECT

    元数据

     

    序列使用   

    AUTO_INCREMENT  序列自增 :一组整数:1, 2, 3, ...,由于一张数据表只能有一个字段自增主键

    处理重复数据

    防止重复data:设置指定的字段为 PRIMARY KEY(主键)或者 UNIQUE(唯一)索引来保证数据的唯一性。

    统计重复data:

     

    过滤重复data(显示出的内容不重复):    DISTINCT 关键字;或者用GROUP BY 

    删除重复data: 

    SQL注入:  通过脚本过滤恶意的SQL字符串注入 ==》解决办法:1.输入正则化限制  2.字符串转义无害化

     

    导出data:SELECT ... INTO OUTFILE     https://www.nowcoder.com/tutorial/10006/f97e869b91634940a0edc81d00fe0e6d

    导入data(3种):SOURCE   LOAD DATA    mysqlimport

    函数:MySQL 有很多内置的函数

    • 字符串函数
    • 数字函数
    • 日期函数
    • 高级函数

    运算符:运算符的优先级     https://www.nowcoder.com/tutorial/10006/1d2a65add8b94a9cb9015cfe4678cf5e

    • 算术运算符
    • 比较运算符
    • 逻辑运算符
    • 位运算符

    MySQL常用汇总

    语法里面,专用词大小写通用。所以我对于专用词都用大写,以示区分。

    • 连接:mysql -u root -p  然后输入密码12345678
    • 离开:exit

    一些规则:

    ; MySQL命令终止符

    ->   作用是:换行、形式好看。没有实际意义,也可以去掉

    DB相关:

    • 创建:CREATE DATABASE ***;
    • 删除:DROP DATABASE ***;
    • 进入:USE ***;
    • 显示所有DB名称:SHOW DATABASES;

    Table相关:

    • 创建:CREATE TABLE 表名(*** DESC 描述约束 ***)ENGINE=InnoDB DEFAULT CHARSET=utf8
    • 删除:DROP TABLE ***;
    • 描述约束条件:DESC ***;
    • 显示所有表:SHOW TABLES;

    Data相关:

    • 增:INSERT INTO 表名 (属性1, 属性3, 属性3) VALUE ("内容1",内容2,内容3) // 别忘了括号、逗号、CHAR双引号
    • 删:DELETE FROM 表名 WHERE 条件语句
    • 改:UPDATE 表名 SET 修改语句 WHERE 条件语句;
    • 查:SELECT 属性1属性2 FROM 表名
      •  WHERE: SELECT * FROM 表名 WHERE 条件语句不等式/等式

     


    LIKE:在WHERE语句中使用,相当于=   

    例子:mysql> select * from nowcoder_tbl where nowcoder_author like '%COM';

    UNION:取并集(去重复

    UNION ALL:取并集(有重复

    排序 ORDER BY : 可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 SELECT默认升序。

    GROUP BY分组:我们可以使用 COUNT, SUM, AVG按列分组

    连接JOIN:

    • 内连接 INNER JOIN
    • 左连接 LEFT JOIN
    • 右连接 RIGHT JOIN

    INNER JOIN内连接是最精简的,左中右连接都有的部分,如上图。

    左连接有左表全部行,多出来右表null的行;

    详细例子参考:https://www.nowcoder.com/tutorial/10006/144ef491d592407a8597ae87c6a09e31

    NULL值处理

    正则表达式

    事务:ACID 

    • BEGIN 
    • ROLLBACK 
    • COMMIT

    ALTER:修改表名、表的属性字段:MODIFY、CHANGE

    索引:  INDEX ==》空间换时间

    临时表  TEMPORARY TABLE

    复制表   INSERT INTO... SELECT

    元数据   服务器信息

    序列使用   AUTO_INCREMENT  序列自增 

    处理重复数据

    预防:PRIMARY KEY    /UNIQUE关键字

    统计:GROUP BY  /COUNT

    过滤:SELECT+DISTINCT

    过滤:PRIMARY KEY   /GROUP BY

    SQL注入:  通过脚本过滤恶意的SQL字符串注入 ==》解决办法:1.输入正则化限制  2.字符串转义无害化

    导出data:  SELECT ... INTO OUTFILE ...

    导入data(3种):SOURCE      LOAD DATA      mysqlimport

    函数:MySQL 有很多内置的函数:

    • 字符串函数
    • 数字函数
    • 日期函数
    • 高级函数

    运算符:运算符的优先级 

    • 算术运算符
    • 比较运算符
    • 逻辑运算符
    • 位运算符

    细节未完待续Loading...

  • 相关阅读:
    Multi ingress controller
    Obtain file system information
    What is the difference between “inode size” and “Bytes per inode”
    Build and install fluent-bit on CentOS7
    Failed to initialize NVML: Driver/library version mismatch.
    利用multiprocessing.managers开发跨进程生产者消费者模型
    [算法] 举一反三之n重复数组中找唯一m重复异类数
    HBase Thrift过滤语法
    kubernetes pod infra container网络原理
    CentOS7上手动部署入门级kubernetes
  • 原文地址:https://www.cnblogs.com/qyf2199/p/12913818.html
Copyright © 2011-2022 走看看