个人总结不足的请多多指教!!!
一、基本查询结构
- select * from 表名
二、判断和逻辑查询
- >, <, >=, <= , =, !=/<>
- and , or , not
- 结合where使用
- 判断为空使用: is null
- 判断非空使用: is not null
三、模糊查询
- like是模糊查询关键字
- %表示任意多个任意字符
- _表示一个任意字符
四、范围查询
- between .. and .. 表示在一个连续的范围内查询
- in 表示在一个非连续的范围内查询
五、排序
- 排序使用 order by 关键字
- asc 表示升序
- desc 表示降序
六、聚合函数
- count(col): 表示求指定列的总行数
- max(col): 表示求指定列的最大值
- min(col): 表示求指定列的最小值
- sum(col): 表示求指定列的和
- avg(col): 表示求指定列的平均值
- round():表示四舍五入
- 注意:聚合函数默认忽略字段为null的记录 要想列值为null的记录也参与计算,必须使用ifnull函数对null值做替换。
七、分组
- select 分组字段 from 表名 group by 分组字段 having分组条件;
- group_concat(字段名): 统计每个分组指定字段的信息集合,每个信息之间使用逗号进行分割
- distinct 字段 可用来消重
- with rollup在最后记录后面新增一行,显示select查询时聚合函数的统计和计算结果
八、分页
- limit 起始的位置,个数 start = (页数-1)*每页的个数
- 作用:大数据量特别多的时候,提升用户的体验
九、两表查询
- 容易产生笛卡尔积问题
- 解决:select * from 表1 inner join 表2 on 条件;
十、条件
- 过滤使用where
- 分组使用having
- 两表使用on生成虚拟表
十一、子查询,左连接
- 子查询
-
- 子查询是嵌入到主查询中
- 子查询是辅助主查询的,要么充当条件,要么充当数据源
- 子查询是可以独立存在的语句,是一条完整的 select 语句
例:查询大于平均年龄的学生:
select * from students where age > (select avg(age) from students);
- 左连接
-
- 左连接使用left join .. on .. , on 表示两个表的连接查询条件
- 左连接以左表为主根据条件查询右表数据,右表数据不存在使用null值填充。
select 字段 from 表1 left join 表2 on 表1.字段1 = 表2.字段2
- 右连接则是right join.. on..
十二、事务
- 事务的特性:
-
- 原子性: 强调事务中的多个操作时一个整体
- 一致性: 强调数据库中不会保存不一致状态
- 隔离性: 强调数据库中事务之间相互不可见
- 持久性: 强调数据库能永久保存数据,一旦提交就不可撤销
- MySQL数据库默认采用自动提交(autocommit)模式, 也就是说修改数据(insert、update、delete)的操作会自动的触发事务,完成事务的提交或者回滚
- 开启事务使用 begin 或者 start transaction;
- 回滚事务使用 rollback;
- pymysql 里面的 conn.commit() 操作就是提交事务
- pymysql 里面的 conn.rollback() 操作就是回滚事务
十三、批量插入、批量更新
批量插入数据
--insert into goods (name) values('123');
insert into goods_cates(name) (select cate_name from goods group by cate_name);
通过特殊的update 进行更新
这个有一个注意点select * from 这个去掉
update (goods inner join goods_cates on goods.cate_name = goods_cates.name) set goods.cate_name = goods_cates.id;
十四、python程序操作mysql
-
导包import pymysql
-
创建连接对象
conn=connect(参数列表)
* 参数host:连接的mysql主机,如果本机是'localhost'
* 参数port:连接的mysql主机的端口,默认是3306
* 参数user:连接的用户名
* 参数password:连接的密码
* 参数database:数据库的名称
* 参数charset:通信采用的编码方式,推荐使用utf8
-
获取游标对象cursor =conn.cursor()
-
执行SQL语句row_count = cursor.execute(sql)
-
获取查询结果集result = cursor.fetchall() fetchall()获取全部 fetchone()获取一个
-
将修改操作提交到数据库
-
回滚数据conn.rollback()
-
关闭游标cursor.close()
-
关闭连接conn.close()
小结部分
一、数据类型和约束
- 常用的数据类型:
-
- 整数:int,bit
- 小数:decimal
- 字符串:varchar,char
- 日期时间: date, time, datetime
- 枚举类型(enum)
- 常见的约束:
-
- 主键约束 primary key
- 非空约束 not null
- 惟一约束 unique
- 默认约束 default 配合枚举类型使用时,需要在枚举内加上默认值
- 外键约束 foreign key
- 数据类型和约束保证了表中数据的准确性和完整性
二、命令行
- 登录数据库: mysql -uroot -pmysql / mysql -uroot -p
- 退出数据库: quit 或者 exit 或者 ctr + d
- 创建数据库: create database 数据库名 charset=utf8;
- 使用数据库: use 数据库名;
- 删除数据库: drop database 数据库名;
- 创建表: create table 表名(字段名 字段类型 约束, ...);
- 修改表-添加字段: alter table 表名 add 字段名 字段类型 约束
- 修改表-修改字段类型: alter table 表名 modify 字段名 字段类型 约束
- 修改表-修改字段名和字段类型: alter table 表名 change 原字段名 新字段名 字段类型 约束
- 修改表-删除字段: alter table 表名 drop 字段名;
- 删除表: drop table 表名;
- 查询数据: select * from 表名; 或者 select 列1,列2,... from 表名;
- 插入数据: insert into 表名 values (...) 或者 insert into 表名 (列1,...) values(值1,...)
- 修改数据: update 表名 set 列1=值1,列2=值2... where 条件
- 删除数据: delete from 表名 where 条件
- distinct 关键字可以去除重复数据行。
- 导入数据:source 文件路径
三、扩展部分
- SQL语言主要分为:
-
- DQL:数据查询语言,用于对数据进行查询,如select
- DML:数据操作语言,对数据进行增加、修改、删除,如insert、update、delete
- TPL:事务处理语言,对事务进行处理,包括begin transaction、commit、rollback
- DCL:数据控制语言,进行授权与权限回收,如grant、revoke
- DDL:数据定义语言,进行数据库、表的管理等,如create、drop
-
E-R模型
-
- 实体: 用矩形表示,并标注实体名称
- 属性: 用椭圆表示,并标注属性名称,
- 关系: 用菱形表示,并标注关系名称