mysql 数据库基础知识整理

   首先将一下,如果你的mysql密码忘记了,那么通过下面的方式进行重置密码

1.停止mysql服务:
    services.msc 进入到服务界面
   
  2.在cmd>输入一个命令:
    mysqld --skip-grant-tables    (开启一个mysql服务,不需要进行认证.)
   
  3.新打开一个cmd窗口
    mysql -u root -p  不需要输入密码.就可以进入.
   
  4.输入命令 show databases;查看数据库,输入命令 use mysql;使用mysql数据库。

  5.修改密码的语句:
    update user set password=password('root') WHERE user='root';
   
  6.将两个窗口都关闭.

  7.任务管理器中结束(mysqld)进程.

  8.重启mysql服务

   

   mysql 创建约束的三种方式:  主键约束,唯一约束,非空约束,其中主键约束就是保证该字段不能出现重复的值,主键的作用就是区分每一条数据的,区别是否是相同的原色,

  其中唯一约束的作用就是要求这个字段中的所有的元素都不能有重复的元素,非空约束的作用就是要求这个字段的数据不能是空的,

     下面说一下,mysql数据库中的crud操作

          1    * 语法:update 表名 set 字段=值,字段=值... [where ]       
                * 如果没有where条件,默认更新所有的记录。
                * 有where提交,选择某一条记录。

                 例如 

                      将所有员工薪水修改为5000元。
                      update user set salary=5000;
               
                      将姓名为’班长’的员工薪水修改为3000元。
                      update user set salary=3000 where username='班长';

         2      删除 delete的语法
                 语法:delete from 表名 [where ];    删除数据
               当没有where的时候,默认删除了数据库中的所有元素,使用delete删除数据库中的所有元素是一条一条删除的,
               如果使用truncate 也可以执行删除数据库中的所有数据的操作,使用truncate删除的语法truncate 表名; 删除所有的数据,

               truncate的删除机制是先删除表,然后在创建一个新的表,这样的删除机制,在删除速度上是要比delete快很多的,

               但是在实际项目中并不采用这种删除机制,原因是我们在实际项目中的删除操作必须要用到事务,所以这样删除会出现问题。

        3  * 添加数据
            * insert into 表名 (字段1,字段2,字段3..) values(值1,值2,值3...);    有几列就插入多少的值。
            * insert into 表名 values(值1,值2,值3...);   

             当主键是自增长的时候,使用第二种添加方式

              insert into 表明 values(null,数据1,数据2...);

       4  查询操作(*********)

                        select * from 表名;                        查询所有(字段)
                        select 字段名1,字段名2,字段名3 from 表名;        显示查询字段名
                        select DISTINCT 字段名 from 表名;            去除重复的数据。

             当我们跨很多表进行查询的时候,有可能表名会重复,这个时候,我们需要使用别名进行查询,

          +----+------+------+---------+---------+
          | id | name | math | english | chinese |
          +----+------+------+---------+---------+
          |  1 | 小王 |   78 |      21 |      31 |
          |  2 | 小张 |   86 |       1 |      81 |
          |  3 | 小李 |   76 |      18 |      51 |
          |  4 | 小赵 |   96 |      98 |      91 |
          |  5 | 小孙 |   76 |      88 |      81 |
          +----+------+------+---------+---------+

       select s.name,(s.math+s.english+s.chinese) as sum from stu s;  

          +------+-----+
          | name | sum |
          +------+-----+
          | 小王 | 130 |
          | 小张 | 168 |
          | 小李 | 145 |
          | 小赵 | 285 |
          | 小孙 | 245 |
           +------+-----+

         首先,我创建了一个表的别名s,然后我查的相应的数据就是 s.字段名,我查的字段分别是name和数学,英语,语文三科的成绩和,

          我给我的三科成绩和创建了一个别名sum,我查出来的数据表的字段名称也变成了sum。

          下面说一下,如何使用where 添加别名,就是把别名添加到条件里面。

           select t2.* from (select name,(math+english+chinese) as sum1 from stu) t2 where sum1>200;

      

           模糊查询   like        -- 模糊查询        写法:like '张_或者%'

            排序    使用order by 升序默认的(asc)/降序(desc)    默认是 asc 顺序

          select * from stu where name like '小%' order by chinese;

              +----+------+------+---------+---------+
              | id | name | math | english | chinese |
              +----+------+------+---------+---------+
              |  1 | 小王 |   78 |      21 |      31 |
              |  3 | 小李 |   76 |      18 |      51 |
              |  2 | 小张 |   86 |      21 |      81 |
              |  5 | 小孙 |   76 |      88 |      81 |
              |  4 | 小赵 |   96 |      98 |      91 |
              +----+------+------+---------+---------+

             如果,我有一个新的需求,例如根据 english进行排序,如果有相同的,在根据math进行排序

              select * from stu order by english desc , math asc;

             * 聚集函数   
                * count        获取数量
                    练习:
                    统计一个班级共有多少学生?
                        select count(*) from stu;
                    统计数学成绩大于90的学生有多少个?
                        select count(*) from stu where math > 90;
                    统计总分大于150的人数有多少?
                        select count(*) from stu where (math+english+chinese) > 150;
                   
                * sum        求和(忽略null值)        可以同ifnull(xxx,0)
                    统计一个班级数学总成绩?
                        select sum(math) from stu;
                    统计一个班级语文、英语、数学各科的总成绩
                        select sum(math),sum(english),sum(chinese) from stu;
                    统计一个班级语文、英语、数学的成绩总和
                        select sum(ifnull(math,0)+english+chinese) from stu;
                        select sum(math)+sum(english)+sum(chinese) from stu;
                       
                    统计一个班级语文成绩平均分
                        select sum(chinese) / count(*) from stu;
                   
                * avg        平均数
                    练习:
                    求一个班级数学平均分?
                        select avg(math) from stu;
                    求一个班级总分平均分
                        select avg(ifnull(math,0)+english+chinese) from stu;
                       
                * max        最大值
                    select max(math) from stu;
                * min        最小值
                    select min(math) from stu;
                   
                   
                * group by    分组(一起使用)    条件过滤需要是having,不能使用where,
                    练习:对订单表中商品归类后,显示每一类商品的总价.
                        select product,count(*),sum(price) from orders group by product;
                       
                    练习:查询购买了几类商品,并且每类总价大于100的商品   
                        select product,sum(price) from orders group by product having sum(price) > 100;
                   
                   
        * 小结 select 语句 : S-F-W-G-H-O 组合 select ... from ... where ... group by... having... order by ... ;
                    顺序不能改变

create table orders(
    id int,
    product varchar(20),
    price float
);

insert into orders(id,product,price) values(1,'电视',900);
insert into orders(id,product,price) values(2,'洗衣机',100);
insert into orders(id,product,price) values(3,'洗衣粉',90);
insert into orders(id,product,price) values(4,'桔子',9);
insert into orders(id,product,price) values(5,'洗衣粉',90);
insert into orders(id,product,price) values(6,'电视',900);
 下面是对 group by的具体的理解

 

猜你喜欢

转载自1193355343.iteye.com/blog/2372472