Mysql学起来还真的挺好玩的,感觉写代码都不是什么事情,重要的是需要创建好每个表的结构,还有表和表之间的关联关系。
Mysql
- Linux上的Mysql的操作
- 先需要在linux上安装MariaBD:可以参考linux公社的攻略:http://www.linuxidc.com/Linux/2014-11/109048.htm
- 启动mysql: cd /usr/bin 然后是 ./mysqld_safe &. 这时候可以通过 ps -ef | grep mysql语句来检查一下linux下的mysql是否已经启动。
- 开始的时候可以通过 mysql -u root -p 进入,因为没有设置密码;如果需要设置密码:可以执行grant all on *.* to 'root'@'%' identified by '1234'
- 关闭mysql: 通过grep查到mysql的进程号,然后kill进程就可
- mysql的操作
- 数据库:增删改查:create/show/drop database 使用数据库:use database_name
- 数据库中的表: 增删改查:create table table_name, delete table table_name, update table_name set ... where ..., select * from table_name
mysql 主要就是对数据库、数据库中个表格还有表格内容进行增删改查。就粘贴一下我的word笔记中的内容了。
|
数据库 |
数据库中的表格 |
修改表格本身 |
增 |
create database liqingdb charset utf-8 |
create table student( Id int auto_increment; #会自动增加的id Name char(32) not null, Age int not null, Primary key (id)); #在表中增加内容:inser into table_name (列名) values (列内容) |
增加一列:性别 alter table student add sex enum(“M”,”F”); |
删 |
drop database liqingdb |
delete from student where name=”liqing” 把表中name=liqing的数据删除 drop table table_name #删除表格 |
alter table student drop age;
|
改 |
|
update student set name= “zhangzilong”, age = 33 where id =4 修改第四条的name 还有age. |
alter table student modify sex enum(“M”,”F”) not null #将sex这个设置为非空 Modify 是修改类型 alter table student change sex gender char(32) not null default “X”; Change 可以同时修改很多个字段,把sex修改为gender, 然后改变了type, 初始值,能否为空等属性。 但是change是需要加行这个列的type的。 |
查 |
show database; |
select * from student; delect column_name, column _name select * from student limit 2 offset 1;offset是从那一条开始查,limit是查几条 select * from student where id>3 and age <10 条件查询 select * from student where register_date like "2017-04%" 查询studeng表, register_date列中日期为2017-04的 排序: select * from student order by id desc # 默认通常是升序排列,asc; 要是降序的话 是desc 分组统计: select name, count(*) from student group by name #根据name来分组 count可以换一个名字 select name, count(*) as stu_name from student group by name 可以求所有同名的人的年龄加和 select name, sum(age) from student group by name 可以求所有同名人的年龄加和的同时,还可以求总年龄 select coalesce(name,"total"), sum(age) from student group by name with rollup; |
desc table #查看表格有哪些列的属性 |
mysql中的数据类型还有数据库的连接(inner join, left join, right join),可以参照alex的博客:http://www.cnblogs.com/alex3714/articles/5950372.html
- 事务:
- 事务: 主要用于处理操作量大,数据复杂度高的数据。删除一个人,需要删除他的基本资料,信箱,文章等。
- 事务可以保证多件事情一起完成,或者一起失败。
- 事务用于增删改
- 满足4个条件的才是事务: ACID, atomicity 原子性; consistency 稳定性,isolation隔离性,durability可靠性。
- 开始事务: begin
- 如果出现问题,可以rollback 回滚
- 没有问题的话,commit()就可以保存修改
- 索引:
- 在一个表中,可能需要关注的就两列,所以可以做两个索引。
- 希望查找的速度变快,那么就需要索引。
- 索引包含单列索引,一个表可以有多个索引。
- 在查找的时候,有索引的话,速度会很快;但是在更新的时候,速度会变慢
- 查看表中有哪些索引: select index from student; 默认主键就是索引
- 增加一个索引: create index index_name on student(name(32))
- 增加一个唯一索引: create unique index index_name on student(name(32));
- 索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一
- 删除:drop index index_name on student;
Sqlalchemy
Mysql 的语言记起来比较困难,所以如果能通过ORM(object relation mapper, 关系映射)来管理会简单很多。
优点:
1.隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心;
2.ORM使我们构造固化数据结构变得简单易行。
缺点:
1. 无可避免的,自动化意味着映射和关联管理,代价是牺牲性能。
- 主要步骤是:
第一步: 建立连接: engine = create_engine(“mysql+pymysql://root:1234@192.168.102.128/liqingdb”, encoding= ‘utf-8’, echo= True)
第二步:建立一个基类:Base= declarative_base()
第三步:建立类
class User(Base): __tablename__='book' id = Column(Integer,primary_key=True) name = Column(String(32)) pub_date = Column(DATE)
第四步: Base.metadata.create_all(engine) #创建表结构
第五步:创建数据
from sqlalchemy.orm import sessionmaker
Session_class = sessionmaker(bind=engine)
Session = Session_class() #生成一个实例
user_obj = User(name=”liqing”, password=”1234”)
Session.add(user_obj)
Session.commit()
- 增删该查
1. 增加
user_obj= User(name="zhangsan",password = "0000") #生成需要创建的数据对象
print(user_obj.name, user_obj.id) #这个时候id是没有值得
Session.add(user_obj)
print(user_obj.name,user_obj.id)
Session.commit()
2. 修改, 需要先获取到data, 然后通过first得到列表中的第一个元素
data= Session.query(User).filter(User.id>1).filter(User.id<3).first()
data.name = "wangwu"
data.password = "5555"
Session.commit()
3. 查找:特定的查找:data= Session.query(User).filter_by(name="liqing").all()
范围的查找: data= Session.query(User).filter(User.id>2).all() 判断相等用==
4. 统计:把all 变成 count
print(Session.query(User).filter(User.name.in_(['liqing','wangwu'])).count())
5.分组:
from sqlalchemy import func
print(Session.query(User.name,func.count(User.name)).group_by(User.name).all())
6. 删除:
Session.query(User).filter_by(name="wangwu").delete()
Session.commit()
还有外键关联,多外键关联和多对多,写的不如alex老师的好。可以参考他的博文:http://www.cnblogs.com/alex3714/articles/5978329.html