MySQL的介绍和使用


一,数据库概述

1.什么是数据库?

  • 数据库(DataBase,DB):指长期保存在计算机的存储设备(磁盘)上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合.

  • 用我们自己的话来说: 数据库就是数据的仓库或者集合

2.数据库管理系统?

  • 数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中的数据。

  • 用我们自己的话来说: 数据库管理系统就是一个软件

    ​ 数据库 = 数据集合 + 数据库软件

    ​ 注意:通常情况下,经常会用数据库来表示他们使用的数据库软件,这经常会引起混淆,确切的说,数据库软件应该为数据库管理系统,数据库是通过数据库管理系统创建和操作的。

3.常见的关系型数据库

  • MYSQL :开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费.

  • Oracle:收费的大型数据库.Oracle公司的产品.Oracle收购SUN公司,收购MYSQL.

  • DB2:IBM公司的数据库产品,收费的.银行系统中.

  • SQLServer:MS公司.收费的中型的数据库.

  • SyBase:已经淡出历史舞台.提供了一个非常专业数据建模的工具PowerDesigner.

  • SQLite: 嵌入式的小型数据库,应用在手机端.

  • 和java相关的数据库: mysql, oracle

二,sql概述

1.什么是sql?

  • SQL:Structure Query Language。(结构化查询语言),通过sql语法操作数据库

  • SQL被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后来被国际化标准组织(ISO)采纳为关系数据库语言的国际标准

  • 各数据库厂商(mysql,oracle,sql server)都支持ISO的SQL标准。

  • 各数据库厂商在标准的基础上做了自己的扩展。 各个数据库自己特定的语法

2.sql的分类

  • DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;

    ​ CREATE、 ALTER、DROP

  • DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);

    ​ INSERT、 UPDATE、 DELETE

  • DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;

    ​ grant

  • DQL(Data Query Language):数据查询语言,用来查询记录(数据)【重点】

    ​ SELECT

三,对数据库的CRUD

1,创建数据库

1.1语法

  • create database 数据库名 [character set 字符集][collate  校对规则]     

    字符集(charset):是一套符号和编码。

    校对规则(collation):是在字符集内用于比较字符的一套规则,

2.查看数据库

2.1查看所有的数据库

  • show databases;

2.2查看数据库的定义结构

  • show create database 数据库名

3.删除数据库
  • drop database 数据库名;

4.修改数据库(不是修改数据库的名字)
  • alter database 数据库名 character set 字符集;

注意:

  • 是utf8,不是utf-8

  • 不是修改数据库名

5.其它操作
  • use 数据库名; 切换数据库, 选定哪一个数据库

  • select database(); 查看正在使用的数据库

注意:

  • 在创建表之前一定要指定数据库. use 数据库名

四,对表的CRUD

1.创建表

1.1语法

    create table 表名(
        列名(字段) 类型 [约束],
        列名 类型 [约束],
        列名 类型 [约束]

    );

1.2 类型

整型: 通常用int

浮点类型: 默认精度: float , double. 手动指定精度: float(5,2); 总位数是5, 小数位是2, 表达的最大数: 999.99

字符串: char(20); 最多可以存放20个字符; 固定长度: 'aa '只占两个字符的, 系统还会分配20个字符的所占空间

​ 应用场景: 一般用在确定了长度的字段上 eg: 身份证号码(18位), 手机号码(11位)

​ varchar(20);最多可以存放20个字符; 可变长度: 'aa', 只会分配2个字符所占的框架

​ 一般字符串用varchar

存文件: 我们实际开发的时候, 不存文件本身. 把文件存到服务器里面, 存文件的路径

时间戳: 如果我们把一个字段设置为了时间戳类型, 就可以不用插入数据库, 直接插入null, 系统会自动把当前的时间给赋值进去

1.3 约束,

  • 即规则,规矩;

  • 作用:保证用户输入的数据保存到数据库中是符合规范的

约束种类:

  • not null; 非空 ; eg: name varchar(40) not null; 当前把name设置了非空约束, 插入数据的时候一定要赋值

  • unique;唯一约束, 后面的数据不能和前面重复

  • primary key;主键约束(非空+唯一);

  • auto_increment;自动增长列 , id int primary key auto_increment; 当前的id自动增长的, 设置为null, 从1开始自动给你赋值

    注意: 1.先设置主键再有自动增长

    ​ 2.只有加了自动增长,才可以插入null,系统自动维护.

    ​ 3. 一般用在整型上面, 字符串不可以设置

2.查看表

2.1查看所有的表

show tables;

2.2查看表的定义结构

desc  表名;

3.修改表

3.1语法

  • 增加一列;alter table 表 add 字段 类型 约束;

  • 修改列的类型约束; alter table 表 modify 字段 类型 约束 ;

  • 修改列的名称,类型,约束;alter table 表 change 旧列 新列 类型 约束;

  • 删除一列; alter table 表名 drop 列名;

  • 修改表名 ; rename table 旧表名 to 新表名; 

4.删除表
drop table 表名;

五,对表里面数据的CRUD

1.插入数据
方式一:insert into 表(列,列..) values(值,值..);      插入指定的列,没有插入的列会自动置为null; 如果没有插入的                                                     列添加了非空约束, 会报错
方式二:insert into 表 values(值,值....);              插入所有的列

注意:

  • 没有赋值的列,系统自动赋为null

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

  • 值不要超出列定义的长度。

  • 如果插入空值,请使用null

  • 插入的日期和字符串,使用引号括起来。

命令行插入中文数据报错:

  • 关闭服务, net stop mysql

  • 在数据库软件的安装目录下面, 修改配置文件 my.ini中客户端的编码为gbk

  • 重新打开命令行,开启服务, net start mysql

2.更新记录

2.1语法

    update 表 set 字段 = 值 ,字段 = 值 [where 条件]

3.1语法

delete from 表 [where条件]; 
truncate table 表;

区别:

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

  • TRUNCATE 删除是把表直接DROP掉,然后再创建一个同样的新表。删除的数据不能找回。执行速度比DELETE快。


4.查询记录
4.1语法
select [列名,列名] [*] [聚合函数][distinct 字段] from 表名 [WHERE --> group by -->having--> order by]

4.2.3 去重查询

语法: distinct 列名

  • 把价格重复的给筛选

注意:

  • 要数据一模一样才能去重

4.2.4 别名查询

语法: 1.字段 as 别名 2.表 as 别名 其中 as可以省略

4.2.5运算查询(+,-,*,/等)
  • 把商品名,和商品价格+10查询出来

注意:

  • 运算查询字段,字段之间是可以的 eg: chinese+math+english = 总分

  • 字符串等类型可以做运算查询,但结果没有意义

4.2.6 条件查询

注意:

  1. between 小的值 and 大的值 , 闭区间 ;

    ​ eg: price between 3000 and 6000 ---> 3000<= price <= 6000

  2. 字段 like '模糊的值'; like通常和占位符一起使用 _ 占一位, % 占多位(0~n)

  • 查询商品价格>3000的商品

  • 查询价格在3000到6000之间的商品

  • 查询id在1,5,10,15范围内的商品

  • 查询商品名以iP开头的商品

  • 查询商品价格大于3000并且数量大于20的商品

  • 查询pid为1或者价格小于3000的商品

4.2.7排序

语法:order by 列名 asc(默认) desc

​ asc:升序 desc降序

  • 查找所有商品的记录,按照价格升序

  • 查找所有商品的记录,按照价格升序,如果价格一样,按照数量降序

应用场景: 附件的人, 成绩排名, 时间....

4.2.8聚合函数

聚合函数是用来做纵(列)向运算的函数

​ count(*|字段);统计指定列不为NULL的记录行数

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

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

​ min();计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算

​ avg();计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0

  • 统计商品表的总记录数

  • 求商品单价的总和

  • 查询商品的最大价格

  • 查询商品的平均价格

4.2.9分组

​ 语法:group by 列

  • 根据商品类别分组,统计不同商品类别的个数

  • 根据商品类别分组,统计不同商品类别的总价格

注意:

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

4.2.10 分组后筛选

​ 语法:having 条件

  • 根据商品类别分组,统计不同商品类别的个数,并且商品类别个数大于5的

注意:

  • having是分组后筛选 where 分组之前筛选

where和having的区别

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值