zoukankan      html  css  js  c++  java
  • 畅游在数据库的海洋

    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

  • 相关阅读:
    怪异恼人的java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream问题的解决
    Spring3的quartz定时任务
    HTML模板
    SpringMVC 下载XLS文档的设置
    若想在当前路径下去运行非当前路径下的.class文件(即java可执行文件),该如何操作?
    霍金去世 享年76岁
    Github全面学习笔记
    Github上如何在Fork到的开源项目中提交Pull requests?
    Github中如何Fork开源项目?
    Java永久代去哪儿了
  • 原文地址:https://www.cnblogs.com/little-hunter/p/6664705.html
Copyright © 2011-2022 走看看