Mysql知识点
访问远程服务器上的数据库
- mysql -u用户名 -p密码[-h数据库服务器IP地址 -P端口号]
SQL:一门操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准。
通用语法
-
SQL语句可以单行或多行书写,以分号结尾。
1
show databases;
-
SOL语句可以使用空格/缩进来增强语句的可读性。
1
show databases;
-
MySQL数据库的SQL语句不区分大小写。
1
SHOW DATABASES;
-
注释
-
单行注释:–注释内容 或#注释内容(MySQL特有)
1
-- show databases;
-
多行注释: /* 注释内容 */
1
/* show databases; */
-
DDL
数据定义语言,用来定义数据库对象(数据库,表,字段)
1 | //创建数据库 |
-
查询
- 查询当前数据库所有表: show tables;
- 查询表结构: desc 表名;
- 查询建表语句: show create table 表名
-
修改
- 添加字段: alter table 表名 add 字段名 类型(长度)[comment 注释] [约束];
- 修改字段类型: alter table 表名 modify 字段名 新数据类型(长度);
- 修改字段名和字段类型: alter table 表名 change 旧字段名 新字段名 类型(长度)[comment 注释][约束
- 删除字段: alter table 表名 drop column 字段名;
- 修改表名: rename table 表名 to 新表名
-
删除
- 删除表: drop table [if exists]表名
DML
数据操作语言,用来对数据库表中的数据进行增删改
-
插入数据
- 指定字段添加数据: insert into 表名(字段名1,字段名2) values (值1,值2);
- 全部字段添加数据: insert into 表名 values (值1,值2,…);
- 批量添加数据(指定字段): insert into 表名(字段名1,字段名2) values (值1,值2),(值1,值2);
- 批量添加数据(全部字段) : insert into 表名 values (值1,值2,…),(值1, 值2,…);
-
更新数据
- 修改数据: update 表名 set 字段名1= 值1,字段名2 = 值2,…[ where 条件];
-
删除数据
- 删除数据: delete from 表名 [where 条件];
DQL
数据查询语言,用来查询数据库中表的记录
-
基本查询:
- 查询多个字段: select 字段1,字段2, 字段3 from 表名
- 查询所有字段(通配符): select * from 表名;
- 设置别名: select 字段1[as 别名1],字段2[as 别名2] from 表名 as关键词可省略
- 去除重复记录: select distinct 字段列表 from 表名;
-
条件查询:
- select 字段列表 from 表名 where 条件列表;
- Where条件运算符
-
聚合函数:
- null值不参与所有聚合函数运算。
- 统计数量可以使用:count( *) count(字段) count(常量),推荐使用count( * )。
- //流程控制函数:if(条件表达式,true取值,false取值),
- //case 表达式 when 值1 then 结果1 when 值2 then 结果2 …else …end
-
分组查询:
- (where之后不能使用聚合函数)
- select 字段列表 from 表名[where 条件] group by 分组字段名 [having 分组后过滤条件];
- 执行顺序:where>聚合函数>having,where不能对聚合函数进行判断,having可以
-
排序查询:
- select 字段列表 from 表名 [where 条件列表] [group by 分组字段]order by 字段1 排序方式1,字段2 排序方式2…
- ASC: 升序(默认值) DESC:降序
- 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序
-
分页查询
- select 字段列表 from 表名 limit 起始索引,查询记录数
- 起始索引 = (页码 - 1) * 每页展示记录数
-
注意:
- 起始索引从0开始,起始索引= (查询页码-)*每页显示记录数
- 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10.
多表设计
对表进行外键约束,保证数据的完整性,一致性,有效性。
实体之间的关系:
- 一对一:人和身份证
- 一对多:部门和员工
- 多对多:学生选课,一个学生可以选多门课程,一门课程也可以被多个学生选择
多表查询
多表查询:指从多张表中查询数据
笛卡尔积:笛卡尔乘积是指在数学中,两个集合(A集合 和 B集合)的所有组合情况。(在多表查询时,需要消除无效的笛卡尔积)
-
连接查询
- 内连接查询:查询A和B交集部分数据
- 隐式内连接:使用where条件消除无用数据
- 显示内连接:使用inner join …on 消除无用数据
- 外连接查询:查询A和B所有数据,如果数据不存在,则为null
- 左外连接:查询A表所有数据,以及A和B交集部分数据
- 右外连接:查询B表所有数据,以及A和B交集部分数据
- 自连接查询:当前表与自身连接查询,自连接必须使用表别名
- 内连接查询:查询A和B交集部分数据
-
子查询
- 子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询。
- 子查询一般作为其他语句的条件使用,子查询可以放在where后面,也可以放在having后面,还可以放在select后面。子查询语句可以放在小括号中。
- 根据子查询出现的位置分类
- select后面:标量子查询
- from后面:表子查询
- where后面:标量子查询、列子查询、行子查询
- having后面:标量子查询、列子查询、行子查询
- 根据子查询的结果分类
- 标量子查询(结果集只有一行一列,操作符: > < >= <= = <>)
- 列子查询(结果集只有一列多行,操作符: in、not in、any/some、all)
- 行子查询(结果集有一行多列,操作符: =、<>)
- 表子查询(结果集一般为多行多列,操作符: in)
事务
概念:一组操作的集合,这组操作要么全部成功,要么全部失败
开启事务: start transaction; / begin ;
提交事务: commit;
回滚事务: rollback;
四大特性:
- 原子性:事务是一个不可分割的工作单位,事务中的操作要么全部完成,要么全部不完成。
- 一致性:事务开始和完成时,数据必须保持一致状态。
- 隔离性:多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
- 持久性:一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
索引
索引 (index)是帮助数据 高效获取数据的 数据结构(二叉树)
优点:
- 提高数据查询的效率,降低数据库的IO成本。
- 通过索引列对数据进行排序,降低数据排序的成本,降低CPU消耗
缺点:
- 索引会占用存储空间。
- 索引大大提高了查询效率,同时却也降低了insert、update、delete的效率
结构:B+Tree
特点:
- 每一个节点,可以存储多个key (有n个key,就有n个指针)。
- 所有的数据都存储在叶子节点,非叶子节点仅用于索引数据。
- 叶子节点形成了一颗双向链表,便于数据的排序及区间范围查询。
语法:
创建索引:create [unique] index 索引名 on 表名(字段名,…);
查看索引:show index from 表名;
删除索引:drop index 索引名 on 表名;注意:
主键字段,在建表时,会自动创建主键索引。(性能最高)
添加唯一约束时,数据库实际上会添加唯一索引。
评论