Mysql笔记

 上节课作业
    1、shell脚本:bak_log.sh
    src_path='/opt/lampp/logs/access_log'
    tar_path='/tmp/logs/'
    time=`date +%Y%m%d%H%M%S`
    cp -rf ${src_path} ${tar_path}access_log_${time}
    >${src_path}

    2、定时任务:crontab -e
    59 23 * * * sh /tmp/bak_log.sh
 

 补充内容
    VIM命令,批量注释,先按Ctrl+v,然后选中多少行,然后Shift+i,写你要添加的东西,按下Esc即可。
    ls *.tmp                                #查询以.tmp结尾的所有文件
    ls luo*                                #查询以luo开头的所有文件
    ls *luo*                                #查询名字包含luo的所有文件
        
    测试环境搭建
        ①.下载以来软件安装好;
        ②.获取源代码(打包,根据不同语言来看是否需要编译、打包);
        ③.导入基础数据;
        ④.修改配置文件(数据库IP等修改);
        ⑤.启动。
        java    (tomcat、weblogic、jetty、resin、ws)        需要编译、打包
        php、ruby、python    (nginx、apache)            不需要编译、打包
    日常部署
        ①.获取最新的代码(编译、打包);
            如果有表结构变更的话,要执行SQL。
        ②.修改配置文件;
        ③.重新启动程序。
    
    
Mysql
    Mysql是众多关系型数据库中的一种。
    SQL(Structured Query Language)语言的全称是结构化查询语言。数据库管理系统通过SQL语言来管理数据库中的数据。
    SQL语言分为三个部分:数据定义语言(Data Definition Language,简称为DDL)、数据操作语言(Data Manipulation Language,简称为DML)和数据控制语言(Data Control Language,简称为DCL)。
    DDL语句:create、alter、drop;
    DML语句:update、insert、delete、select;
    DCL语句:是数据库控制功能。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。

  数据类型
      数据类型是数据的一种属性,其可以决定数据的存储格式、有效范围和相应的限制。MySQL的数据类型包括整数类型、浮点数类型、定点数类型、日期和时间类型、字符串类型和二进制数据类型。
      整数类型、浮点数类型和定点数类型
       整数类型:tinyint、smallint、mediumint、int、bigint。
       浮点数类型包括单精度浮点数(FLOAT型)、双精度浮点数(DOUBLE型)、定点数类型就是DECIMAL型。
       日期与时间类型:date、time、year、datetime与timestamp。
            date表示日期,默认格式为YYYY-MM-DD;
            time表示时间,格式为HH:ii:ss;
            year表示年份;
            datetime与timestamp是日期和时间的混合类型,格式为YYYY-MM-DD HH:ii:ss。
       字符串类型:CHAR、VARCHAR、BLOB、TEXT、ENUM和SET。
       二进制类型:binary、varbinary、bit、blob(tinyblob、blob、mediumblob、longblob)。

         mysql -uroot -pxxx                                        #进入mysql命令行
         /s                                                                 #查看mysql服务器状态信息
         /h                                                                 #显示命令清单,帮助文件
         set  @autocommitt=0;                                        #关闭自动提交设置(mysql默认自动提交)
         select  @autocommitt;                                          #查询是否自动提交设置


  数据库
          查看
              show databases;                                           #查看所有数据库
          创建    
              create database 数据库 charset 字符集;                     #创建数据库
          删除  
              drop database 数据库;                                 #删除数据库
          选择
              use 数据库;                                          #选择数据库
              show create database 数据库;                           #查看创建数据库语句
  
              auto_increment                                        #自增长(整数列默认自增1)
              not null                                               #非空约束
              default 'xx'                                          #默认值
              unique                                                #唯一约束
              charset    字符集                                        #指定字符集
              primary key                                          #主键约束,具有唯一性,不能为空
              foreign key                                           #外键约束,用来表示两个表的关系,外键影响性能    
          增
            例子:
              create table students (
                  id int auto_increment primary key,
                  name varchar(10) not null,
                  sex varchar(2) default '男',
                  addr varchar(50),
                  phone int not null unique
              );
              create table score (
                  id int auto_increment primary key,
                  s_id int not null,
                  grade float,
                  constraint 'score' foreign key ('s_id') refernces 'students' ('id')
              );
            
          删
              drop table 表名;                                        #删除表  
          改
              alter table 表名 rename 新表名;                         #修改表名    
              alter table 表名 modify 字段名 数据类型;                     #修改字段的数据类型
              alter table 表名 change 字段名 新字段名 数据类型;               #修改字段的数据类型和新字段名
              alter table 表名 add 字段名 新字段名 数据类型 约束等;         #表新加字段
              first;                                                 #新增字段加在第一位(放在表新加字段后)
              alter 字段名;                                          #新增字段加在哪个字段后(放在表新加字段后)
              alter table 表名 drop 字段;                               #表删除字段
          查
              show tables;                                         #查看所有表
              desc 表名;                                           #查看表结构
              show create table 表名;                                  #查看创建表语句
  数据
          增
              insert into 表名 (字段1,字段2) values ('字段1值','字段2值')                            #指定字段,插入值与字段一一对应
              insert into 表名 (字段1,字段2) values ('字段1值','字段2值'),('字段1值','字段2值')            #指定字段,插入值与字段一一对应,插入多条数据
              insert into 表名 values ('字段1值','字段2值')                                        #不指定字段,插入值与表所有字段一一对应
          删
              truncate 表名;                                                       #清空整个表数据,物理删除,之前的约束失效,且无法恢复数据
              delete from 表名;                                                  #删除整个表数据,逻辑删除,设置不自动提交,可以rollback恢复数据
              truncate清空表数据,再插入表数据会自增长的字段会重新开始,delete删除表数据,再插入表数据会自增长的字段会继续增长。    
          改
              update 表名 set 字段=字段值 where 条件;                        #修改指定的数据
              update 表名 set 字段1=字段1值,字段2=字段2值 where 条件;                     #修改多个字段
              upadte 表名  set 字段=字段+值                                          #在原来值的基础上做修改(例:upadte 表名  set money=money+100;)
          查
              select 字段1,字段2,字段3 from 表名;                                          #查询指定字段
              select * from 表名;                                                                 #查询所有字段
              select * from 表名 where 条件;                                                #查询多条数据,指定条件满足
              select * from 表名 where 条件1 and 条件2;                                       #查询多条数据,多个条件必须同时满足
              select * from 表名 where 条件1 or 条件2;                                       #查询多条数据,多个条件只要有一个满足即可
              select * from 表名 where 字段 like '%模糊值%';                               #模糊查询,%代表的是通配符,用通配符必须使用like
              select * from 表名 (as) 别名 where 别名.字段名=字段值;                           #给表起别名,as可以省略
              select 别名.字段1 (as) 字段1别名 from 表名 (as) 别名 where 别名.字段名=字段值;         #给列起别名,as可以省略
              select * from 表名 (as) 别名 where 别名.字段名 in ('字段值1','字段值2');              #判断字段值是否在指定的集合中
              select * from 表名 (as) 别名 where 别名.字段名 between 字段值1 and 字段值2;         #判断是否在字段值1到字段值2之间(必须是数值范围大小)
              select * from 表名 (as) 别名 where 别名.字段名='' or 别名.字段名 is null;                 #查询指定字段值为空的数据
              select distinct 别名.字段名 from 表名 (as) 别名 ;                                 #去除重复字段,只能对单个字段去重
              select * from 表名 order by 字段名 desc;                                                 #根据字段desc降序,默认asc升序,order by放在最后
              select 字段名,count(*) from 表名 group by 字段名;                                 #分组,有几组数据就显示几条
              select 字段名1,字段名2,count(*) from 表名 group by 字段名1,字段名2;                #多个字段分组,有几组数据就显示几条
        如果group by后面有条件的话,用having子句,并且having子句里的字段必须要出现在select后面,查询该字段;如果group by和order by一起用,order by必须写在group by 后面。
  多表查询:多表查询是指从多张表中查询所需要的数据,一般查询的这几张表都有一个相同的字段关联这几张表。
              select * from 表1,表2 where 表1.字段名 = 表2.字段名 and 条件;                     #查询多表满足条件的数据,两个表都存在的数据
            多表连接可以通过join关键字来连接,也可以直接用关联表中相同的id来进行关联;
        Join:
        left join:左连接, 连接两张表,以左边表的数据匹配右边表中的数据,如果左边表中的数据在右边表中没有,会显示左边表中的数据。
              select * from 表1 left join 表2 on 表1.字段名 = 表2.字段名;                           #左边表中所有数据,右边表匹配得到就查询出来
        right join:右连接,连接两张表,以右边表的数据匹配左边表中的数据,如果左边表中的数据在左边边表中没有,会显示右边表中的数据。
              select * from 表1 right join 表2 on 表1.字段名 = 表2.字段名;                         #右边表中所有数据,左边表匹配得到就查询出来
        inner join:内连接,连接两张表,匹配两张表中的数据,和前面两个不同的是只会显示匹配的数据。
              select * from 表1 inner join 表2 on 表1.字段名 = 表2.字段名;                        #查询两边表都匹配到的数据,两个表都存在的数据
              select * from 表名1 where 表名1.字段名 = (select 表名2.字段名 from 表名2 where 条件);      #子查询:把一条sql的结果作为另一条sql的条件
           子查询的结果可以当成表用。

              select * from 表名 limit 行数;                                               #查询要求的行数数据,从0开始
          例:
              select * from 表名 limit 1,5;                                                 #限定查询数量,从第二条开始,查询5条数据
              select * from 表名 limit 5;                                                  #查询5条数据
              select 字段列表1 from 表名1 union select 字段列表2 from 表名2                     #合并两条select语句结果,字段数量和数据类型要一致
          uninon和union all的区别:union会在结果中去重,而union all不会去重;但是union all 的效率比union的效率高。
              !=    和    <>                                                          #不等于
              _                                                                     #_匹配的是任意单个字符,在条件里使用
              %                                                                    #%匹配的是任意字符,在条件里使用
            
  聚合函数
          select count(*)  列别名 from 表名;                                                 #统计行数,可以加where条件
          select max(表别名.字段名) 列别名 from 表名 (as) 表别名;                              #查询某个字段的最大值
          select min(表别名.字段名) 列别名 from 表名 (as) 表别名;                               #查询某个字段的最小值
          select avg(表别名.字段名) 列别名 from 表名 (as) 表别名;                               #查询某个字段的平均值
          select sum(表别名.字段名) 列别名 from 表名 (as) 表别名;                                #查询某个字段的值总和
  备份数据库
          mysqldump -u用户名 -p密码                                                                    #linux命令(mysql自带的命令),备份数据库
          mysqldump -u用户名 -p密码 数据库 > 文件名.sql                                      #备份指定数据库
          mysqldump -u用户名 -p密码 -A > 文件名.sql                                          #备份所有数据库的所有表
        
  备份的shell脚本
        date=`date +%Y%m%d`
        mysqldump -u用户名 -p密码 -A > /tmp/bak_sql/${time}_all.sql


  恢复数据:先创建数据库,然后再恢复数据库
        mysql -u用户名 -p密码 数据库 < 文件名.sql                                     #linux命令(mysql自带的命令),恢复数据库
        既可以恢复数据库,也可以批量执行SQL


  存储过程:批量的造数据
    模板:
          delimiter $$;
          CREATE PROCEDURE 名称(参数列表)
         begin
          SQL语句块
          end
          $$;
          delimiter;

          例子1:
          delimiter $$;                                                    #结束符改成$$
          CREATE PROCEDURE big_data1(num int)                                                 #创建存储过程,num代表要造多少条数据
          begin
          declare i int;                                                                 #定义一个计数器
          set i=0;                                                                            #从0开始计数
          while i<num do                                                                            #只要i小于num的时候,一直执行插入语句
          insert into students (stu_name,money) values ('suan',20000);                                      #插入数据
          set i=i+1;                                                                                         #每执行一次+1
          end while;                                                                              #结束循环
          end
          $$;                                            
          Delimiter;                                                                 #结束符改回成;
          –Call big_data;
        
          例子2:
          delimiter $$;                                                               #结束符改成$$
          CREATE PROCEDURE big_data2(num int)                                          #创建存储过程,num代表要造多少条数据
          begin
          declare i int;                                                                #定义一个计数器
          set i=0;                                                                     #从0开始计数
          while i<num do                                                               #只要i小于num的时候,一直执行插入语句
          insert into students (stu_name,money) values (concat ('张三',i),20000);                    #插入数据,concat连接不同类型的数据,把字符串和数字拼接到一起
          set i=i+1;                                                                            #每执行一次+1
          end while;                                                                 #结束循环
          end
          $$;                                            
          Delimiter;                                                                 #结束符改回成;
          –Call big_data;

          call 存储过程名(数量);                                                         #调用存储过程


  数据库权限:授权就是为某个用户赋予某些权限。
    update user set passwrd=password('密码') where user='账号';                         #修改数据库密码,密文
    例如,可以为新建的用户赋予查询所有数据库和表的权限。合理的授权能够保证数据库的安全。不合理的授权会使数据库存在安全隐患。
    

    MySQL中使用GRANT关键字来为用户设置权限。

    Grant 命令的格式
            grant 权限 on 数据库对象 to 用户
            比如说增加一个超级用户,拥有所有的权限,只允许本地登录
            Grant all on *.* to 'andashu'@'localhost' IDENTIFIED BY '123456‘with grant option;
            增加一个普通用户,只有对bugfree数据库查询的修改的权限,允许远程登录
            Grant select, insert,update on bugfree.* to 'tester'@'%' IDENTIFIED BY '123456';
            增加一个超级用户,限制登录ip为192.168.1.101
            Grant all privileges on *.* to dba@‘192.168.1.101' IDENTIFIED BY '123456';
            增加一个只有查询bugfree的bug表中的bugtitle的用户
            Grant select(title) on bugfree.bf_bug_info to 'bugfree'@'%' IDENTIFIED BY '123456';
        

    取消权限:用revoke 关键字
            revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from” 即可
            Revoke 权限 on 数据库对象 from 用户
            比如要取消andashu用户的超级权限
            Revoke all on *.* from andashu@localhost;
            取消dba用户查询权限
            Revoke select on *.* from dba@localhost;
           

    修改user表的数据      
          flush privileges;                                        #刷新数据
          添加%的一条数据后,除本机(localhost)所有IP都可以远程连接。

      

posted @ 2017-01-04 11:36  _酸酸  阅读(184)  评论(0编辑  收藏  举报