数据库第二步:学习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
NULL值处理
正则表达式
例子:
事务:ACID
参照例子: https://www.nowcoder.com/tutorial/10006/19b107c5f4e84544b448af6c52002087 自己试试
ALTER 修改表名、表的属性字段
如果需要修改字段类型及名称, 你可以在ALTER命令中使用 MODIFY 或 CHANGE 子句 。
参照例子: 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...