数据库入门知识点总结

个人总结不足的请多多指教!!! 
一、基本查询结构
  • 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模型

    • 实体: 用矩形表示,并标注实体名称
    • 属性: 用椭圆表示,并标注属性名称,
    • 关系: 用菱形表示,并标注关系名称 
posted @ 2019-08-20 15:31  Lei、Sunny  阅读(1622)  评论(0编辑  收藏  举报