美文网首页
MySQL 必知必会的操作

MySQL 必知必会的操作

作者: 拿破仑蛋糕 | 来源:发表于2018-05-01 19:33 被阅读0次

    参考文章:
    1.mysql数据库的基本操作
    2.10分钟学会MySQL基础教程

    1.增加一条记录insert

      -- insert [into] tab_name (field1,filed2,.......) values (value1,value2,.......);
       insert into employee_new (id,name,birthday,salary) values (1,'yuan','1990-09-09',9000);
    
      -- 插入多条数据
       insert into employee_new values (4,'alvin1','1993-04-20',3000),(5,'alvin2','1995-05-12',5000);
    
      -- set插入: insert [into] tab_name set 字段名=值
      insert into employee_new set id=12,name="alvin3";
    

    2.修改表记录

    /* 注意:WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。*/
    -- update tab_name set field1=value1,field2=value2,......[where 语句]
    update employee_new set birthday="1989-10-24" WHERE id=1;
    
    -- 将yuan的薪水在原有基础上增加1000元。
    update employee_new set salary=salary+4000 where name='yuan';
    

    3.删除表纪录

      /*注意:
            1.如果不跟where语句则删除整张表中的数据
            2.delete语句只能删除表中的内容,想要删除表,用drop
            3.truncate table(截断)也可以删除表中的所有数据,词语句首先摧毁表,再新建表。此种方式删除的数据不能在
            事务中恢复。
      */
     delete from tab_name [where ....]
    
     -- 删除表中名称为’alex’的记录。
     delete from employee where name='alex';
    
     -- 删除表中所有记录。
     delete from employee;//注意此时表自增id没有被重置
     -- 重置表自增id     
     alter table employee auto_increment=1;
    
     -- 使用truncate删除表中记录。
     truncate table emp_new;
    

    4.查询表记录

    -- (1)select [distinct] *|field1,field2,......   from tab_name
            select distinct JS ,name from ExamResult;
    
    -- (2)select 也可以使用表达式,并且可以使用 as 给字段起别名
            -- 在所有学生分数上加10分特长分显示。
            select name,JS+10,Django+10,Database+10 from ExamResult;
    
            -- 统计每个学生的总分。
            select name,JS+Django+Database from ExamResult;
    
            -- 使用别名表示学生总分。
            select name as 姓名,JS+Django+Database as 总成绩 from ExamResult;
    
    -- (3)使用where子句,添加查询条件进行查询过滤,where字句中可以使用:
             -- 比较运算符:
                > < >= <= <> !=                        
                between 80 and 100 //值在80到1000之间
                in(80,90,100) //值是80或90或100
                like 'yuan%' //模糊匹配
                              //模糊匹配的运算符是%或者_, 
                              //如果是%则表示任意多字符,此例如唐僧,唐国强
                              //如果是_则表示一个字符唐_,只有唐僧符合。
            -- 逻辑运算符
                在多个条件直接可以使用逻辑运算符 and or not
    
    -- (4)Order by 指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的别名。
            -- select *|field1,field2... from tab_name order by field [Asc|Desc]
    
            -- Asc 升序、Desc 降序,其中asc为默认值 ORDER BY 子句应位于SELECT语句的结尾。
    
    -- (5)group by 分组查询:
            -- 注意,按分组条件分组后每一组只会显示第一条记录,
                如果想显示每个组的全部数据,可以使用 order by 或 group_concat()函数
    
            -- group by字句,其后可以接多个列名,也可以跟having子句,对结果进行筛选
             /*having 和 where两者都可以对查询结果进行进一步的过滤,差别有:
             <1>where语句只能用在分组之前的筛选,having可以用在分组之后的筛选;
             <2>使用where语句的地方都可以用having进行替换
             <3>having中可以用聚合函数,where中就不行。
             */
              select name,sum(Django) from ExamResult
                        where name!="yuan"
                        group by name
                        having sum(Django)>130;
    
            -- GROUP_CONCAT() 函数
            1、功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
            2、语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc  ] [separator '分隔符'] )
            说明:通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;
                  separator是一个字符串值,缺省为一个逗号。
              SELECT id,GROUP_CONCAT(name),GROUP_CONCAT(JS) from ExamResult GROUP BY id;
    
    -- (6)聚合函数: 一般和分组查询配合使用
            --<1> 统计表中所有记录
                -- COUNT(列名):统计行的个数
                -- 注意:count(*)统计所有行; count(字段)不统计null值.
    
                -- SUM(列名):统计满足条件的行的内容和
                 -- 注意:sum仅对数值起作用,否则会报错。
    
                -- AVG(列名):求平均值
                -- Max、Min:求最高分和最低分(数值范围在统计中特别有用)
                -- 注意:null 和所有的数计算都是null,所以需要用ifnull将null转换为0!ifnull(JS,0)
    
    --  (7) limit
                    SELECT * from ExamResult limit 1,5;
    

    5.多表查询

    -- (1) 笛卡尔积查询
         -- select * from table_name1, table_name2;
    
    -- (2) 内连接,查询两张表中都有的关联数据,相当于利用条件从笛卡尔积结果中筛选出了正确的结果
        --select * from table_name1 inner join table_name2 on table_name1.dept_id = table_name2.dept_id;
    
    -- (3) 外连接(左联接、右连接、全连接)
        -- 左连接:在内连接的基础上增加左边有右边没有的结果
           select * from table_name1 left join table_name2 on table_name1.dept_id = table_name2.dept_id;
    
        -- 右外连接:在内连接的基础上增加右边有左边没有的结果
           select * from table_name1 right join table_name2 on table_name1.dept_id = table_name2.dept_id;
    
        -- 全外连接:在内连接的基础上增加左边有右边没有的和右边有左边没有的结果
           -- 注意:mysql不支持全外连接 full join,但是可以使用此种方式间接实现全外连接:
           select * from table_name1 right join department on table_name1.dept_id = table_name2.dept_id
           union
           select * from table_name1 left join table_name1 on table_name1.dept_id = table_name2.dept_id;
           -- 注意 union与union all的区别:union会去掉相同的纪录
    
    -- (4) 子查询
        -- 子查询是将一个查询语句嵌套在另一个查询语句中。
        -- 内层查询语句的查询结果,可以为外层查询语句提供查询条件。
        -- 子查询中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等关键字
        -- 还可以包含比较运算符:= 、 !=、> 、<等
    

    2018年5月4日更新:
    我被人问到:“如何创建用户名和密码?”,然后就蒙了。。。
    参考文章:MySQL创建用户的三种方法
    特此记录:

    一.创建用户:

    命令: CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 
    例子: CREATE USER 'root'@'localhost' IDENTIFIED BY '123456';
    

    说明:
    username : 你将创建的用户名;
    host : 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%;
    password : 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器;

    二.授权:

    命令: GRANT privileges ON databasename.tablename TO 'username'@'host' 
    例子: GRANT SELECT, INSERT ON test.user TO 'pig'@'%'; 
    
    注意:用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令: 
    GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION; 
    

    说明:
    privileges : 用户的操作权限,如SELECT , INSERT , UPDATE 等,如果要授予所的权限则使用ALL;
    databasename : 数据库名;
    tablename : 表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示, 如*.*;

    三.设置与更改用户密码:

    命令:SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');
    例子: SET PASSWORD FOR 'pig'@'%' = PASSWORD("123456"); 
    如果是当前登陆用户用:SET PASSWORD = PASSWORD("newpassword"); 
    

    四.撤销用户权限:

    命令: REVOKE privilege ON databasename.tablename FROM 'username'@'host'; 
    例子: REVOKE SELECT ON *.* FROM 'pig'@'%'; 
    

    说明: privilege, databasename, tablename - 同授权部分.
    注意: 假如你在给用户'pig'@'%'授权的时候是这样的(或类似的):GRANT SELECT ON test.user TO 'pig'@'%', 则在使用REVOKE SELECT ON . FROM 'pig'@'%';命令并不能撤销该用户对test数据库中user表的SELECT 操作.相反,如果授权使用的是GRANT SELECT ON . TO 'pig'@'%';则REVOKE SELECT ON test.user FROM 'pig'@'%';命令也不能撤销该用户对test数据库中user表的Select 权限.
    具体信息可以用命令SHOW GRANTS FOR 'pig'@'%'; 查看.

    五.删除用户:

    命令:DROP USER 'username'@'host';
    例子:DROP USER 'root'@'host'; 
    

    相关文章

      网友评论

          本文标题:MySQL 必知必会的操作

          本文链接:https://www.haomeiwen.com/subject/fbuglftx.html