搜尋
首頁資料庫mysql教程MySQL快速入门(一)—Java进阶学习第十五天

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.05.09 lutianfei none 数据库简介 什么是数据库 数据库就是一个文件系统,但是访问的时候需要使用标准SQL语句来访问数据。 关系型数据库 存储的都是 实体 与实体之间的 关系 。 ER模型图 常见

文档版本 开发工具 测试平台 工程名字 日期 作者 备注
V1.0 2016.05.09 lutianfei none

数据库简介

  • 什么是数据库

    • 数据库就是一个文件系统,但是访问的时候需要使用标准SQL语句来访问数据。
  • 关系型数据库

    • 存储的都是实体与实体之间的关系
  • ER模型图

  • 常见的数据库

  • Oracle : 甲骨文公司的数据库产品,大型的收费的数据库。
  • SQLServer : 微软公司的数据库产品,中型的收费的数据库。
  • MySQL : 是开源的,免费的数据库产品。在5.x版本是免费的,6.x是收费的。
  • DB2 : IBM公司的数据库产品,大型的收费的数据库。
  • SyBASE : 已退出了历史舞台,PowerDigener(数据库建模工具)



MySQL数据库

MySQL的简介

MySQL完全卸载
  • 找到MySQL的安装路径,找到my.ini的配置文件。
    • basedir=”C:/Program Files (x86)/MySQL/MySQL Server 5.5/” 安装的路径(删除)
    • datadir=”C:/ProgramData/MySQL/MySQL Server 5.5/Data/” MySQL存储数据的路径(删除)
  • 通过控制面板卸载MySQL
  • 找到上面的两个路径,删除。


MySQL 安装与配置

  • 注:

    • 安装路径不要有中文。
    • MySQL默认端口是3306,不要修改。
    • 设置MySQL的编码集(采用UTF-8的编码)
    • 要把Include Bin Directory in Windows PATH勾选上。
    • 设置用户名的密码:两行都是密码,第一行是密码,第二行是确认密码。
  • 访问:

    • cmd > 输入命令 mysql -u root -p 回车
    • 输入密码 回车


密码重置

  • 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数据库服务器、数据库和表关系

  • 所谓安装数据库服务器,只是在机器上装了一个数据库管理程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
  • 为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。
  • 数据库服务器、数据库和表的关系如图所示:

  • 1、Java是使用对象封装数据,例如程序产生了如上所示2个user对象,这些对象的数据要想保存到数据库中,需要在数据库中创建与之对应的表,一个user对象中封装的数据,要保存到数据库中,一般就要在数据库中创建一个与之对应的表。
  • 2、对象的属性定义为表头,对象的数据对应于表中的一条记录。
  • 3、每个对象对应于表中的一条记录。


数据在数据库中的存储方式



SQL语句(重点)

SQL的简介

  • SQL:Structured Query Language, 结构化查询语言
  • 特点:非过程性语言
    • 过程性语言:当前的这条语句执行需要依赖于上一条或几条语句
    • 非过程性语言:写一条语句,就会执行一个结果。
  • 为加强SQL的语言能力,各厂商增强了过程性语言的特征
  • 如Oracle的PL/SQL 过程性处理能力
  • SQL Server、Sybase的T-SQL
  • SQL是用来存取关系数据库的语言,具有查询、操纵、定义和控制关系型数据库的四方面功能

SQL语言分类

  • DDL (数据定义语言)
    • 数据定义语言 - Data Definition Language
    • 用来定义数据库的对象,如数据表视图索引
  • DML (数据操纵语言)(重点)
    • 数据处理语言 - Data Manipulation Language
    • 在数据库表中更新增加删除记录
    • 如 update, insert, delete
  • DCL (数据控制语言)
    • 数据控制语言 – Data Control Language
    • 指用于设置用户权限控制事务语句
    • 如grant,revoke,if…else,while,begin transaction
  • DQL (数据查询语言)(重点)
    • 数据查询语言 – Data Query Language
    • select



数据库(CURD – 增删改查)

创建数据库

  • 语法:
    • create database 数据名称;
    • create database 数据库名称 character set 编码 collate 校对规则;
    • 校对规则:和编码是成对出现的
<code class=" hljs sql"><span class="hljs-operator"><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> table_name
(
    field1  datatype,
    field2  datatype,
    field3  datatype,
)<span class="hljs-keyword">character</span> <span class="hljs-keyword">set</span> 字符集 <span class="hljs-keyword">collate</span> 校对规则</span></code>
  • field:指定列名 
  • datatype:指定列类型

  • 练习

  • 创建一个名称为mydb1的数据库。
    • create database mydb1;
  • 创建一个使用utf8字符集的mydb2数据库。
    • create database mydb2 character set ‘utf8’;
  • 创建一个使用utf8字符集,并带校对规则的mydb3数据库。
    • create database mydb3 character set ‘utf8’ collate ‘utf8_bin’;

查看、删除数据库

  • 查看数据库 : show databases;
  • 查询数据库的定义 : show create database 数据库;
  • 删除数据库 : drop database 数据库名称;

  • 练习

  • 查看当前数据库服务器中的所有数据库
    • show databases;
  • 查看前面创建的mydb2数据库的定义信息
    • show create database mydb2;
  • 删除前面创建的mydb1数据库
    • drop database mydb1;

修改数据库

  • 语法:alter database 数据库 character set 编码 collate 校对规则;

  • 练习:查看服务器中的数据库,并把其中某一个库的字符集修改为gbk

    • alter database mydb2 character set ‘gbk’;

其他的操作

  • 切换数据库 : use db_name;
  • 查看当前使用的数据库 : select database();


数据表(CURD–增删改查)

创建表

  • 语法:
<code class=" hljs sql">    <span class="hljs-operator"><span class="hljs-keyword">create</span> <span class="hljs-keyword">table</span> 表名(
        字段<span class="hljs-number">1</span> 类型(长度) 约束,
        字段<span class="hljs-number">2</span> 类型(长度) 约束,
        字段<span class="hljs-number">3</span> 类型(长度) 约束,
        字段<span class="hljs-number">4</span> 类型(长度) 约束
    );</span></code>
  • 注意:
    • 表名小括号,后面要有分号。
    • 每一行字段后面要有逗号,但是最后一行没有逗号。
    • 数据的类型后面有长度,如果是字符串类型,长度必须加。如果其他类型可以不加。默认长度。int 默认长度11


MySQL常用数据类型

  • 字符串型

    • VARCHAR、CHAR
    • varchar和char区别:
      • varchar(经常使用) 长度是可变的。 name varchar(8) 存入数据hello,但是如果存入helloworld报错了。
      • char 长度不可变的。 name char(8) 存入的数据hello,如果不够用空格补全。
      • 效率高:char效果。
  • 大数据类型(一般不用)

    • BLOB、TEXT
    • BLOB:二进制文件
    • TEXT:字符
  • 数值型

    • TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE
    • java 中 byte short int long float double 与之相对应
  • 逻辑性 对应boolean

    • BIT
  • 日期型

    • DATE、TIME、DATETIME、TIMESTAMP
    • date 只包含日期
    • time 只包含时分秒
    • datetime和timestamp包含日期和时分秒区别:
      • datetime需要手动录入时间。
      • timestamp不传入数据,默认选择当前系统时间。
  • 练习,创建员工表的练习

<code class=" hljs sql">    <span class="hljs-operator"><span class="hljs-keyword">create</span> <span class="hljs-keyword">table</span> employee(
        id <span class="hljs-keyword">int</span>,
        name <span class="hljs-keyword">varchar</span>(<span class="hljs-number">20</span>),
        gender <span class="hljs-keyword">varchar</span>(<span class="hljs-number">10</span>),
        birthday <span class="hljs-keyword">date</span>,
        entry_date <span class="hljs-keyword">date</span>,
        job <span class="hljs-keyword">varchar</span>(<span class="hljs-number">100</span>),
        salary <span class="hljs-keyword">double</span>,
        resume text
    );</span></code>


定义单表字段的约束

  • 主键约束(重点)

    • 主键约束 primary key : 信息记录某个字段可以唯一区分其他信息记录,这个字段就可以是主键 (唯一 非空)
    • auto_increment 数据库维护主键。自动增长。
    • primary key:不允许为空,不允许重复
    • 删除主键alter table tablename drop primary key ;
    • 如果主键约束类型为 数值型 int bigint ,添加auto_increment 自动增长
  • 唯一约束

    • 值是唯一的。使用unique声明
  • 非空约束

    • 值不能为空 not null
  • 创建新的标签employee2,把约束加上。

<code class=" hljs sql">    <span class="hljs-operator"><span class="hljs-keyword">create</span> <span class="hljs-keyword">table</span> employee2(
        id <span class="hljs-keyword">int</span> <span class="hljs-keyword">primary</span> <span class="hljs-keyword">key</span> auto_increment,
        name <span class="hljs-keyword">varchar</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">unique</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">null</span>,
        gender <span class="hljs-keyword">varchar</span>(<span class="hljs-number">10</span>) <span class="hljs-keyword">not</span> <span class="hljs-keyword">null</span>,
        birthday <span class="hljs-keyword">date</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">null</span>,
        entry_date <span class="hljs-keyword">date</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">null</span>,
        job <span class="hljs-keyword">varchar</span>(<span class="hljs-number">100</span>) <span class="hljs-keyword">not</span> <span class="hljs-keyword">null</span>,
        salary <span class="hljs-keyword">double</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">null</span>,
        resume text <span class="hljs-keyword">not</span> <span class="hljs-keyword">null</span>
    );</span></code>
查看数据表结构
  • desc 表名; 查看表的信息
  • show tables ; 查看当前库内所有表名
  • show create table 表名; 查看建表语句和字符集
删除表
  • 语法:drop table 表名;
    • drop table employee2;
修改表
  • alter table 表名 add 字段 类型(长度) 约束;添加字段
  • alter table 表名 drop 字段;删除字段
  • alter table 表名 modify 字段 类型(长度) 约束;修改类型或者约束
  • alter table 表名 change 旧字段 新字段 类型(长度) 约束修改字段的名称
  • rename table 表名 to 新表名;修改表名
  • alter table 表名 character set utf8;修改字符集

  • 练习

  • 在上面员工表的基本上增加一个image列。
    • alter table employee add image varchar(20);
  • 修改job列,使其长度为60。
    • alter table employee modify job varchar(60);
  • 删除gender列。
    • alter table employee drop gender;
  • 表名改为user。
    • rename table employee to user;
  • 修改表的字符集为utf8
    • alter table user character set utf8;
  • 列名name修改为username
    • alter table user change name username varchar(30);


数据–CRUD语句

添加数据

  • 语法:

    • insert into 表名 (字段1,字段2,字段3..) values(值1,值2,值3...); 有几列就插入多少的值
    • insert into 表名 values(值1,值2,值3...); 插入所有的列
  • 注意:

    • 插入的数据应与字段的数据类型相同
    • 数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。
    • 在values中列出的数据位置必须与被加入的列的排列位置相对应。
    • 字符日期型数据应包含在单引号''中。
    • 插入空值:不指定或insert into table values (null)
  • 练习:

  • 向user表中插入数据
<code class=" hljs sql"><span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> <span class="hljs-keyword">user</span> <span class="hljs-keyword">values</span> (<span class="hljs-number">1</span>,<span class="hljs-string">'xiaofeng'</span>,<span class="hljs-string">'1994-10-10'</span>,<span class="hljs-string">'2011-1-1'</span>,<span class="hljs-string">'HR'</span>,<span class="hljs-number">19000</span>,<span class="hljs-string">'aaa'</span>,<span class="hljs-string">'abc'</span>);</span>
<span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> <span class="hljs-keyword">user</span> <span class="hljs-keyword">values</span> (<span class="hljs-number">2</span>,<span class="hljs-string">'美美'</span>,<span class="hljs-string">'1994-10-10'</span>,<span class="hljs-string">'2011-1-1'</span>,<span class="hljs-string">'HR'</span>,<span class="hljs-number">19000</span>,<span class="hljs-string">'aaa'</span>,<span class="hljs-string">'abc'</span>);</span>
<span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> <span class="hljs-keyword">user</span> <span class="hljs-keyword">values</span> (<span class="hljs-number">3</span>,<span class="hljs-string">'小风'</span>,<span class="hljs-string">'1994-10-10'</span>,<span class="hljs-string">'2011-1-1'</span>,<span class="hljs-string">'WORKER'</span>,<span class="hljs-number">21000</span>,<span class="hljs-string">'aaa'</span>,<span class="hljs-string">'abc'</span>);</span>
<span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> <span class="hljs-keyword">user</span> <span class="hljs-keyword">values</span> (<span class="hljs-number">4</span>,<span class="hljs-string">'芙蓉'</span>,<span class="hljs-string">'1994-10-10'</span>,<span class="hljs-string">'2011-1-1'</span>,<span class="hljs-string">'HR'</span>,<span class="hljs-number">1000</span>,<span class="hljs-string">'aaa'</span>,<span class="hljs-string">'abc'</span>);</span>
<span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> <span class="hljs-keyword">user</span> <span class="hljs-keyword">values</span> (<span class="hljs-number">5</span>,<span class="hljs-string">'班长'</span>,<span class="hljs-string">'1994-10-10'</span>,<span class="hljs-string">'2011-1-1'</span>,<span class="hljs-string">'HR'</span>,<span class="hljs-number">100</span>,<span class="hljs-string">'aaa'</span>,<span class="hljs-string">'abc'</span>);</span></code>
  • 注意:字符和日期要写在 单引号中
    • show variables like ‘character%’;
    • set character_set_results=gbk;或者 set names gbk;


解决中文乱码的问题(重点)

  • 解决方案:通过修改my.ini 修改字符集编码,重启MySQL的服务
<code class=" hljs ini"><span class="hljs-title">[client]</span>
<span class="hljs-setting">port=<span class="hljs-value"><span class="hljs-number">3306</span></span></span>
<span class="hljs-title">[mysql]</span>
<span class="hljs-setting">default-character-set=<span class="hljs-value">gbk</span></span></code>
  • mysql有六处使用了字符集,分别为:client 、connection、database、results、server 、system。
    • client是客户端使用的字符集。
    • connection是连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型就按照服务器端默认的字符集设置。
    • database是数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。
    • results是数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。
    • server是服务器安装时指定的默认字符集设定。
    • system是数据库系统使用的字符集设定。(utf-8不可修改)


修改语句

  • 语法: update 表名 set 字段=值,字段=值... [where ]

    • 如果没有where条件,默认更新所有的记录。
    • 有where提交,选择某一条记录。
    • UPDATE语法可以用新值更新原有表行中的各列
    • SET子句指示要修改哪些列和要给予哪些值。
  • 练习:在上面创建的employee表中修改表中的纪录。

  • 将所有员工薪水修改为5000元。
    • update user set salary=5000;
  • 将姓名为’班长’的员工薪水修改为3000元。
    • update user set salary=3000 where username=’班长’;
  • 将姓名为’美美’的员工薪水修改为4000元,job改为BOSS。
    • update user set salary=4000,job=’BOSS’ where username=’美美’;
  • 将班长的薪水在原有基础上增加1000元。
    • update user set salary = salary+1000 where username=’班长’;


删除数据

  • 语法:

    • delete from 表名 [where];
    • truncate 表名; 删除所有的数据
  • truncate 和 delete的区别:

    • truncate删除数据,先删除整个表。再创建一个新的空的表。(效率)
    • delete删除数据,一条一条删除的。
    • 事物(insert update delete)(后面讲)
  • Delete语句练习

  • 删除表中名称为’班长’的记录。
    • delete from user where username=’班长’;
  • 删除表中所有记录。
    • delete from user;
  • 使用truncate删除表中记录。
    • truncate user;


查询语句

  • 语法:

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

  • *号代表查询所有列。
<code class=" hljs sql"><span class="hljs-operator"><span class="hljs-keyword">create</span> <span class="hljs-keyword">table</span> stu(
    id <span class="hljs-keyword">int</span> <span class="hljs-keyword">primary</span> <span class="hljs-keyword">key</span> auto_increment,
    name <span class="hljs-keyword">varchar</span>(<span class="hljs-number">20</span>),
    math <span class="hljs-keyword">int</span>,
    english <span class="hljs-keyword">int</span>,
    chinese <span class="hljs-keyword">int</span>
);</span>

<span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> stu <span class="hljs-keyword">values</span>(<span class="hljs-keyword">null</span>,<span class="hljs-string">'班长'</span>,<span class="hljs-number">18</span>,<span class="hljs-number">11</span>,<span class="hljs-number">62</span>);</span>
<span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> stu <span class="hljs-keyword">values</span>(<span class="hljs-keyword">null</span>,<span class="hljs-string">'小风'</span>,<span class="hljs-number">98</span>,<span class="hljs-number">91</span>,<span class="hljs-number">92</span>);</span>
<span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> stu <span class="hljs-keyword">values</span>(<span class="hljs-keyword">null</span>,<span class="hljs-string">'美美'</span>,<span class="hljs-number">68</span>,<span class="hljs-number">81</span>,<span class="hljs-number">52</span>);</span>
<span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> stu <span class="hljs-keyword">values</span>(<span class="hljs-keyword">null</span>,<span class="hljs-string">'美女'</span>,<span class="hljs-number">98</span>,<span class="hljs-number">90</span>,<span class="hljs-number">65</span>);</span></code>


  • 练习
  • 查询表中所有学生的信息。
    • select * from stu;
  • 查询表中所有学生的姓名和对应的英语成绩。
    • select name,english from stu;
  • 过滤表中重复数据。(面试题)
    • select distinct english from stu;


select 语句中别名的使用
  • 在select语句中可使用as语句(as 可以省略)

    • SELECT column as 别名 from 表名;
  • 练习:

  • 在所有学生分数上加10分特长分。
    • select name,math+10,english+10,chinese+10 from stu;
  • 统计每个学生的总分。
    • select name,math+english+chinese from stu;
  • 使用别名表示学生分数。
    • select name,(math+english+chinese) as sum from stu;
使用where条件过滤
  • 在where子句中经常使用的运算符


  • 查询姓名为班长的学生成绩

    • select * from stu where name=’班长’;
  • 查询英语成绩大于90分的同学

    • select name,english from stu where english
  • 查询总分大于200分的所有同学

    • select name,math+english+chinese from stu where (math+english+chinese) > 200;


  • like – 模糊查询

    • 写法:like ‘张_或者%’;
    • _%区别:占位符。_只一个%可以有多个
    • %的写法 :
      • like ‘%张’; 结果XXX张
      • like ‘张%’; 结果张XXX
      • like ‘%张%’; 只要有张就行
  • is null – 判断是否为null

  • and – 并且
  • or – 或者
  • not – 不成立

  • 练习

  • 查询英语分数在 80-90之间的同学。

    • select * from stu where english >80 and english
    • select * from stu where english between 80 and 90;
  • 查询数学分数为18,78,46的同学。(in)

    • select * from stu where math in(18,78,46);
  • 查询所有姓班的学生成绩。

    • select * from stu where name like ‘班%’;
  • 查询数学分>80 或者 语文分>80的同学。
    • select * from stu where math >80 or chinese > 80;


排序
  • 使用order by 升序默认的(asc)/降序(desc)
  • 出现select的语句末尾
<code class=" hljs oxygene"><span class="hljs-keyword">SELECT</span> column1, column2. column3..
    <span class="hljs-keyword">FROM</span>    table;
    <span class="hljs-keyword">order</span> <span class="hljs-keyword">by</span> column <span class="hljs-keyword">asc</span>|<span class="hljs-keyword">desc</span></code>
  • 练习
  • 对数学成绩排序后输出。

    • select name,math from stu order by math;
  • 对总分排序按从高到低的顺序输出

    • select name,math+english+chinese from stu order by (math+english+chinese) desc;
  • 对学生成绩按照英语进行降序排序,英语相同学员按照数学降序

    • select * from stu order by english desc,math desc;
  • 对姓美的学生成绩排序输出

    • select * from stu where name like ‘美%’ order by english desc;


聚集函数

  • 聚集函数 指SQL语句中内置函数


聚集函数-count
  • Count(列名)返回某一列的总数
<code class=" hljs sql"><span class="hljs-operator"><span class="hljs-keyword">Select</span> <span class="hljs-aggregate">count</span>(*)|<span class="hljs-aggregate">count</span>(列名) <span class="hljs-keyword">from</span> tablename
        [<span class="hljs-keyword">WHERE</span> where_definition] </span></code>
  • 练习:
  • 统计一个班级共有多少学生?
    • select count(*) from stu;
  • 统计数学成绩大于90的学生有多少个?
    • select count(*) from stu where math > 90;
  • 统计总分大于150的人数有多少?
    • select count(*) from stu where (math+english+chinese) > 150;


聚集函数-sum
  • sum函数返回满足where条件的列的和(忽略NULL:ifnull(xxx,0)
<code class=" hljs sql"><span class="hljs-operator"><span class="hljs-keyword">Select</span> <span class="hljs-aggregate">sum</span>(列名){,<span class="hljs-aggregate">sum</span>(列名)…} <span class="hljs-keyword">from</span> tablename
        [<span class="hljs-keyword">WHERE</span> where_definition]  </span></code>
  • 统计一个班级数学总成绩?
    • 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

  • AVG函数返回满足where条件的一列的平均值

  • 练习:

  • 求一个班级数学平均分?
    • select avg(math) from stu;
  • 求一个班级总分平均分
    • select avg(ifnull(math,0)+english+chinese) from stu;


聚集函数-MAX/MIN

  • max/min函数返回满足where条件的一列的最大/最小值
<code class=" hljs sql"><span class="hljs-operator"><span class="hljs-keyword">Select</span> <span class="hljs-aggregate">max</span>(列名) <span class="hljs-keyword">from</span> tablename
        [<span class="hljs-keyword">WHERE</span> where_definition] </span></code>
  • max 最大值
    • select max(math) from stu;
  • min 最小值
    • select min(math) from stu;


聚集函数-GROUP

  • GROUP BY子句可以将查询结果按属性列或属性列组合在的方向上进行分组,每组在属性列或属性列组合上具有相同的值。

  • 注意,使用GROUP BY 时,SELECT 子句中只能由以下部分组成:

    • 汇总函数
    • GROUP BY 中出现的列名
    • 上面两个条件通过函数和表达式的结果
    • 条件过滤需要是having,不能使用where
  • 例如:

    • SELECT A_ID ,COUNT(*) FROM C GROUP BY A_ID; =>合法
    • SELECT A_DATE,COUNT(*) FROM C GROUP BY A_ID; =>不合法,如图示中的按A_ID分组后,对于其他各列的查询只能是汇总查询,否则没有意义
  • 练习:对订单表中商品归类后,显示每一类商品的总价

<code class=" hljs sql"><span class="hljs-operator"><span class="hljs-keyword">create</span> <span class="hljs-keyword">table</span> orders(
    id <span class="hljs-keyword">int</span>,
    product <span class="hljs-keyword">varchar</span>(<span class="hljs-number">20</span>),
    price <span class="hljs-keyword">float</span>
);</span>

<span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> orders(id,product,price) <span class="hljs-keyword">values</span>(<span class="hljs-number">1</span>,<span class="hljs-string">'电视'</span>,<span class="hljs-number">900</span>);</span>
<span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> orders(id,product,price) <span class="hljs-keyword">values</span>(<span class="hljs-number">2</span>,<span class="hljs-string">'洗衣机'</span>,<span class="hljs-number">100</span>);</span>
<span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> orders(id,product,price) <span class="hljs-keyword">values</span>(<span class="hljs-number">3</span>,<span class="hljs-string">'洗衣粉'</span>,<span class="hljs-number">90</span>);</span>
<span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> orders(id,product,price) <span class="hljs-keyword">values</span>(<span class="hljs-number">4</span>,<span class="hljs-string">'桔子'</span>,<span class="hljs-number">9</span>);</span>
<span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> orders(id,product,price) <span class="hljs-keyword">values</span>(<span class="hljs-number">5</span>,<span class="hljs-string">'洗衣粉'</span>,<span class="hljs-number">90</span>);</span>

<span class="hljs-operator"><span class="hljs-keyword">select</span> product,<span class="hljs-aggregate">count</span>(*),<span class="hljs-aggregate">sum</span>(price) <span class="hljs-keyword">from</span> orders <span class="hljs-keyword">group</span> <span class="hljs-keyword">by</span> product;</span>
</code>


  • 练习:查询购买了几类商品,并且每类总价大于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 … ;
      • 顺序不能改变


备份、恢复数据库

  • 备份数据库
  • 备份命令 mysql/bin/mysqldump 将数据库SQL语句导出

    • 语法:mysqldump -u 用户名 -p 数据库名 > 磁盘SQL文件路径
  • 例如: 备份day12数据库 — c:\day12.sql

  • cmd > mysqldump -u root -p day12 > c:\day12.sql 回车输入密码

  • 恢复数据库(前提创建空的数据库,并且use)

  • 恢复命令 mysql/bin/mysql 将sql文件导入到数据库

    • 语法: mysql -u 用户名 -p 数据库名
    • 导入SQL 必须手动创建数据库 ,SQL不会创建数据库
  • 例如:将c:\day12.sql 导入 day12数据库

    • cmd > mysql -u root -p day12
  • 补充知识:恢复SQL也可以在数据库内部执行 source c:\day12.sql

  • 练习

    • 备份test库中的数据,并恢复
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
解釋InnoDB緩衝池及其對性能的重要性。解釋InnoDB緩衝池及其對性能的重要性。Apr 19, 2025 am 12:24 AM

InnoDBBufferPool通過緩存數據和索引頁來減少磁盤I/O,提升數據庫性能。其工作原理包括:1.數據讀取:從BufferPool中讀取數據;2.數據寫入:修改數據後寫入BufferPool並定期刷新到磁盤;3.緩存管理:使用LRU算法管理緩存頁;4.預讀機制:提前加載相鄰數據頁。通過調整BufferPool大小和使用多個實例,可以優化數據庫性能。

MySQL與其他編程語言:一種比較MySQL與其他編程語言:一種比較Apr 19, 2025 am 12:22 AM

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

學習MySQL:新用戶的分步指南學習MySQL:新用戶的分步指南Apr 19, 2025 am 12:19 AM

MySQL值得學習,因為它是強大的開源數據庫管理系統,適用於數據存儲、管理和分析。 1)MySQL是關係型數據庫,使用SQL操作數據,適合結構化數據管理。 2)SQL語言是與MySQL交互的關鍵,支持CRUD操作。 3)MySQL的工作原理包括客戶端/服務器架構、存儲引擎和查詢優化器。 4)基本用法包括創建數據庫和表,高級用法涉及使用JOIN連接表。 5)常見錯誤包括語法錯誤和權限問題,調試技巧包括檢查語法和使用EXPLAIN命令。 6)性能優化涉及使用索引、優化SQL語句和定期維護數據庫。

MySQL:初學者的基本技能MySQL:初學者的基本技能Apr 18, 2025 am 12:24 AM

MySQL適合初學者學習數據庫技能。 1.安裝MySQL服務器和客戶端工具。 2.理解基本SQL查詢,如SELECT。 3.掌握數據操作:創建表、插入、更新、刪除數據。 4.學習高級技巧:子查詢和窗口函數。 5.調試和優化:檢查語法、使用索引、避免SELECT*,並使用LIMIT。

MySQL:結構化數據和關係數據庫MySQL:結構化數據和關係數據庫Apr 18, 2025 am 12:22 AM

MySQL通過表結構和SQL查詢高效管理結構化數據,並通過外鍵實現表間關係。 1.創建表時定義數據格式和類型。 2.使用外鍵建立表間關係。 3.通過索引和查詢優化提高性能。 4.定期備份和監控數據庫確保數據安全和性能優化。

MySQL:解釋的關鍵功能和功能MySQL:解釋的關鍵功能和功能Apr 18, 2025 am 12:17 AM

MySQL是一個開源的關係型數據庫管理系統,廣泛應用於Web開發。它的關鍵特性包括:1.支持多種存儲引擎,如InnoDB和MyISAM,適用於不同場景;2.提供主從復制功能,利於負載均衡和數據備份;3.通過查詢優化和索引使用提高查詢效率。

SQL的目的:與MySQL數據庫進行交互SQL的目的:與MySQL數據庫進行交互Apr 18, 2025 am 12:12 AM

SQL用於與MySQL數據庫交互,實現數據的增、刪、改、查及數據庫設計。 1)SQL通過SELECT、INSERT、UPDATE、DELETE語句進行數據操作;2)使用CREATE、ALTER、DROP語句進行數據庫設計和管理;3)複雜查詢和數據分析通過SQL實現,提升業務決策效率。

初學者的MySQL:開始數據庫管理初學者的MySQL:開始數據庫管理Apr 18, 2025 am 12:10 AM

MySQL的基本操作包括創建數據庫、表格,及使用SQL進行數據的CRUD操作。 1.創建數據庫:CREATEDATABASEmy_first_db;2.創建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入數據:INSERTINTObooks(title,author,published_year)VA

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)