MySQL知识点捕捉

1.数据库概述

2.数据库(DataBase:DB):

            数据库是按照数据数据结构,存储,组织和管理数据的仓库

              ps:存储和管路仓库相当于就在磁盘上操作文件

数据库管理系统:

           是用于专门管理数据库,是一个计算机软件,提供对数据库的简历,维护,查询,和统计等操作

ps:我们一般所说的数据库都是数据库服务器DBMS,指的是数据库的服务端

随着大数据的不断发展,此时出现一种数据库----非关系型数据库,NOSQL数据库

常见的非关系型数据库:

  • 键值存储的数据库:Oracle、DBD、Redis、BeansDB
  • 列式存储的数据库:HBase、Riak
  • 文档型数据库:MongoDB、CouchDB
  • 图形存储的数据库:Neo4J、InfoGrid

关系型数据库

MySQL:是一个典型的关系型的数据库

SQL Server 微软  :全面性高,效率高,界面友好,操作方便,但是不会跨平台,中小企业使用(免费。企业版收费)

DB2:大型的关系型数据库      IMB  :速度快,可靠性好,适用于海量数据,恢复性极强,适用于银行,电力,金融(付费)

Oracle:      甲骨文(Oracle):运行稳定,速度慢,可移植性高,功能齐全,适用于大企业(付费)

MySQl:开源的,体积小,速度快,全面支持SQL,适用于中小企业(完全免费)

SQL:结构化查询语言,是关系型数据库的标准语言

特点:简单,灵活,功能强大

SQL被分为六个部分

  • 数据查询语言(DQL):
  1. 语句也被称为“数据检索语句”,用表中获取数据,确定数据怎样在应用程序显示
  2. SELECT  WHERE [ORDER  BY]  [GRPUPBY  BY]   HAVING
  • 数据操作语言(DML)
  1. 操作数据库使用:INSERT  UDDATE  和DELETE一般都是动词
  • 事务处理语言(TPL)
  1. 它的语句是确保DML语言可以影响其行为BEDIN  COMMIT  和 ROLLBACK
  • 数据控制语言(DCL)
  1. 控制数据的操作GRANT  REVOKE 对单个用户或用户主的数据库的访问
  • 数据定义语言(DDL)
  1. 动词,CREATE和DROP  创建一个表或者删除一个表
  2. DDL语言中也包括查询的一部分
  • 指针(游标)控制语言(CCL)
  1. 它可以操作数据库中的游标位置,通过位置可以单独的进行行的操作
  2. FETCH INTO   和    UPRDATE WHERE CURRENT

书写SQL的规则:

  1. 在数据库中SQL语言的大小不敏感, SELECT/select 。建议大写
  2. SQL语句单行或多行书写
  3. 在SQL语句汇总,关键字不能多行或缩写
  4. 为了可读性,建议关键字大写,其他小写

表的概念:

MySQL是一种关系型数据库,关系型数据库最重要的概念就是表

固定的列数任意的行数组成的关系--->表

数据库中的表,可以看做一个二维表(可以想象成二维数组),每一行都是一个实体

表中的列表示属性,每一行记录数据 就相当于属性的值

先以一个面向对象的思维来看待这张表:
 

public class Student    {

      private  int  stuNO;

      private  String  name;

      private   int  age;

  }

Student  stu = new Student();
stu.setStrNO(10086);

面向对象思维---->关系型数据库  

类                   ----->表

属性               ----->列(属性)

对象               ------>表中一行的数据

我们是不能直接操作表的,因为表示存储到数据库中的,先连接数据库,

安装MySQL:

如何卸载MySQL:

  1. 软件管家直接卸载MySQL
  2. 控制面板--->程序和功能---->卸载MySQL
  3. 在我的电脑中----->C盘下有一个隐藏文件C:\ProgramData\MySQL删除MySQL

登录MySQL

       1.直接登录MySQL

                             1.1.直接通过cmd------->mysql -u root  -p  回车

                             1.2.在开始菜单

  • 常用命令
  1. 查看数据库中有哪些数据库:show databases;
  2. 使用那个数据库:use  对应的数据库名称---->得到一个打印结果
  3. Database  change数据改变成功已经使用到所有使用的数据库
  4. 查询对应数据库中的所有表:show tables
  5. 创建自己的数据库  create database  库的名字
  6. 删除数据库,drop database  库的名称,系统库不能删除:---->一旦库没有了,那么旗下的表都没有了,数据就没了
  7. 只要是命令就建议大写:因为在控制台dos命令下,所以,按方向键上下,可以获取上下次用的命令
  • MySQL的存储引擎
  1. MySQL中的数据用这种不同的技术存储在文件(内存中),这些每一种技术都应用不同的存储机制,索引技巧,锁定水平,并且最终提供的功能也不相同
  2. MyISAM:用于较高的插入查询速度,但是不支持事务,不支持外键,一般不选择这个
  3. InnoDB:支持事务,支持外键,支持行锁定,性能低,一般建议使用
  • MySQL中的常用类型
  1. 整数类型是最常用的,MySQL中存储整数------对应的java数据类型:INT/IN
  2. MySQL以一个可选的显示宽度指示器对SQL中的标准进行扩展,例如指定一个字段INT(6),就可以保证所有包含的数据少于6个的值从数据中检索出来时自动填充空格。需要注意的是使用一个宽度指示器,不会影响字段大小和他存储的范围,一般只是用于指定数字的宽
  3. 小数类型可以存放小数也可以存放整数FLOAT[(S,P)]---->S代表范围(最多有S位数组成),P代表精度(P位小数)。Double[(S,P)]一样
  4. 若使用存储货币,使用DECIMAL(高精度类型),使用方法可以参考double

MySQL的类型        java的数据类型

-----------------------------------------------------------

   FLOAT                     float/Float

   DOUBLE                  double/Double

   DECIMAL               BigDecimal

  • 向MySQL中存储字符串

char(size)定长字符,size指N个字符数,若插入的字符长度超过指定长度,会被截取掉会给一个警告

varchar(size)是一个边长字符,size指N个字符数,若插入的字符长度超过指定长度,会被截取给一个警告

MySQL5之前char和varchar的取值长度都是0-255

但是在5之后,varchar存储范围最大是0-65535

若存储的是一些文章,可以参考存文本存储可以使用TEST系列类型

在MySQL中字符使用的是单引号‘’,相当于java中的String / StringBuffer/无论字符长度多长一律‘  ’引起来

char和varchar的对比:

char(5)---->所占用的空间是5个字节,表示char(5)的固定长度就是五个字节:例如:name  char(5)插入值:‘1’和‘11111’---->都是5个字节,固定的

varchar(5)----->所占用的字节数会随着实际长度增加而逐渐+1,例如:name  char(5)插入值:‘1’是一个字节,‘11’是两个字节

  • MySQL中存储时间和日期
  1. 日期类型:DATETIME
  2. DATE
  3. TIME
  4. YEAR
  5. TIMESTAMP
  6. 在MySQL中存储日期使用 ‘ ’ 引起来,相当于java中Date/Calender
  • MySQL中还可以存储二进制对象
  1. 存放图形声音和映像和视频,二进制对象,0-4G
  2. 但是,在开发中我们一般存储二进制文件保存的路径而非真实的数据
  3. BIT:开发中一般用来存储Boolean类型----->0->false,1->true
  • 操作库:
  • 创建一个数据库 CREATE DATABASES
    创建数据库指定编码集
    CREATE DATABASES  数据库名字  character  set gbk;
    
    查询数据库
     SHOW DATABASES
    查看定义的数据库信息
    SHOW CTEATE database 对应的数据库名称
    +----------+---------------------------------------------------------------+
    | Database | Create Database                                               |
    +----------+---------------------------------------------------------------+
    | mydb2    | CREATE DATABASE `mydb2` /*!40100 DEFAULT CHARACTER SET gbk */ |
    +----------+---------------------------------------------------------------+
    
    删除数据库:
    DROP database 数据库名;
    删库之前要备份,库一旦没有,里面表没了,表没了,数据就没了
    
    修改:
    修改数据库编码表
    alter database 数据名 character set utf8;
    
    其他:
    使用某个数据库
    use 数据库名字
    查询当前数据库
    select database
    +------------+
    | database() |
    +------------+
    | NULL       |
    +------------+
    
  • 表的操作

创建表:

CREATE TABLE 表名{

列表1   列的类型   [约束]

列表2   列的类型   [约束]

列表3   列的类型   [约束]

..........

列表n   列的类型   [约束]

}

ps:创建表的时候需要大家换行书写

若在表中使用到了关键字

例如:创建一个订单表(order),但是order 是数据库中的关键字(排序)

           此时表最好是使用X-order,就可以区分关键字

           若需要列明需要使用order此时使用(`)`order`

ps:开发中一般X---->t代替---->table---->t-order

  • 创建一张student表,记录学生的信息id,name,age

create table t-student{

        id INT;

        name     varchar(100);

        age  INT;

};

ps:数据库中表示字符串数据类型

     char和varchar

无论是char还是varchar,只要是超过存储范围,都会被截取,并提示警告

一般情况下,要存储字符串使用varchar

  • 查询当前数据库中的表

show tables;

+-----------------+
| Tables_in_mydb1 |
+-----------------+
| t_student       |
+-----------------+

  • 查看表中的字段信息

desc 表名;     

+属性 ---类型----+----------可以非空----+主键------+----默认值-+-额外的--------+-------+
| Field   | Type                 | Null               | Key            | Default      | Extra |
+-------+--------------+------+-----+---------+-------+
| id      | int(11)                  | YES       |     | NULL          |              |
| name  | varchar(100)    | YES       |     | NULL          |              |
| age  | int(11)                  | YES       |     | NULL           |               |
+-------+--------------+------+-----+---------+-------+

  • 在表中添加一条新的列

alter table 表名   add   列名   数据类型;

  • 删除表中的列(一次只能删除一列)

alter table 表名  drop 列名;

  • 更改表的名称

rename  table 原表名 to  新表名;

  • 查看建表的细节

show crate table 表名;

  • 修改表的字符集

alter table 表名  character  set  字符集;

  • 修改列名

alter table 表名  change  原有列名   新列名    数据类型;

  • 删除表

drop table  表名;

  • 表中的约束(只能针对列进行约束
  1. 非空约束:NOT NULL 代表不允许当前列为空的内容
  2. 设置默认列的默认值:相当于DEFAULT
  3. 唯一约束:在当前列中的内容必须是唯一的,unique
  4. 主键PRIMARY   KEY---->primary key,   非空且唯一
  5. 主键自增长:AUTO_INCREM

DML操作

DML是针对表中的数据进行增删改等操作不要和DDL(对库,表,列进行操作)混了

查询单独讲

ps:insert 插入      update 更改     delete 删改 ---->关键字

在MySQL中字符串类型和日期类型都需要使用  ‘单引号’   引起来,空值是null

  • 插入操作INSERT
  1. 语法:INSERT  INTO  表名(列名)  VALUES(列对应的值);
  2. 需要注意:列名和列值要一一对应,可以将插入表中的数据看做java中形参的赋值
  3. 值不能超过,定义的长度
  4. 如果插入的是空值,使用null
  5. 插入的日期和字符串一定要使用  ' 单引号 '。
  • 如何查看数据库中的具体信息

show  variables like  ‘charater%’

+--------------------------+---------------------------------------------------------+
| Variable_name            | Value                                                   |
+--------------------------+---------------------------------------------------------+
| character_set_client     | utf8                                                    |
| character_set_connection | utf8                                                    |
| character_set_database   | utf8                                                    |
| character_set_filesystem | binary                                                  |
| character_set_results    | utf8                                                    |
| character_set_server     | utf8                                                    |
| character_set_system     | utf8                                                    |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.5\share\charsets\ |
+--------------------------+---------------------------------------------------------+

  • 修改操作UPDATE
  1. 语法:UPDATE   表名  SET  列名 = 列值..........;
  2. UPDATE 表名 SET  列名   = 列值 WHERE  列名 = 值;

1.将所有员工的薪水修改为5000元,
update emp set money=5000;
2.张三 改为 30000;
update emp set money=30000where name='zhangsan';
3.将姓名为lisi的员工 薪水改40000,gender  改 man 
 update emp set money=40000 gender='man' where name='lisi';
4.将性别是man 的员工薪水在原有基础上增加1000
update emp set money=money+1000 where gender='man';
 

  • 删除操作 delete

语法:

  1.   delete from 表名;-->删除表(表中的数据)
  2. delect from 表名 where 列名 =值 --->删除一条记录

1.删除表中ID为3的记录
delete from t_emp where id = 3;
2.删除表中所有的记录
delete from t_emp;
ps: 使用delete这种方式 删除表中的数据  表的结构还在 删除后可以找回
3.truncate  删除表中记录
truncate table emp;
ps:使用truncate 删除的 表 相当于drop掉了
若需要再使用,就需要重新创建一个新表 truncate删除的数据是不能找回的  删除速度是快于delete

  • 排重    distinct
  1. select distinct dir_id from product;
     

通过工具将表导入到了数据库操作第一张表示商品表

id-----> 商品id 主键

productName--->商品的名称

dir-id--->商品分类编号

salePrice--->零售价格

suppiler   供货商

brand    品牌

cutoff   折扣价

简单查询
1.将product这张表所有数据都查询出来
可以使用  *  代表所有的列

  • select * from product;

2.将product表中的商品id 商品名称,零售价格,查询出来

  • select id,productName,salePrice from product;
  • 排除重复

需求查询商品分类编号
select  dir_id from product;
查询商品编号是不是有重复
select distinct dir_id from product;

使用了排重,使用了两列,只有两列数据都一样的时候才能被认为是同一条

  • 数学运算查询:

对number类型数据(小数,整数,)可以使用算数运算符来创建表达式(+-*/)
对DATE可以使用部分运算符俩创建表达式(+ -)
同级运算符的顺序是从左到右计算,表达式中使用了()可以强行改变优先级

<小于  >大于  <=小于等于   >=大于等于    !=和<> 不等于

  • 需求:查询所有货品id,名称,批发价格(批发价=零售*折扣)

ps:将列名看做属性或是参数,使用列名下面的数据计算即可
select id,productName,salePrice*cutoff from product;

  • 需求2.查询所有货品id,名称,各进50各的成本价格

select id,productName, costPrice*50 from product;

  • 需求3.并且每个产品运费是1元

select id,productName,(costPrice+1)*50 from product;

  • 设置列的别名:------>AS

1.能改变列的标题头,并不会影响原表的表头
2.用于表示计算的结果
3.作为列的别名
4.如果别名中使用了特殊字符或者强制大小写,或者空格,都需要使用单引号引起来
select id,productName,(costPrice+1)*50 as totalCostPrice from product;
ps:AS是可以省略的,但是尽量带上AS
select id,productName,(costPrice+1)*50 totalCostPrice from product;

  • 设置显示格式查询:

为了用户浏览数据更加方便,此时可以使用一个关键字,'concat  是一个函数'来连接字符串,
需求:查询商品的名字和零售价格,格式:xxx商品的零售价格为:xxx
select CONCAT(productName,'商品的零售价格为:',salePrice) as productSalePrice from product;

  • 过滤查询:

语法:
select 列  from 表名  where 子句限定(查询限定条件)
where是一个条件限定语句where后面会紧跟着你所限定的条件
需求:查询零售价格为119的所有货品信息
select * from product WHERE salePrice=119;

需求:查询货品名称为'罗技G9X'的所有货品信息
select * from product WHERE productName='罗技G9X';
版本二:
select * from product WHERE productName<>'罗技G9X';

需求:查询分类编号不等于2的货品信息
select * from product WHERE dir_id<>2;
select productName,salePrice from product WHERE salePrice<=200;
select id,productName, salePrice*cutoff as pf from product HAVING pf>350;

  • SQL中查询语句中的执行顺序

1.from子句  确定是从哪一张表中取做的查询
2.where子句  从表中直接筛选出符合条件的数据
3.select子句  从筛选之后的记录中集中显示出某些类
4.ORDER BY子句   对查询结果进行排序

  • 逻辑运算符:

AND(&&)组合的条件都为true返回true
OR(||)组合条件只要有一个位true返回true
NOT(!)若条件是false返回true

需求:查询id,货品名称,批发价格,在300到400之间的货品
select id,productName,salePrice*cutoff as A FROM product HAVING A>300 AND A<400;

需求查询id,货品名称,分类编号为2,4的所有货品
select id,productName,dir_id as A FROM product HAVING A=2 OR A=4;
需求:查询id,货品名称,分类,编号不为2的所有商品
select id,productName,dir_id as A FROM product HAVING A!=2;
select id,productName,dir_id as A FROM product HAVING A<>2;
select id,productName,dir_id as A FROM product HAVING NOT A=2;
需求:查询id,货品名称,分类标号的货品零售大于等于250,或者成本大于等于200的所有商品
select id,productName,salePrice,costPrice FROM product WHERE salePrice>=250 OR costPrice>=200;

优先级关系:
1.比较运算符   2.NOT  取非    3.AND(&&)     4.OR(||)

  • 范围查询:BETWEEN AND

使用BETWEEN  AND运算符显示某一值的范围记录,这个操作符常见的使用在数字类型或者日期类型的范围上
语法:
select 列  from  表  where  between  最小值  AND  最大值;
需求:查询id,货品名称,批发价格,在300到400之间的货品
select id,productName,salePrice*cutoff as A FROM product HAVING A>300 AND A<400;
select id,productName,salePrice*cutoff as A FROM product HAVING  A    between 300 AND 400;
select id,productName,salePrice*cutoff as A FROM product HAVING NOT A    between  300 AND 400;

  • 使用IN运算符

判断列的值,是否存在指定的集合中
语法:
select 列  from 表  where 列  IN(值1,值2)
需求查询id,货品名称,分类编号为2,4的所有货品
select id,productName,dir_id as A FROM product HAVING A IN(2,4);
需求:查询id,货品名称,分类,编号不为2,4的所有商品
select id,productName,dir_id from product where NOT dir_id IN(2,4);

  • 空值查询---IS NULL

NULL表示某一列没有数据也不是空字符串
IS NULL:判断列的值是否为NULL
需求:查询商品名为NULL所有的商品
1.向表中插入一行数据都是NULL
INSERT INTO product(productName,dir_id,salePrice,supplier,brand,cutoff,costPrice)VALUES(null,null,null,null,null,null,null,null);
select * FROM product;

  • 模糊查询:like

使用like运算符执行通配查询,查询条件可以包含文子字符或数字
通配符匹配模式:
%:可以表示零个或多个任意字符
%字符串在后 代表着以xxx开头,  %在字符串前面,代表以xxx结尾
_:可以表示一个字符
需求:查询id,货品名称,匹配'罗技M'
select id,productName from product where productName like '罗技M%';
需求:查询id,货品名称,分类编号,零售价格大于等于200货品或名称名称能匹配'罗技M1'后两个的商品
select id,productName,dir_id,salePrice from product WHERE  salePrice>=200 OR productName like '罗技M1__';

  • 结果排序

使用当前ORDER BY子句将查询的记录进行排序
ASC:升序(可以省略)
DESC: 降序
ps:ORDER BY语句出现在SELECT语句的最后
语法:
select 列 from 表 where 列  条件  ORDER BY  列名[ASC/DESC]......
需求:查询id,货品名称,分类编号,零售价格,按照零售价格升序打印
select id,productName,dir_id,salePrice from product ORDER BY salePrice ASC;
需求:查询id,货品名称,分类编号,零售价格,按照分类编号排序降序,在按零售价格排序升序
select id,productName,dir_id,salePrice from product ORDER BY dir_id DESC,salePrice ASC;

需求:查询M系列并按照批发价格排序
select productName,salePrice*cutoff as A from product where productName like '%M%' ORDER BY salePrice*cutoff ASC;
需求:查询分类编号为2并按照批发价格排序
select dir_id,salePrice*cutoff as A from product where dir_id =2 ORDER BY salePrice*cutoff ASC;
select语句的执行顺序:
先执行from---->where--->select--->ORDER BY

猜你喜欢

转载自blog.csdn.net/weixin_42764556/article/details/82380640