连接查询
内连接
- 内连接查询
SELECT 列名 FROM 表1 inner join 表2 on 条件
- inner 可省略
- 表1表2共有的数据
外连接
左外 左的数据可以全部看到 右边要符合规范
SELECT 列名 FROM 表1 left join 表2 on 条件
- left 左表查询
- right 右表查询
- left join 中间省略了outer
- 根据表1信息显示,显示表1表2共有的数据,和表1独有的数据
事务
BEGIN TRANSACTION //事务开始
SQL1
SQL2
COMMIT/ROLLBACK //事务提交或回滚
数据库
DQL:数据查询语言 如 select
1. 数据查询语言DQL
数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE
子句组成的查询块:
SELECT <字段名表>
FROM <表或视图名>
WHERE <查询条件>
2 .数据操纵语言DML
数据操纵语言DML主要有三种形式:
- 插入:INSERT
- 更新:UPDATE
- 删除:DELETE
3. 数据定义语言DDL
数据定义语言DDL用来创建数据库中的各种对象-----表、视图、
索引、同义词、聚簇等如:
CREATE TABLE/VIEW/INDEX/SYN/CLUSTER
| | | | |
表 视图 索引 同义词 簇
DDL操作是隐性提交的!不能rollback
4. 数据控制语言DCL
数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制
数据库操纵事务发生的时间及效果,对数据库实行监视等。如:
聚合函数
- count()
- max()
- min()
- sum()
- avg()
连接查询
- 内连接 :
- 表1 [inner] join 表2 on 表1.字段=表2.字段
- 左表查询
- 右表查询
ER模型
基本元素:实体、联系和属性
- E 表示entry ,实体:一个数据对象,描述具有相同特征的事务
- R表示relationship,联系:表示一个或多个实体之间的关联关系,关系的类型包括一对一、一对多、多对多
- 属性:实体的某一特性称为属性
事务
当有一条或多条的SQL语句无法执行时,整个事务无法执行
特征(ACID)
- A:原子性——要么全部执行,要么全部不执行
- C:一致性——事务的结果保留不变,即事物的运行并不改变数据的一致性
- I:隔离性——事务中间状态对其他事务是不可见的
- D:持久性——事务一旦提交成功,对数据库中的数据改变就应该是永久的
Pymysql
- 安装:
pip insrall pymysql
- 验证:
pip show pymysql
- 操作数据库基本流程
- 创建:connection
- 获取:cursor
- 执行sql
- 查询操作(select)
- 非查询(insert/update/delete)
- 链接内多填写一个参数:autocommit='true’
- 事物提交(commit())
- 事物回滚(rollback())
- 操作【理解】
- 自动提交(不推荐): autocommit=True
- 手动提交(推荐):
- 提交事务: conn.commit()
- 回滚事务: conn.rollback()
- 关闭cursor、关闭connection
# 导包
import pymysql
# 创建链接host/port/user/password/database
conn = pymysql.connect(host="db4free.net",
port=3306,
user="osehun",
password="qwertyuiop",
database="guohansql")
# 获取游标
cursor = conn.cursor()
# 执行sql
cursor.execute("select version()")
result = cursor.fetchall()
print(result)
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
cursor常用方法
说明:游标是SQL的一种数据访问机制
可以简单看成结果集的“指针”,当使用获取结果第一条后,再执行全部数据(还未重置),就不会再读取第一条结果
-
获取游标(cursor)
- XXX.cursor()
-
关闭游标
- cursor.close()
-
执行SQL
- cursor.execute(SQL语句)
-
获取数据
- 获取查询结果第一条
- cursor.fetchone()
- 获取查询结果所有数据
- cursor.fetchall()
- 返回结果格式:Tuple 元祖类型
- 获取查询结果第一条
-
查询结果总记录数
- cursor.rowcount()
-
查询游标位置
- cursor.rownumber
-
重置游标位置
- cursor.rownumber = 0