Mysql
超全MySQL学习笔记,三天就可以学会熟练运用SQL语句,干货满满,文章末尾有相应的练习题,可以多练练加深印象,希望我的文章对你有所帮助

一.服务器

1.什么是服务器?用于提供共享资源文件的计算机。一般通过协议 + IP + 端口访问。2.服务器的分类a)软件为应用提供运行环境。暴露出一些规范性的接口用于实现或者连接。获取应用的服务。b)硬件性能卓越的计算机。没有图形界面和鼠标。

二.数据服务器

1.什么是数据库?用于持久化由应用产生的数据。对数据进行,分类,管理,操作的一个数据仓库。
2.什么是mysql?Mysql的前身是由瑞典的 Mysql AB公司开发的一款服务器。然后由Oracle公司收购。分为社区版,和企业版【收费】。特点:体积小,运行快,免费,支持事务的一款轻量级数据库服务器。阿里巴巴使用的就是Mysql。

三.基本使用

1.root账号超级管理员用户。这个用户可以对mysql做任何的操作。比如:分配账号,分配权限....
2.连接Mysqla)双击快捷方式。b)使用命令连接mysql打开DOS窗口。mysql -账号 -p密码 -hIp例如:mysql -uroot -p123456 -h127.0.0.13.查看数据库和表Mysql数据库服务器默认提供了一些已经存在的数据库。输入:show databases;4.数据库数据库的本质就是在磁盘上的一个文件夹。该文件夹中存放的是表文件。5.表文件表文件就是存储数据的文件。该文件以.frm为后缀,只能被mysql解析。

四.SQL

1.什么是SQL语句?Structured Query Language.【结构化查询语句】针对数据库操作使用的一种语言。它是一种结构化的操作语言。对数据库的数据进行增、删、改、查的操作。
2.SQL语句的分类DDL:数据定义语句Data Definition Language定义数据的结构。比如:库,表,列,约束...关键字:create  alter  drop   show创建   修改   删除    查询DML:数据操作语句Data Manipulation Language操作数据本身:关键字:insert  delete  update增         删      改DQL:数据查询语句Data Query Language用于查询和过滤数据。关键字:select where....DCL:数据控制语句Data Control Language用于对权限的控制,使用root账户分配其它的账号和设置权限访问。关键字:grant revoke设置        回收一般会给DBA使用。DBA是数据库管理员一般中大的型的公司都会设置DBA,专门用于管理公司所有数据库的权限。

1.DDL

1.创建库
语法:方式一create database gz2205 charset=utf8;方式二create database if not exists gz2205 charset=utf8;2.删除数据库
语法:方式一drop database gz2205;方式二drop database if exists gz2205;3.查看数据库
语法:show databases;4.选择使用的数据库
语法:use 数据库名称;5.创建表
语法:方式一create table aaa(k1 char(10),k2 int,k3 double,k4 datetime);方式二create table if not exists aaa(k1 char(10),k2 int,k3 double,k4 datetime);
什么是表?是一个包含行和列的数据集。6.删除表
语法:方式一drop table aaa;方式二drop table if exists aaa;7.查看数据库有哪些表
语法:show tables;8.查看表结构
语法:desc 表名;9.修改表结构
  • 添加一个新列

    语法:alter table 表名 add 列名 数据类型;
    例子:alter table aaa add k5 text;
    
  • 修改列的数据类型

    语法:alter table 表名 modify 列名 数据类型;
    例子:alter table aaa modify k1 enum('1','2');
    
  • 改列的名称

    语法:alter table 表名 change 原列名 新列名 数据类型
    例子:alter table aaa change k1 dataStatus char(1);
    
  • 改表的名称

    语法:alter table 表名 rename 新表名;
    例子:alter table aaa rename bbb;
    
  • 删除表

    语法:drop table 表名;
    例子:drop table bbb;
    

2.DML

  • 插入一条新的数据

    语法:方式一 选取指定的列insert into 表名(列名1,列名2....) values(值1,值2....);方式二 全列插入insert into 表名 values(值1,值2....);方式三  多行插入insert into 表名(列名1,列名2....) values(值1,值2....),(值1,值2....)....;例子:方式一 选取指定的列insert into aaa(k1,k4) values("值1",now());方式二 全列插入insert into aaa values("值1",2,3,now());方式三  多行插入insert into aaa(k2,k3) values(10,11),(12,13),(14,15);
    
  • 删除数据

    语法:delete from 表名 where 过滤条件;例子:delete from aaa where k3 = 15;注意:删除数据是危险操作,需要添加条件进行过滤。
    
  • 修改数据

    语法:update 表名 set 列名1=值1,列名2=值2... where 过滤条件;
    例子:update aaa set k1='值1',k4='1998-07-17 01:02:00' where k3=15;
    

五.数据类型

Mysql将数据类型划分成3大类:
1.数值型
2.时间日期类型
3.字符串类型

1.数值类型

  • 整数型

    tinyint      迷你型     一个字节
    smallint    小类型     二个字节
    mediumint   中类型     三个字节
    int         标准型     四个字节        【记住】
    bigint      大类型     八个字节        【记住】
    
    create table my_number(k1 tinyint,k2 smallint,k3 mediumint,k4 int,k5 bigint
    );---正常插入
    insert into my_number values(127,32678,1000000,214765210,100000000000);---错误: Out of range value for column 'k1' at row 1   k1列的值超出范围
    insert into my_number values(128,32678,1000000,214765210,100000000000);
    
  • 浮点型

    1.float           单精度     7个小数范围      四个字节
    2.double        双精度     11个小数范围     八个字节
    3.decimal       固定精度   绝对保证不变     八个字节
    
    create table my_decimal(f1 float(25,20),d1 double(25,20),d2 decimal(25,20)
    );--插入flost类型的数据
    insert into my_decimal(f1) values(99999.9147482285978796512);
    --插入double类型的数据
    insert into my_decimal(d1) values(99999.9147482285978796512);
    --插入decimal类型的数据
    insert into my_decimal(d2) values(99999.9147482285978796512);
    

2.时间日期类型

datetime 年月日时分秒      公园元年开始       农历时间
date        年月日
time        时分秒
year        年份
timestamp   年月日时分秒      格林威治时间开始    1970-01-01 08:00:00
create table my_date_time(d1 datetime,   d2 date,d3 time,d4 year,d5 timestamp
);
---正常插入
insert into my_date_time values(now(),now(),now(),'1998',now());---非正常插入:因为超出格林威治的时间。
insert into my_date_time values('1949-10-01 10:00:00',now(),now(),'1998','1970-01-01 07:59:59');---正常插入
insert into my_date_time values('1949-10-01 10:00:00',now(),now(),'1998','1970-01-01 08:01:00');

3.字符串类型

mysql将字符串类型分类6类:
1.char定长类型:在分配空间时,分配的空间就是指定的长度。不管值的空间多大,所占用的磁盘空间时固定的。比如:一个中文  占用8个字节char(20) 占用40个字节
2.varchar变长类型:在分配空间时,分配的空间是指定的长度。但是最终使用的空间取决于数据库所插入的数据的长度。比如:一个中文          占用8个字节varchar(20)      占用8个字节
3.text文本类型:一般字符数量超过255个,一般使用text类型。4.blob二进制文本类型:已经很少使用,一般存储图片,多媒体。可以存放二进制的类型。
5.enum枚举类型:范举一个或者多个具体的数据。用户所插入的内容不能超出所枚举的数据。比如:sex enum('男','女','未知','保密');
6.set集合类型:与枚举类似。范举一些指定的数据,用户在插入数据的时候不能违背集合中的数据。比如:hobbys set('健身','钱','工作','打游戏'); 以上这些类型全都是字符串类型。
create table my_string(s1 char(20),s2 varchar(20),s3 text,s4 blob,s5 enum('男','女','未知','保密'),s6 set('健身','钱','工作','打游戏')
);---正常插入
insert into my_string values('我是一个中文',"我是一个好人","新闻..",'随便写一些东西','男','健身,钱,打游戏');

解决Mysql不能插入中文的问题:

在Mysql安装目录中,找到 my.ini 的配置文件。
修改my.ini 文件时,如果没有权限,则复制到桌面进行修改,
然后在将修改后的文件覆盖到Mysql安装目录下。修改:57  default-character-set=GBK81  character-set-server=GBK

六. 查询操作

1.初始化数据

将init.sql 文件放入磁盘的某个位置。在DOS窗口出入:source 文件地址;

2.表结构的介绍

emp表【员工表】

列名 类型 描述
EMPNO int(4) 员工编号
ENAME varchar(10) 员工姓名
JOB varchar(9) 职位、工作
MGR int(4) 领导的编号
HIREDATE date 入职时间
SAL double 工资
COMM int(7) 奖金
DEPTNO int(2) 部门编号

dept【部门表】

列名 类型 描述
DEPTNO int(2) 部门编号
DNAME varchar(14) 部门名称
LOC varchar(13) 部门地址

salgrade【工资等级表】

列名 类型 描述
GRADE int(11) 等级
LOSAL int(11) 工资下限
HISAL int(11) 工资上限

3.基础查询

  • 查询所有数据

    select * from emp;
    
  • 限定查询

    关键字:where 该关键字用于过滤查询条件的。查询工资大于1500元的员工的信息
    select * from emp where sal > 1500;
    
  • 四则运算

    + - * /查询名字为smith的员工每个月的总收入?
    select sal + comm from emp where ename = 'smith';在Mysql中,任何值与null参与运算得到的都是null。解决运算过程中与null值参与运算:
    select sal + ifnull(comm,0) from emp where ename = 'smith';ifnull(k1,v1) 如果k1是空的则被替换成v1;
    
  • 运算符

    > < >= <=  =   !=   <>
    
  • 关键字

    1. is null

      --查询没有奖金的员工的信息。
      select * from emp where comm is null;SQL语句的执行:
      1.from      确定数据源的位置。
      2.where     将加载到内存的数据进行过滤。
      3.select    将from指向文件的数据加载到内存。
      
    2. is not null

      --查询有奖金的员工的信息。
      select * from emp where comm is not null;
      
    3. and

      --查询工资在1500 - 3000之间的员工的信息
      select * from emp where sal >=1500 and sal <= 3000;
      
    4. or

      --查询从事销售【SALESMAN】工作,或者工资大于等于2000元的员
      ---工的信息。
      select * from emp where job = 'SALESMAN' or sal >= 2000;
      
    5. not

      ---查询从事非销售工作,并且工资不小于1500的员工的编号,
      ---姓名,职位,工资,入职时间。
      selectempno,ename,job,sal,hiredate
      fromemp
      where(not job = 'SALESMAN')
      and(not sal <= 1500);
      
    6. between and

      --查询工资在1500 - 3000之间的员工的信息
      select *
      from emp
      where sal between 1500 and 3000;
      
    7. in

      ---查询编号为7499 7902 7788的员工的信息。
      select*
      fromemp
      whereempno in(7499,7902,7788,8888);等同于
      select*
      fromemp
      whereempno = 7499
      orempno = 7902
      orempno = 7788
      orempno = 8888;
      
    8. not in

      ---查询编号不为7499 7902 7788的员工的信息。
      select*
      fromemp
      whereempno not in(7499,7902,7788,8888);
      
    9. like

      模糊查询,一般需要结合2个通配符使用。
      a) _ 代表一个任意的字符
      b) % 代表任意多个字符---查询名字中包含S的雇员的信息。
      select*
      fromemp
      whereename
      like'%s%';---查询第二个字母是M的员工信息。
      select*
      fromemp
      whereename
      like'__M%';
      

      or
      empno = 7902
      or
      empno = 7788
      or
      empno = 8888;

      
      
    10. not in

      ---查询编号不为7499 7902 7788的员工的信息。
      select*
      fromemp
      whereempno not in(7499,7902,7788,8888);
      
    11. like

      模糊查询,一般需要结合2个通配符使用。
      a) _ 代表一个任意的字符
      b) % 代表任意多个字符---查询名字中包含S的雇员的信息。
      select*
      fromemp
      whereename
      like'%s%';---查询第二个字母是M的员工信息。
      select*
      fromemp
      whereename
      like'__M%';
      

七、练习(练习才能让你印象加深)

复制下面的sql语句到你的mysql编辑器里,我这里用的是mysql workbench
点击运行,会创建好数据库和表。

  1. 查看EMP表中部门号为10的员工的姓名,职位,参加工作时间,工资。
  2. 计算每个员工的年薪,要求输出员工姓名,年薪。
  3. 查询每个员工每个月拿到的总金额(sal为工资,comm为补助)。
  4. 显示职位是主管(manager)的员工的姓名,工资。
  5. 显示第3个字符为大写R的所有员工的姓名及工资。
  6. 显示职位为销售员(SALESMAN)或主管(MANAGER)的员工的姓名,工资,职位。
  7. 显示所有没有补助的员工的姓名。
  8. 显示有补助的员工的姓名,工资,补助。
  9. 查询出部门编号为30的所有员工
    10.所有销售员的姓名、编号和部门编号。
    11.找出奖金高于工资的员工。
    12.找出奖金高于工资60%的员工。
    13.找出部门编号为10中所有经理,和部门编号为20中所有销售员的详细资料。
    14.找出部门编号为10中所有经理,部门编号为20中所有销售员,还有即不是经理又不是销售员但其工资大或等于2000的所有员工详细资料。
    15.无奖金或奖金低于1000的员工。
    16.查询名字由三个字组成的员工。
    17.查询2000年入职的员工。
    18.查询所有员工详细信息,用编号升序排序
    19.查询所有员工详细信息,用工资降序排序,如果工资相同使用入职日期升序排列
    20.查询姓名不包含M,且工资大于1500,或年薪不低于30000的雇员编号、姓名、工资、年薪,按雇员姓名降序排列
drop database if exists GZ2205;
create database GZ2205 charset utf8;
use GZ2205;create table BONUS
(ENAME VARCHAR(10),JOB   VARCHAR(9),SAL   int,COMM  int
) engine=InnoDB default charset=utf8;create table DEPT
(DEPTNO int(2) not null,DNAME  VARCHAR(14),LOC    VARCHAR(13)
) engine=InnoDB default charset=utf8;create table EMP
(EMPNO    int(4) not null,ENAME    VARCHAR(10),JOB      VARCHAR(9),MGR      int(4),HIREDATE DATE,SAL      double,COMM     int(7),DEPTNO   int(2)
) engine=InnoDB default charset=utf8;create table SALGRADE
(GRADE int,LOSAL int,HISAL int
) engine=InnoDB default charset=utf8;insert into DEPT (DEPTNO, DNAME, LOC)
values (10, 'ACCOUNTING', 'NEW YORK');
insert into DEPT (DEPTNO, DNAME, LOC)
values (20, 'RESEARCH', 'DALLAS');
insert into DEPT (DEPTNO, DNAME, LOC)
values (30, 'SALES', 'CHICAGO');
insert into DEPT (DEPTNO, DNAME, LOC)
values (40, 'OPERATIONS', 'BOSTON');
commit;insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7369, 'SMITH', 'CLERK', 7902, '19800608', 800, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7499, 'ALLEN', 'SALESMAN', 7698, '19810605',1600, 300, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7521, 'WARD', 'SALESMAN', 7698, '19830608',  1250, 500, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7566, 'JONES', 'MANAGER', 7839, '19810608',  2975, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7654, 'MARTIN', 'SALESMAN', 7698, '19860608',  1250, 1400, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7698, 'BLAKE', 'MANAGER', 7839, '19880608',  2850, null, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7782, 'CLARK', 'MANAGER', 7839, '19890603', 2450, null, 10);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7788, 'SCOTT', 'ANALYST', 7566, '19870602',  3000, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7839, 'KING', 'PRESIDENT', null, '19810618',  5000, null, 10);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7844, 'TURNER', 'SALESMAN', 7698, '19820628', 1500, 0, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7876, 'ADAMS', 'CLERK', 7788, '19870628', 1100, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7900, 'JAMES', 'CLERK', 7698, '19810608', 950, null, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7902, 'FORD', 'ANALYST', 7566, '19820308', 3000, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7934, 'MILLER', 'CLERK', 7782, '19820316',  1300, null, 10);
commit;
insert into SALGRADE (GRADE, LOSAL, HISAL)
values (1, 700, 1200);
insert into SALGRADE (GRADE, LOSAL, HISAL)
values (2, 1201, 1400);
insert into SALGRADE (GRADE, LOSAL, HISAL)
values (3, 1401, 2000);
insert into SALGRADE (GRADE, LOSAL, HISAL)
values (4, 2001, 3000);
insert into SALGRADE (GRADE, LOSAL, HISAL)
values (5, 3001, 9999);
commit;

Mysql学习笔记day1 --三天学完mysql所有知识点相关推荐

  1. Mysql学习笔记day3 --三天学完mysql所有知识点

    mysql 一.练习 列出至少有4个员工的部门名称 selectd.dname 部门名称,count(e.empno) 部门人数 fromemp e join dept d one.deptno = ...

  2. PHP + MySQL 学习笔记(三)--- 分页显示 MySQL 资料表,使用 PHP 程式做分页 page 画面输出,PHP\HTML\MySQL 的穿插使用

    我在 "PHP + MySQL 学习笔记(一)- 延续前期 HTML + CSS 规划 插入 PHP 程式做画面输出" 这篇笔记里做了一个卜卦的 HTML 画面,也做了一个 MyS ...

  3. Mysql学习笔记(一)学完就出师系列哈哈哈

    本篇笔记是参照书籍<SQL基础教程>撰写的,MICK著,孙淼.罗勇译 文章目录 第一章 数据库和SQL 1.1 DBMS 1.2 SQL 第二章 查询基础 2.1 select语句基础 2 ...

  4. Mysql学习笔记(二)学完真可以出师系列第二弹

    文章目录 第五章 5.1 视图 5.2 子查询 5.3 关联子查询 第六章 函数 谓词 case表达式 6.1 函数 6.2 谓词 6.3 case表达式 第七章 集合运算 7.1 表的加减法 7.2 ...

  5. Mysql学习笔记(三)运算符和控制流函数

    原文:Mysql学习笔记(三)运算符和控制流函数 本章学习内容: 1.操作符 2.控制流程函数 操作符: i.圆括号.. 简单的介绍一下圆括号,圆括号的使用的目的是规定计算表达式的顺序...这个想必大 ...

  6. MySQL学习笔记01【数据库概念、MySQL安装与使用】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  7. MySQL学习笔记(基础篇未完待补充)

    一.MySQL数据库基 目录 一.MySQL数据库基础篇 1.数据库概述与MySQL安装篇 第1章:数据库概述 1.为什么要使用数据库 2. 数据库与数据库管理系统 2.2 数据库与数据库管理系统的关 ...

  8. 分享:MySQL 学习笔记(三)

    四,锁的算法 我们先来看一下我们测试用的表,t2,这张表有一个主键索引.我们插入了 4 行数据,主键值分别是 1.4.7.10.为了让大家真正理解这三种行锁算法的区别,我们需要了解一下三种范围的概念. ...

  9. 阿里P8的《MySQL学习笔记》火了,完整版开放下载!

    伴找我要一些 MySQL基础资料,于是我翻箱倒柜,把这份阿里大牛总结的 MySQL 归纳笔记找出来,免费共享给大家! 据说有小伙伴靠这份笔记顺利进入 BAT 哦,所以一定要好好学习这份资料! 资料介绍 ...

最新文章

  1. 如果要将对象用作Map中的key,需要注意什么
  2. 指尖上的敏捷 – leangoo微信版全新上线
  3. If one day
  4. 皮一皮:让我们一起,走近科学!
  5. Flink从入门到精通100篇(二十三)-Flink实战应用案例:如何清理过期的 Checkpoint 目录?
  6. vue 3.0 正式版_Vuejs 3 Release:One Piece. Vuejs 3.0 正式版发布!代号:海贼王
  7. 科技部部长:不唯论文,不是讲不要论文
  8. java去掉的行_Java实现去掉每行的行号
  9. python:批量移动指定文件到指定文件夹(模板)
  10. 对 数组[i].index=i的理解
  11. micropython教程nucleo-f767zi开发板_micropython移植到正点原子F767的問題
  12. 使用 VLD 检测内存泄漏
  13. 【人脸关键点】——PFLD人脸关键点检测解读
  14. Rasa3 domain官方文档翻译
  15. python plot线形和颜色
  16. 学生管理系统IPO图_关于继续开展2019年度辅导员工作考核学生评议的通知
  17. Java手机号码工具类(判断运营商、获取归属地)
  18. Clover 驱动文件夹_黑苹果(clover文件夹中各个文件的主要功能)
  19. Linux下服务器基本环境搭建步骤详解(三种软件安装方式)
  20. 通用技术课件_优化—让我们做得更好 | 高中通用技术优质课展示

热门文章

  1. 174267-71-1,DTPA-tetra (t-Bu ester),大环配体化合物介绍
  2. 品牌对比 | 康师傅 VS 统一
  3. DA14580-01UNA蓝牙低功耗4.2 SoC 无线收发器和基带处理器DIALOG
  4. 如何防止ARP攻击?
  5. c语言缓冲区溢出例子,经典缓冲区溢出小例子
  6. 数据结构--全国交通咨询系统(C语言)
  7. StackOverflowError问题
  8. laocchang的Linux随学随记
  9. gateway 转发weboskct 报错 ClassCastException
  10. 【180609】经典SQL语句大全(CHM)