关系型数据入门
关系型数据概述
- 数据持久化。
- 数据库发展史。
- 关系型数据库特点。
- E-R图。
- 关系型数据库产品。
MySQL简介
1.为什么要使用关系型数据库:见特点
2.关系型数据库的三个特点:
集合论加关系代数
用二维表承载数据,有行有列
编程语言sql,ddl,dml,dql,dcl
####mysql的特点:
比非关系型数据库,在数据强一致性和安全性方面,或者对于数据要求特别高的(比如金融机构等),mysql数据库在底层有锁机制,能够更好的保存,管理数据。
windows下面是默认的是150个链接
Linux系统可以配置链接客户端数量,改配置文件
开启事务
1.敲begin;或者start transaction;开启事务环境,可以回滚,提交commit后是真正删除。事务环境要么全成功,要么全失败
2.只能一个用户操作这一行,排他锁,排队操作,不一定是行级锁,有可能是整个表,但读取数据时是使用的共享锁,都可以读;
3.如果希望读数据的时候也用排他锁:begin;查询语句后面加for update;
select * from tbdept for update,另一用户也在事务环境中for update
事务隔离级别,事务传播级别
- 安装和配置。
- 常用命令。
SQL详解
- DDL
- DML
- DQL
Python数据库编程
#####MySQLdb
在python2中使用,目前在python3中使用的是PyMySQL
#####PyMySQL
能够对数据进行CRUD操作
####Linux系统下安装mysql:
- 使用rpm包管理工具(redhat包管理工具)
安装:ls | xargs rpm -ivh
卸载:rpm -qa | grep mysql | xargs rpm -e
改配置:vim /etc/my.conf
绑定ip地址:bind-address=
绑定端口:port=
指定最大链接数:max_connections=
不输密码就可以登录:skip-grant-tables
在centos7下:
启动:systemctl start mysqld
状态:systemctl status mysqld
开机自启:systemctl enable mysqld
查看是否启动(进程):ps -ef | grep mysqld
查看端口是否被占用:netstat -nap | grep 3306
####mysql的客户端工具的使用
mysql -u root-p :本机进到客户端工具
mysql -u root -h (地址) -p:链接远端
查看帮助信息
查看帮助信息:? contents
查看数据类型:? data types
查看整数:? int
查看show这个命令怎么用:? show
####SQL
DDL
create / drop / alter
DML
insert / delete / update
DQL
select / as / where / like / regexp /group by / order by asc/desc
DCL
grant(授权) / revoke(召回权限) / begin / commit / rollback
####Python —>MySQL
PyMySQL的使用
创建链接,connect创建链接对象
打开数据库连接
运用pymysql里面的connet方法
db = pymysql.connect(“localhost”,”testuser”,”test123”,”TESTDB” )
服务器(云就写公网),用户名,密码,数据库名字
编码黑洞:拉丁一语系的编码,就是存不下,全是问号,还原不了(乱码可以还原)
big5:大5码,繁体中文
gb2312:国标扩
gb18030:国标,少数民族也可以
latin1:iso-8859-1:默认选择了拉丁一语系编码,造成编码黑洞
cursor:读取数据可以滑动
使用 cursor() 方法创建一个游标对象connection
pymysql.connext(host……)
cursor指定host,port(默认3306,当默认时可不写),user,passwd(password) db(database),charset.
- cursor.execute()执行
- cursor.fetchall():拿所有
fetchone():拿一条
cursor.rowcount
cursor = db.cursor()
查询时转换成字典:cursorclass=DictCursor
查询时别名
手动提交:commit()
自动提交:autocommit=True
装的时候叫pillow,用的时候交PIL
####pycharm中库或者插件安装办法:
- 红灯泡自动修复错误
终端
+号安装
安装虚拟环境:virtualenv –no-site-package venv
6.28
在函数中如何拿到链接mysql数据库的方法:
第一种方式:将连接语句设置为全局变量,全局作用域,这是非常不好的做法,因为全局变量的影响范围太广,有时无法有效控制
语法:global con
第二种方式:将连接语句使用参数传递给需要使用的方法中
语法:add_new_contacter(con)
抽取常量
####sql语句:limit %s offset %s
含义:查看多少条;从第几条开始,(跳过几条),
查看数量,偏移量,
####类:enumerate
for index, row in enumerate(cursor.fetchall()): ???
显示一个编号,for循环在range中有编号,自定义的列表是没有编号的
####关于安全占位符
安全在于,它会自动补全引号。只有一个占位符也是传递元组,安全占位符only接收元组
#####复用代码的最佳方式:封装,写成类或者函数
####作用域:
- LEGB的查找方式:
- global和nonlocal两层含义:用全局中的(修改也是),第二是全局没有它放到全局中
####面向对象
数据抽象:属性(名词)
初始化方法绑定属性
行为抽象:方法(动词)
花括号占位符
三种创建方式:
三步走:定义类,创建对象,调用对象(给对象发消息)
两步走:创建对象,给对象发消息
一步走:给对象发消息(document对象,window对象)
#####怎么把将字典变成对象
创建对象:构造器,跟类名完全一致,调构造器时会自动初始化,需要传参,将字典传入关键字参数
将字典处理成关键字参数传入构造器