MySQL日常操作

《MySQL日常操作》要点:
本文介绍了MySQL日常操作,希望对您有用。如果有疑问,可以联系我们。

安装 MySQL 5.5.27 x64

  1. 一直 next

  2. 勾选使用图形化配置

  1. 选择 尽量占用最大内存

  2. 选择 多功能型

  3. 选择 最多人数

  4. 选择 utf8 字符集

  5. 选择 添加path

删除

  1. 停止MySQL

  2. 添加删除程序中卸载MySQL

  3. 到安装目录删除MySQL

登陆

>mysql -u root -p

退出

> quit

修改密码

  1. 停止服务

    1. win + r

    2. services.msc

    3. 找到 MySQL 停止服务

  2. 进入 CDM

    1. 在cmd下 输入 mysqld –skip-grant-tables 启动服务器 光标不动 (不要关闭该窗口)

    2. 新打开cmd 输入mysql -u root -p 不需要密码

    3. >use mysql;

    4. >update user set password=password(‘abc’) WHERE User=’root’;

    5. 关闭两个cmd窗口 在任务管理器结束mysqld 进程

    6. 在服务管理页面 重启mysql 服务

    7. 密码修改完成

SQL

SHOW

1. 查看当前数据库服务器中的所有数据库

DDL:操作数据库、表、列等

使用的关键字:CREATE、 ALTER、 DROP

操作数据库

CREATE

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS]

ALTER

 ALTER DATABASE [IF NOT EXISTS] db_name

SELECT

1. 查看当前使用的数据库

DROP

  1. 删除前面创建的mydb3数据库

    drop database mydb3;
  2. 找到MySQL 数据库存放位置 data,删除对应的数据库

RENAME

找到MySQL 数据库存放位置 data,将数据库改为对应的名称

操作数据表

创建表

  • 语法

    create table 表名(
  • 常用数据类型:

     int:整型
  • 练习

  1. 创建员工表的数据字典

  2. 创建员工表的SQL 语句

MySQL日常操作

MySQL日常操作

查询表信息

  1. 当前数据库中的所有表

    >SHOW TABLES;
  2. 查看表的字段信息

    >DESC employee;

MySQL日常操作

修改表

追加

ALTER TABLE table_name

修改

ALTER TABLE table_name

删除列

ALTER TABLE table_name

修改表名

Rename TABLE 表名 to 新表名;

修改表的字符集

ALTER TABLE table_name character set utf8;

删除表

DROP TABLE user;
  • 练习

  • 在上面员工表的基本上增加一个image列.

    ALTER TABLE employee ADD image blob;
  • 修改job列,使其长度为60.

    ALTER TABLE employee MODIFY job varchar(60);
  • 删除image列.

    ALTER TABLE employee DROP image;
  • 表名改为user.

    RENAME TABLE employee TO user;
  • 修改表的字符集为gbk

    ALTER TABLE user CHARACTER SET gbk;
  • 列名name修改为username

    ALTER TABLE user CHANGE name username varchar(100);
  • 查看表格的创建细节

    SHOW CREATE TABLE user\G;

MySQL日常操作

DML操作(重要)

  1. 查询表中的所有数据

    SELECT * FROM 表名;
  2. DML是对 表中的数据 进行增、删、改的操作.不要与DDL混淆了.

    1. INSERT

    2. UPDATE

    3. DELETE

  3. 小知识:

    1. 在mysql中,字符串类型和日期类型 都要用 单引号 括起来.例如:’tom’ ‘2015-09-04’

    2. 空值:null (不占内存) “”(占内存)

  4. 使用 MySQL 客户端工具 SQLyog

插入操作:INSERT:

  1. 语法:

    INSERT INTO 表名(列名1,列名2 ...)VALUES(列值1,列值2...);
  2. 注意:

  1. 列名 与 列值 的类型、个数、顺序要一一对应.

  2. 可以把 列名 当做java中的 形参,把列值当做 实参.

  3. 值不要超出 列 定义的长度.

  4. 如果插入 空值,请使用 null

  5. 插入的日期和字符一样,都使用引号括起来.

  1. 练习

    -- 创建表 emp

修改操作 UPDATE:

  1. 语法:

    UPDATE 表名 SET 列名1=列值1,列名2=列值2 ... [WHERE 列名=值]
  2. 练习:

    -- 将所有员工薪水修改为5000元.

删除操作 DELETE:

  1. 语法 :

    DELETE FROM 表名 [WHERE 列名=值]
  2. 练习 :

    -- 删除表中名称为’zs’的记录.
  3. DELETE 与 TRUNCATE 的区别

    1. DELETE 删除表中的数据,表结构还在;删除后的数据可以找回

    2. TRUNCATE 删除是把表直接DROP掉,然后再创建一个同样的新表.

    3. TRUNCATE 删除的数据不能找回.执行速度比DELETE快.

RENAME TABLE命令语法:

  1. 使用命令:

    RENAME TABLE db_name.table1 TO new_db_name.table1,
  2. 找到MySQL 数据库存放位置 data,找到对应的数据库,找到对应的xx.frm 文件,修改名称

DQL数据查询语言 (重要)

  1. 数据库执行 DQL语句 不会对数据进行改变,而是让数据库发送结果集给客户端.

    查询返回的结果集是一张虚拟表.

  2. 查询关键字:SELECT

  3. 语法:

    SELECT 列名 FROM表名 [WHERE --> GROUP BY -->HAVING--> ORDER BY]
  4. 语法详细说明:

     SELECT selection_list /*要查询的列名称*/

根据数据字典 创建表

学生表:stu

MySQL日常操作

-- 创建学生表

MySQL日常操作

雇员表:emp

MySQL日常操作

-- 创建雇员表

MySQL日常操作

部门表:dept

MySQL日常操作

-- 创建部门表

MySQL日常操作

基础查询

  1. 查询所有列

    SELECT * FROM stu;

  2. 查询指定列

    SELECT sid,sname,age FROM stu;

MySQL日常操作

MySQL日常操作

条件查询(操作stu表)

  • 条件查询介绍

  • =、!=、<>、<、<=、>、>=;

  • BETWEEN…AND;

  • IN(set);

  • IS NULL; IS NOT NULL

  • AND;

  • OR;

  • NOT;

  • 条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:

2.2 查询性别为女,并且年龄大于等于50的记录

SELECT * FROM stu WHERE gender=’female’ AND age>=50;

MySQL日常操作

2.3 查询学号为S_1001,或者姓名为liSi的记录

SELECT * FROM stu WHERE sid=’S_1001’ OR sname=’lisi’;

MySQL日常操作

2.4 查询学号为S_1001,S_1002,S_1003的记录

SELECT * FROM stu WHERE sid=’S_1001’ OR sid=’S_1002’ OR sid=’S_1003’;

SELECT * FROM stu WHERE sid IN(‘S_1001’,’S_1002’,’S_1003’);

MySQL日常操作

2.5 查询学号不是S_1001,S_1003的记录

SELECT * FROM stu WHERE sid NOT IN(‘S_1001’,’S_1003’);

MySQL日常操作

2.6 查询年龄为null的记录

SELECT * FROM stu WHERE age IS NULL;

SELECT * FROM stu WHERE age IS NOT NULL;

MySQL日常操作

2.7 查询年龄在20到40之间的学生记录

SELECT * FROM stu WHERE age>=20 AND age<=40;

SELECT * FROM stu WHERE age BETWEEN 20 AND 40;

MySQL日常操作

2.8 查询性别非男的学生记录

SELECT * FROM stu WHERE gender=’female’;

SELECT * FROM stu WHERE gender!=’male’;

SELECT * FROM stu WHERE gender<>’male’;

MySQL日常操作

2.9 查询姓名不为null的学生记录

SELECT * FROM stu WHERE sname IS NOT NULL;

MySQL日常操作

模糊查询(操作stu表)

  • 当想查询姓名中包含a字母的学生时就需要使用模糊查询了.模糊查询需要使用关键字LIKE.

  • 通配符:

    _ 任意一个字符

3.1 查询姓名由5个字母构成的学生记录

SELECT * FROM stu WHERE sname LIKE ‘_‘;

– 模糊查询必须使用LIKE关键字.其中 “”匹配任意一个字母,5个“”表示5个任意字母.

MySQL日常操作

3.2 查询姓名由5个字母构成,并且第5个字母为“i”的学生记录

SELECT * FROM stu WHERE sname LIKE ‘____i’;

MySQL日常操作

3.3 查询姓名以“z”开头的学生记录

SELECT * FROM stu WHERE sname LIKE ‘z%’;

– 其中“%”匹配0~n个任何字母.

MySQL日常操作

3.4 查询姓名中第2个字母为“i”的学生记录

SELECT * FROM stu WHERE sname LIKE ‘_i%’;

MySQL日常操作

3.5 查询姓名中包含“a”字母的学生记录

SELECT * FROM stu WHERE sname LIKE ‘%a%’;

MySQL日常操作

字段控制查询(操作emp表)

4.1 去除重复记录

去除重复记录(两行或两行以上记录中系列的上的数据都相同),例如emp表中sal字段就存在相同的记录.当只查询emp表的sal字段时,那么会出现重复记录,那么想去除重复记录,需要使用DISTINCT:

SELECT DISTINCT sal FROM emp;

MySQL日常操作

4.2 查看雇员的月薪与佣金之和

因为sal和comm两列的类型都是数值类型,所以可以做加运算.如果sal或comm中有一个字段不是数值类型,那么会出错.

SELECT *,sal+comm FROM emp;

MySQL日常操作

comm列有很多记录的值为NULL,因为任何东西与NULL相加结果还是NULL,所以结算结果可能会出现NULL.下面使用了把NULL转换成数值0的函数IFNULL:

SELECT *,sal+IFNULL(comm,0) FROM emp;

MySQL日常操作

4.3 给列名添加别名

在上面查询中出现列名为sal+IFNULL(comm,0),这很不美观,现在我们给这一列给出一个别名,为total:

SELECT *,0) AS total FROM emp;

MySQL日常操作

给列起别名时,是可以省略AS关键字的:

SELECT *,0) total FROM emp;

MySQL日常操作

排序 (操作stu表)

  • order by 列名 asc(默认) desc

5.1 查询所有学生记录,按年龄升序排序

SELECT * FROM stu ORDER BY sage ASC;

或者(默认)

SELECT * FROM stu ORDER BY sage;

MySQL日常操作

5.2 查询所有学生记录,按年龄降序排序

SELECT * FROM stu ORDER BY age DESC;

MySQL日常操作

5.3 查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序

SELECT * FROM emp ORDER BY sal DESC,empno ASC;

MySQL日常操作

聚合函数

  • 聚合函数是用来做纵向运算的函数:

  • COUNT():统计指定列不为NULL的记录行数;

  • MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;

  • MIN():计算指定列的最小值,那么使用字符串排序运算;

  • SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;

  • AVG():计算指定列的平均值,那么计算结果为0;

COUNT()

当需要纵向统计时可以使用COUNT().

查询emp表中记录数:

SELECT COUNT(*) AS cnt FROM emp;

MySQL日常操作

查询emp表中有佣金的人数:

SELECT COUNT(comm) cnt FROM emp;

注意,因为count()函数中给出的是comm列,那么只统计comm列非NULL的行数.

MySQL日常操作

查询emp表中月薪大于2500的人数:

SELECT COUNT(*) FROM emp WHERE sal > 2500;

MySQL日常操作

统计月薪与佣金之和大于2500元的人数:

SELECT COUNT(*) AS cnt FROM emp WHERE sal+IFNULL(comm,0) > 2500;

MySQL日常操作

查询有佣金的人数,有领导的人数:

SELECT COUNT(comm),COUNT(mgr) FROM emp;

MySQL日常操作

SUM和AVG

当需要纵向求和时使用sum()函数.

查询所有雇员月薪和:

SELECT SUM(sal) FROM emp;

MySQL日常操作

查询所有雇员月薪和,以及所有雇员佣金和:

SELECT SUM(sal),SUM(comm) FROM emp;

MySQL日常操作

查询所有雇员月薪+佣金和:

SELECT SUM(sal+IFNULL(comm,0)) FROM emp;

或者

SELECT SUM(sal)+SUM(comm) FROM emp;

MySQL日常操作

统计所有员工平均工资:

SELECT AVG(sal) FROM emp;

MySQL日常操作

MAX和MIN

查询最高工资和最低工资:

SELECT MAX(sal),MIN(sal) FROM emp;

MySQL日常操作

分组查询

  • 当需要分组查询时需要使用GROUP BY子句,例如查询每个部门的工资和,这说明要使用部门来分组.

注:凡和聚合函数同时出现的列名,一定要写在group by 之后

MySQL日常操作

  • 例如: 查询男生,女生的人数

MySQL日常操作

此处需要去除 gender 为 NULL 的数据

MySQL日常操作

SELECT COUNT(*) FROM stu WHERE gender IS NOT NULL GROUP BY gender;

MySQL日常操作

分组查询

查询每个部门的部门编号和每个部门的工资和:

SELECT deptno,SUM(sal)

FROM emp

GROUP BY deptno;

MySQL日常操作

查询每个部门的部门编号以及每个部门的人数:

SELECT deptno,COUNT(*)

FROM emp

GROUP BY deptno;

MySQL日常操作

查询每个部门的部门编号以及每个部门工资大于1500的人数:

SELECT deptno,COUNT(*)

FROM emp

WHERE sal>1500

GROUP BY deptno;

MySQL日常操作

HAVING子句

查询工资总和大于9000的部门编号以及工资和:

  • 先查出所有部门编号和工资的和

    SELECT deptno,SUM(sal)

    FROM emp

    GROUP BY deptno;

MySQL日常操作

  • 再筛选出工资总和大于9000的

    SELECT deptno,SUM(sal)

    FROM emp

    GROUP BY deptno

    HAVING SUM(sal) > 9000;

MySQL日常操作

查询工资大于1500的,工资总和大于6000的部门编号以及工资和:

  • 先求出 工资>1500 的部门编号和工资和

    SELECT deptno,SUM(sal) FROM emp WHERE sal>1500 GROUP BY deptno ;  

MySQL日常操作

  • 再筛选 工资综合大于6000的部门编号

    SELECT deptno,SUM(sal) FROM emp WHERE sal>1500 GROUP BY deptno HAVING SUM(sal)>6000;

MySQL日常操作

注:

having与where的区别:

  1. having是在分组后对数据进行过滤.

    where是在分组前对数据进行过滤

  2. having后面可以使用聚合函数(统计函数)

    where后面不可以使用聚合函数

  3. where 是分组前记录的条件,如果某行记录没有满足where子句的条件,那么这行记录不会参加分组;而 having 是分组后数据的约束.

图解:

MySQL日常操作

LIMIT

LIMIT用来限定查询结果的起始行,以及总行数.

查询5行记录,起始行从0开始

SELECT * FROM emp LIMIT 0,5;

注意: 起始行从0开始,即第一行开始!

原表:

MySQL日常操作

limit 0,5 后

MySQL日常操作

查询10行记录,起始行从3开始

SELECT * FROM emp LIMIT 3,10;

MySQL日常操作

分页查询

如果一页记录为10条,希望查看第3页记录应该怎么查呢?

1. 第一页记录起始行为0,一共查询10行;

2. 第二页记录起始行为10,一共查询10行;

3. 第三页记录起始行为20,一共查询10行;

DQL 书写顺序和执行顺序

查询语句书写顺序:

select – from- where - group by- having - order by - limit

查询语句执行顺序:

from - where - group by - having - select - order by - limit

编程之家PHP培训学院每天发布《MySQL日常操作》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。

相关文章

navicat查看某个表的所有字段的详细信息 navicat设计表只能一...
文章浏览阅读4.3k次。转载请把头部出处链接和尾部二维码一起...
文章浏览阅读488次。恢复步骤概要备份frm、ibd文件如果mysql...
文章浏览阅读225次。当MySQL单表记录数过大时,增删改查性能...
文章浏览阅读1.5k次。Mysql创建、删除用户MySql中添加用户,新...
MySQL是一种开源的关系型数据库管理系统,被广泛应用于各类应...