MySql基础
一、数据库基本知识
1、数据库基本介绍
1 | # 本地进入可不输入-h命令,-u和-p后面没有空格! |
2、结构化查询语句分类
名称 | 解释 | 命令 |
---|---|---|
DDL(数据定义语言) | 定义和管理数据对象,如数据库,数据表等 | CREATE、DROP、ALTER |
DML(数据操作语言) | 用于操作数据库对象中所包含的数据 | INSERT、UPDATE、DELETE |
DQL(数据查询语言) | 用于查询数据库数据 | SELECT |
DCL(数据控制语言) | 用于管理数据库的语言,包括管理权限及数据更改 | GRANT、commit、rollback |
3、数据类型和范围大小
类型 | 说明 | 长度(取值范围) |
---|---|---|
tinyint | 十分小的数据 | 1字节 |
smallint | 较小的数据 | 2字节 |
mediumint | 中等大小的数据 | 3字节 |
==int== | 标准整数(常用) | 4字节 |
bigint | 较大的的整数 | 8字节 |
float | 单精度浮点数 | 4字节 |
double | 双精度浮点数 | 8字节 |
==decimal(m,d)== | 字符串形式的浮点数,涉及钱时使用 | m字节 |
char(m) | 固定长度字符串,检索快但浪费空间,0<=m<=255 | m字符 |
==varchar(m)== | 可变字符串,0<=m<=65535(常用) | 变长数 |
tinytext | 微型文本串 | 2^8-1 |
==text== | 文本串 | 2^16-1 |
==DATETIME== | 时间格式,YYYY-MM-DD HH:mm:ss | 1000-01-01 00:00:00~9999-12-31 23:59:59 |
==TIMESTAMP== | 时间戳,从1970开始的毫秒数 | 197010101000000~2037年 |
4、创建数据表
1 | create table [if not exists] `表名`( |
5、数据表字段属性
UnSigned
-
无符号的
-
声明该数据列不允许负数
ZEROFILL
- 0填充的
- 不足位数的用0来填充 , 如int(3),5则为005
Auto_Increment
- 自动增长的 , 每添加一条数据 , 自动在上一个记录数上加 1(默认)
- 通常用于设置主键 , 且为整数类型
- 可定义起始值和步长
- 当前表设置步长(AUTO_INCREMENT=100) : 只影响当前表
- SET @@auto_increment_increment=5 ; 影响所有使用自增的表(全局)
NULL 和 NOT NULL
- 默认为NULL , 即没有插入该列的数值
- 如果设置为NOT NULL , 则该列必须有值
DEFAULT
- 默认的,用于设置默认值
- 例如,性别字段,默认为"男" , 否则为 “女” ; 若无指定该列的值 , 则默认值为"男"的值
1 | /*用户表*/ |
对于Mysql的引擎,现在一般使用InnoDB,而MySql的一些默认设置都在my.ini
文件中设置
- 适用 MyISAM : 节约空间及相应速度
- 适用 InnoDB : 安全性 , 事务处理及多用户操作数据表
6、修改与删除数据库
1 | # 修改表名 |
==注==:Mysql仅在windows下大小写不敏感!
二、MySql数据管理
1、外键
1 | # 主表已经在第一章写明 |
再删除表时,要先删除有外键的表,再删除主表
1 | -- 删除外键 |
==注意现在都是用逻辑外键了,不使用这种物理外键方式==
2、DML数据操作语言
1 | INSERT INTO 表名[(字段1,字段2,字段3,...)] VALUES('值1','值2','值3') |
TRUNCATE
和DELETE
异同:
相同 : 都能删除数据 , 不删除表结构 , 但TRUNCATE速度更快
不同 :
- 使用TRUNCATE TABLE 重新设置AUTO_INCREMENT计数器
- 使用TRUNCATE TABLE不会对事务有影响
3、DQL数据查询语言
1 | # 注意 : [ ] 括号代表可选的 , { }括号代表必选得,*指查询所有,不推荐 |
As
字句作为别名,查询指定字段,DISTINCT
去掉SELECT查询返回的记录结果中重复的记录 ( 返回所有列的值都相同 ) , 只返回一条
1 | SELECT CONCAT('用户',id) AS 新用户名 FROM user; |
where
条件语句:AND、OR、NOT
- 模糊查询:比较操作符
操作符名称 | 语法 | 描述 |
---|---|---|
IS NULL | a IS NULL | 若操作符为NULL,则结果为真 |
IS NOT NULL | a IS NOT NULL | 若操作符不为NULL,则结果为真 |
BETWEEN | a BETWEEN b AND c | 若 a 范围在 b 与 c 之间,则结果为真 |
LIKE | a LIKE b | SQL 模式匹配,若a匹配b,则结果为真 |
IN | a IN (a1,a2,a3,…) | SQL 模式匹配,若a匹配b,则结果为真 |
1 | -- 举例 |
- 连接查询:
join
对比
- 排序和分页、子查询
1 | -- 举例 |
4、MySql函数
1 | -- ================ 内置函数 ================ |
针对count()
函数来说,更推荐使用count(1)
而不是count(*)
1 | -- 从含义上讲,count(1) 与 count(*) 都表示对全部数据行的查询。 |
MySql快速入门
1、SQL语句的书写语法和规则
2、基础查询
利用最基础和最重要的select语句,对表中数据进行查询
3、聚合与排序
面对大量数据我们时常需要对其做汇总的分析。这部分内容就是说明各类汇总操作的方法
4、数据更新
处理数据库时,我们可能需要的不仅仅是“读”数据,更需要“写”数据,也就是对表进行更新和修改。这一天的内容侧重对表的修改操作,并学习重要的数据库管理方法——事务的创建
5、复杂查询
6、复杂查询,函数、谓词、case表达式
如同所有编程语言一样,SQL也有好用的工具包——函数。利用函数,可以将很多复杂的问题在一行代码内解决完成
7、集合运算
在有多张表的情况下,表和表之间的运算和联系就变得很重要,利用集合运算就可以将不同表中的数据整合起来。
四、事务
事务四大特性:ACID。原子性(Atomic),一致性(Consist),隔离性(Isolated),持久性(Durable)
1 | -- 使用set语句来改变自动提交模式 |
五、索引
1、索引概述
索引的作用
- 提高查询速度
- 确保数据的唯一性
- 可以加速表和表之间的连接 , 实现表与表之间的参照完整性
- 使用分组和排序子句进行数据
索引分类
- 主键索引 (Primary Key)
- 唯一索引 (Unique)
- 常规索引 (Index)
- 全文索引 (FullText)
2、主键索引
主键 : 某一个属性组能唯一标识一条记录
特点 :
- 最常见的索引类型
- 确保数据记录的唯一性
- 确定特定数据记录在数据库中的位置
3、唯一索引
作用 : 避免同一个表中某数据列中的值重复
与主键索引的区别
- 主键索引只能有一个
- 唯一索引可能有多个
1 | -- 举例 |
4、常规索引
作用 : 快速定位特定数据
注意 :
- index 和 key 关键字都可以设置常规索引
- 应加在查询找条件的字段
- 不宜添加太多常规索引,影响数据的插入,删除和修改操作
1 | CREATE TABLE `result`( |
5、全文索引
作用 : 快速定位特定数据
注意 :
- 只能用于MyISAM类型的数据表
- 只能用于CHAR , VARCHAR , TEXT数据列类型
- 适合大型数据集
6、索引测试
1 | -- 新建表 |
1 | -- 插入100w数据 |
索引效率测试
1 | -- CMD命令行内的语句结束符可以为 ";", "\G", "\g",仅影响显示结果。 |
==注==
- 索引不是越多越好
- 不要对经常变动的数据加索引
- 小数据量的表建议不要加索引
- 索引一般应加在查找条件的字段
1 | -- 我们可以在创建上述索引的时候,为其指定索引类型,分两类 |
六、权限管理
1、用户管理
1 | /* 用户和权限管理 */ |
权限解释
1 | -- 权限列表 |
2、MySql备份
1 | -- 导出 |