Mysql学起来还真的挺好玩的,感觉写代码都不是什么事情,重要的是需要创建好每个表的结构,还有表和表之间的关联关系。

Mysql

  • Linux上的Mysql的操作
  1. 先需要在linux上安装MariaBD:可以参考linux公社的攻略:http://www.linuxidc.com/Linux/2014-11/109048.htm
  2. 启动mysql: cd /usr/bin  然后是 ./mysqld_safe &. 这时候可以通过 ps -ef | grep mysql语句来检查一下linux下的mysql是否已经启动。
  3. 开始的时候可以通过 mysql -u root -p 进入,因为没有设置密码;如果需要设置密码:可以执行grant all on *.* to 'root'@'%' identified by '1234'
  4. 关闭mysql: 通过grep查到mysql的进程号,然后kill进程就可
  • mysql的操作
  1. 数据库:增删改查:create/show/drop database  使用数据库:use database_name
  2. 数据库中的表: 增删改查: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

  • 事务:
  1. 事务: 主要用于处理操作量大,数据复杂度高的数据。删除一个人,需要删除他的基本资料,信箱,文章等。
  2. 事务可以保证多件事情一起完成,或者一起失败。
  3. 事务用于增删改
  4. 满足4个条件的才是事务: ACID, atomicity 原子性; consistency 稳定性,isolation隔离性,durability可靠性。
  5. 开始事务: begin
  6. 如果出现问题,可以rollback 回滚
  7. 没有问题的话,commit()就可以保存修改
  • 索引:
  1. 在一个表中,可能需要关注的就两列,所以可以做两个索引。
  2. 希望查找的速度变快,那么就需要索引。
  3. 索引包含单列索引,一个表可以有多个索引。
  4. 在查找的时候,有索引的话,速度会很快;但是在更新的时候,速度会变慢
  5. 查看表中有哪些索引: select index from student; 默认主键就是索引
  6. 增加一个索引: create index index_name on student(name(32))
  7. 增加一个唯一索引: create unique index index_name on student(name(32));
  8. 索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一
  9. 删除: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

 

posted on 2017-04-04 12:31  小hunter  阅读(133)  评论(0编辑  收藏  举报