一、mysql简单介绍

  说到数据库,我们大多想到的是关系型数据库,比如mysql、oracle、sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库,咱不得不首先推荐的是mysql数据库了,而且Mysql数据库的第一个版本就是发行在Linux系统上的。

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策(本词条“授权政策”),它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。由于其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境

二、安装msql

  1、centos6.4编译安装mysql

  参考地址:http://www.centoscn.com/CentosServer/sql/2014/0316/2584.html

  2、windows安装msyql  

官网下载地址:        


          http:         /         /         dev.mysql.com         /         downloads         /         mysql         /



三、mysql简单操作

  可用过客户端远程操作mysql:Navicat for MySql工具

  1、启动数据库:

  

  链接数据库:

  

  2、显示数据库

    

默认数据库:        


            mysql          -          用户权限相关数据         


            test          -          用于用户测试数据         


            information_schema          -          MySQL本身架构相关数据



   2、使用数据库

    

  3、用户授权

  用户管理  

创建用户        


                   create user          '用户名'         @         'IP地址'          identified by          '密码'         ;         


         删除用户        


                   drop user          '用户名'         @         'IP地址'         ;         


         修改用户        


                   rename user          '用户名'         @         'IP地址'         ; to          '新用户名'         @         'IP地址'         ;;         


         修改密码        


                   set          password          for          '用户名'         @         'IP地址'          =          Password(         '新密码'         )         


                   


         PS:用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议)



   授权管理:  

show grants          for          '用户'         @         'IP地址'                           -         -          查看权限         


          grant  权限 on 数据库.表 to            '用户'         @         'IP地址'               -         -          授权         


          revoke 权限 on 数据库.表          from          '用户'         @         'IP地址'               -         -          取消权限   




 

权限

  数据库

  对于用户和IP

四、表操作

  1、在库中创建表  

use test          #选择test库         

          create table 表名(             #创建表         

                   列名  类型  是否可以为空,         

                   列名  类型  是否可以为空         

         )   

是否可空,null表示空,非字符串        

                   not          null             -          不可空         

                   null                 -          可空

默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值        

                   create table tb1(         

                   nid          int          not          null defalut          2         ,         

                   num          int          not          null         

                   )

自增,如果为某列设置自增列,插入数据时无需设置此列,默认将自增(表中只能有一个自增列)        

                   create table tb1(         

                   nid          int          not          null auto_increment primary key,         

                   num          int          null         

                   )         

                   或         

                   create table tb1(         

                   nid          int          not          null auto_increment,         

                   num          int          null,         

                   index(nid)         

                   )         

                   注意:         1         、对于自增列,必须是索引(含主键)。         

                   2         、对于自增可以设置步长和起始值         

                   show session variables like          'auto_inc%'         ;         

                   set          session auto_increment_increment         =         2         ;         

                   set          session auto_increment_offset         =         10         ;         

                  

                   shwo          global           variables like          'auto_inc%'         ;         

                   set          global          auto_increment_increment         =         2         ;         

                   set          global          auto_increment_offset         =         10         ;

主键,一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。        

                   create table tb1(         

                   nid          int          not          null auto_increment primary key,         

                   num          int          null         

                   )         

                   或         

                   create table tb1(         

                   nid          int          not          null,         

                   num          int          not          null,         

                   primary key(nid,num)         

                   )

外键,一个特殊的索引,只能是指定内容        

                   creat table color(         

                   nid          int          not          null primary key,         

                   name char(         16         )          not          null         

                   )         

                  

                   create table fruit(         

                   nid          int          not          null primary key,         

                   smt char(         32         ) null ,         

                   color_id          int          not          null,         

                   constraint fk_cc foreign key (color_id) references color(nid)         

                   )


   2、数据表操作:  

#基于Navicat for MySql工具实现操作        

          show tables;          #查询库中有哪些表         

         create table lcj(        

          id          int          not          null auto_increment PRIMARY KEY,           #PRIMARY KEY主键IP 自增         

          name char(         30         )          not          null,         

          sex char(         4         )          not          null,         

          age tinyint unsigned          not          null,         

          tel char(         13         ) null default           "-"         );           #电话默认为-         

          SELECT          *          from          lcj;           #查询表         

         #插入数据        

          insert into lcj VALUES(         0001         ,         'xiaoluo'         ,         '男'         ,         18         ,         '13520617734'         )         

         #同时插入多条数据        

         insert into lcj VALUES(         

          0004         ,         'xiaoluo'         ,         '男'         ,         18         ,         '13520617734'         ),         

          (         0002         ,         'qq'         ,         'man'         ,         18         ,         '13212345432'         ),         

          (         0003         ,         'ww'         ,         'gril'         ,         19         ,         '13567890987'         );         

                  

         #更新数据;将ID为3的姓名改为lcj        

          UPDATE lcj          set          name          =          'lcj'          WHERE          id          =          3         ;         

         #查看字典条数据        

          SELECT name          from          lcj where          id          =          2         ;         

         #查看所有数据        

          SELECT          *          from          lcj         

         #删除数据        

          DELETE          from          lcj WHERE          id          =          4         ;

   清空表:  

delete          from          表名         

         truncate table 表名


   修改表:

添加列:alter table 表名 add 列名 类型        

         删除列:alter table 表名 drop column 列名        

         修改列:        

                   alter table 表名 modify column 列名 类型;           -         -          类型         

                   alter table 表名 change 原列名 新列名 类型;          -         -          列名,类型         

                   

         添加主键:        

                   alter table 表名 add primary key(列名);         

         删除主键:        

                   alter table 表名 drop primary key;         

                   alter table 表名  modify  列名          int         , drop primary key;         

                   

         添加外键:alter table 从表 add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);        

         删除外键:alter table 表名 drop foreign key 外键名称        

                   

          修改默认值:ALTER TABLE testalter_tbl ALTER i          SET          DEFAULT          1000         ;         

         删除默认值:ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;


   基本数据类型

  MySQL的数据类型大致分为:数值、时间和字符串;

  参考地址:http://www.runoob.com/mysql/mysql-data-types.html

  mysql其他操作:

1         、条件         

                   select          *          from          表 where          id          >          1          and          name !         =          'alex'          and          num          =          12         ;         

                  

                   select          *          from          表 where          id          between          5          and          16         ;         

                  

                   select          *          from          表 where          id          in          (         11         ,         22         ,         33         )         

                   select          *          from          表 where          id          not          in          (         11         ,         22         ,         33         )         

                   select          *          from          表 where          id          in          (select nid          from          表)         

                  

          2         、通配符         

                   select          *          from          表 where name like          'ale%'           -          ale开头的所有(多个字符串)         

                   select          *          from          表 where name like          'ale_'           -          ale开头的所有(一个字符)         

                  

          3         、限制         

                   select          *          from          表 limit          5         ;                     -          前         5         行         

                   select          *          from          表 limit          4         ,         5         ;                   -          从第         4         行开始的         5         行         

                   select          *          from          表 limit          5          offset          4             -          从第         4         行开始的         5         行         

                  

          4         、排序         

                   select          *          from          表 order by 列 asc                       -          根据 “列” 从小到大排列         

                   select          *          from          表 order by 列 desc                      -          根据 “列” 从大到小排列         

                   select          *          from          表 order by 列         1          desc,列         2          asc             -          根据 “列         1         ” 从大到小排列,如果相同则按列         2         从小到大排序         

                  

          5         、分组         

                   select num          from          表 group by num         

                   select num,nid          from          表 group by num,nid         

                   select num,nid          from          表  where nid >          10          group by num,nid order nid desc         

                   select num,nid,count(         *         ),         sum         (score),         max         (score),         min         (score)          from          表 group by num,nid         

                  

                   select num          from          表 group by num having          max         (         id         ) >          10         

                  

                   特别的:group by 必须在where之后,order by之前         

                  

          6         、连表         

                   无对应关系则不显示         

                   select A.num, A.name, B.name         

                   from          A,B         

                   Where A.nid          =          B.nid         

                  

                   无对应关系则不显示         

                   select A.num, A.name, B.name         

                   from          A inner join B         

                   on A.nid          =          B.nid         

                  

                   A表所有显示,如果B中无对应关系,则值为null         

                   select A.num, A.name, B.name         

                   from          A left join B         

                   on A.nid          =          B.nid         

                  

                   B表所有显示,如果B中无对应关系,则值为null         

                   select A.num, A.name, B.name         

                   from          A right join B         

                   on A.nid          =          B.nid         

                  

          7         、组合         

                   组合,自动处理重合         

                   select nickname         

                   from          A         

                   union         

                   select name         

                   from          B         

                  

                   组合,不处理重合         

                   select nickname         

                   from          A         

                   union          all         

                   select name         

                   from          B


 

五、基于Pycharm中pymysql模块实现mysql操作

  1、Pycharm安装pymysql模块  


  2、简单使用pymysql某块

  1)插入数据

  通过pymysql向远程数据库同时插入多条数据并打印插入数据条数

#!/usr/bin/env python        

         # -*- coding:utf-8 -*-        

         # Author:lcj        

          import          pymysql         

         #连接数据库        

          conn          =          pymysql.connect(host         =         '192.168.1.152'         ,port         =          3306         ,user          =          'root'         ,passwd         =         '123123'         ,db         =         'test'         )          #db:库名         

         #创建游标        

          cur          =          conn.cursor()         

         #插入一条数据        

         # reCount = cur.excute('insert into lcj(name,age) vaules(%s,%s)',('ff',18))        

         #向test库中的lcj表插入        

         # ret = cur.executemany("insert into lcj(name,tel)values(%s,%s)", [("kk",13212344321),("kw",13245678906)])        

         #同时向数据库lcj表中插入多条数据        

          ret          =          cur.executemany(         "insert into lcj values(%s,%s,%s,%s,%s)"         , [(         41         ,         "xiaoluo41"         ,         'man'         ,         24         ,         13212344332         ),         

                   (         42         ,         "xiaoluo42"         ,         'gril'         ,         21         ,         13245678948         ),         

                   (         43         ,         "xiaoluo43"         ,         'gril'         ,         22         ,         13245678949         ),         

                   (         44         ,         "xiaoluo44"         ,         'main'         ,         24         ,         13543245648         )])         

         #提交        

         conn.commit()        

         #关闭指针对象        

         cur.close()        

         #关闭连接对象        

         conn.close()        

         #打印结果        

          print         (ret)


   2)查询数据

  在Pycharm控制台输出lcj表中数据

# !/usr/bin/env python        

         # -*- coding:utf-8 -*-        

         # Author:lcj        

          import          pymysql         

         #连接数据库        

          conn          =          pymysql.connect(host         =         '192.168.1.152'         ,port         =          3306         ,user          =          'root'         ,passwd         =         '123123'         ,db         =         'test'         )          #db:库名         

         #创建游标        

          cur          =          conn.cursor()         

         #查询lcj表中存在的数据        

          cur.execute(         "select * from lcj"         )         

         #fetchall:获取lcj表中所有的数据        

          ret1          =          cur.fetchall()         

          print         (ret1)         

          print         (         "----------------------"         )         

         #获取lcj表中前三行数据        

          ret2          =          cur.fetchmany(         3         )         

          print         (ret2)         

          print         (         "------------------------------"         )         

         #获取lcj表中第一行数据        

          ret3         =          cur.fetchone()         

          print         (ret3)         

         #同时向数据库lcj表中插入多条数据        

         # ret = cur.executemany("insert into lcj values(%s,%s,%s,%s,%s)", [(41,"xiaoluo41",'man',24,13212344332),        

         #                                                             (42,"xiaoluo42",'gril',21,13245678948),        

         #                                                             (43,"xiaoluo43",'gril',22,13245678949),        

         #                                                                (44,"xiaoluo44",'main',24,13543245648)])        

         #提交        

         conn.commit()        

         #关闭指针对象        

         cur.close()        

         #关闭连接对象        

         conn.close()


 注:在fetch数据时按照顺序进行,可以使用cursor.scroll(num,mode)来移动游标位置,如:

  • cursor.scroll(1,mode='relative')  # 相对当前位置移动【1:表示向下移动一行,-1:表示向上移动一行】
  • cursor.scroll(2,mode='absolute') # 相对绝对位置移动 【1:表示向上移动一行,-1:表示向下移动一行】

  3)删除数据  

# !/usr/bin/env python        

         # -*- coding:utf-8 -*-        

         # Author:lcj        

          import          pymysql         

         #连接数据库        

          conn          =          pymysql.connect(host         =         '192.168.1.152'         ,port         =          3306         ,user          =          'root'         ,passwd         =         '123123'         ,db         =         'test'         )          #db:库名         

         #创建游标        

          cur          =          conn.cursor()         

         #删除cj表中数据        

          cur.execute(         "delete * from lcj"         )         

         #提交        

         conn.commit()        

         #关闭指针对象        

         cur.close()        

         #关闭连接对象        

         conn.close()


   4)修改表中的数据  

# !/usr/bin/env python        

         # -*- coding:utf-8 -*-        

         # Author:lcj        

          import          pymysql         

         #连接数据库        

          conn          =          pymysql.connect(host         =         '192.168.1.152'         ,port         =          3306         ,user          =          'root'         ,passwd         =         '123123'         ,db         =         'test'         )          #db:库名         

         #创建游标        

          cur          =          conn.cursor()         

         #将lcj表中id=3的name 修改为lcjj        

          cur.execute(         "UPDATE lcj set name = 'lcjj' WHERE id = 3"         )           #逼表中所有的操作都可以再此进行操作         

         #提交        

         conn.commit()        

         #关闭指针对象        

         cur.close()        

         #关闭连接对象        

         conn.close()


   5)fetch数据类型

  关于默认获取的数据是元祖类型,如果想要或者字典类型的数据,即:  

# !/usr/bin/env python        

         # -*- coding:utf-8 -*-        

         # Author:lcj        

          import          pymysql         

         #连接数据库        

          conn          =          pymysql.connect(host         =         '192.168.1.152'         ,port         =          3306         ,user          =          'root'         ,passwd         =         '123123'         ,db         =         'test'         )          #db:库名         

         #设置游标类型,默认游标类型为元祖形式        

         #将游标类型设置为字典形式        

          cur          =          conn.cursor(cursor         =         pymysql.cursors.DictCursor)         

          cur.execute(         "select * from lcj"         )           #逼表中所有的操作都可以再此进行操作         

         #将lcj表中所有数据以字典形式输出        

          ret          =          cur.fetchall()         

          print         (ret)            #[{'age': 18, 'tel': '13520617734', 'name': 'xiaoluo', 'id': 1, 'sex': '?'},         

         #提交        

         conn.commit()        

         #关闭指针对象        

         cur.close()        

         #关闭连接对象        

         conn.close()