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) VALUES ("内容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...

posted @ 2020-05-26 16:42  青杨风2199  阅读(340)  评论(0编辑  收藏  举报