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 < 15;
查询总分大于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 <90;
- 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(
- 统计一个班级语文成绩平均分
- 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 product,sum(price) from orders group by product
- 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库中的数据,并恢复

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Root로 MySQL에 로그인 할 수없는 주된 이유는 권한 문제, 구성 파일 오류, 암호 일관성이 없음, 소켓 파일 문제 또는 방화벽 차단입니다. 솔루션에는 다음이 포함됩니다. 구성 파일의 BAND-ADDRESS 매개 변수가 올바르게 구성되어 있는지 확인하십시오. 루트 사용자 권한이 수정 또는 삭제되어 재설정되었는지 확인하십시오. 케이스 및 특수 문자를 포함하여 비밀번호가 정확한지 확인하십시오. 소켓 파일 권한 설정 및 경로를 확인하십시오. 방화벽이 MySQL 서버에 연결되는지 확인하십시오.

MySQL이 테이블 구조를 수정하면 메타 데이터 잠금 장치가 일반적으로 사용되므로 테이블을 잠글 수 있습니다. 자물쇠의 영향을 줄이려면 다음과 같은 조치를 취할 수 있습니다. 1. 온라인 DDL과 함께 테이블을 사용할 수 있습니다. 2. 배치에서 복잡한 수정을 수행합니다. 3. 소형 또는 피크 기간 동안 운영됩니다. 4. PT-OSC 도구를 사용하여 더 미세한 제어를 달성하십시오.

MySQL 데이터베이스에서 사용자와 데이터베이스 간의 관계는 권한과 테이블로 정의됩니다. 사용자는 데이터베이스에 액세스 할 수있는 사용자 이름과 비밀번호가 있습니다. 권한은 보조금 명령을 통해 부여되며 테이블은 Create Table 명령에 의해 생성됩니다. 사용자와 데이터베이스 간의 관계를 설정하려면 데이터베이스를 작성하고 사용자를 생성 한 다음 권한을 부여해야합니다.

MySQL은 Android에서 직접 실행할 수는 없지만 다음 방법을 사용하여 간접적으로 구현할 수 있습니다. Android 시스템에 구축 된 Lightweight Database SQLite를 사용하여 별도의 서버가 필요하지 않으며 모바일 장치 애플리케이션에 매우 적합한 작은 리소스 사용량이 있습니다. MySQL 서버에 원격으로 연결하고 데이터 읽기 및 쓰기를 위해 네트워크를 통해 원격 서버의 MySQL 데이터베이스에 연결하지만 강력한 네트워크 종속성, 보안 문제 및 서버 비용과 같은 단점이 있습니다.

MySQL에는 무료 커뮤니티 버전과 유료 엔터프라이즈 버전이 있습니다. 커뮤니티 버전은 무료로 사용 및 수정할 수 있지만 지원은 제한되어 있으며 안정성이 낮은 응용 프로그램에 적합하며 기술 기능이 강합니다. Enterprise Edition은 안정적이고 신뢰할 수있는 고성능 데이터베이스가 필요하고 지원 비용을 기꺼이 지불하는 응용 프로그램에 대한 포괄적 인 상업적 지원을 제공합니다. 버전을 선택할 때 고려 된 요소에는 응용 프로그램 중요도, 예산 책정 및 기술 기술이 포함됩니다. 완벽한 옵션은없고 가장 적합한 옵션 만 있으므로 특정 상황에 따라 신중하게 선택해야합니다.

MySQL 데이터베이스 성능 최적화 안내서 리소스 집약적 응용 프로그램에서 MySQL 데이터베이스는 중요한 역할을 수행하며 대규모 트랜잭션 관리를 담당합니다. 그러나 응용 프로그램 규모가 확장됨에 따라 데이터베이스 성능 병목 현상은 종종 제약이됩니다. 이 기사는 일련의 효과적인 MySQL 성능 최적화 전략을 탐색하여 응용 프로그램이 고 부하에서 효율적이고 반응이 유지되도록합니다. 실제 사례를 결합하여 인덱싱, 쿼리 최적화, 데이터베이스 설계 및 캐싱과 같은 심층적 인 주요 기술을 설명합니다. 1. 데이터베이스 아키텍처 설계 및 최적화 된 데이터베이스 아키텍처는 MySQL 성능 최적화의 초석입니다. 몇 가지 핵심 원칙은 다음과 같습니다. 올바른 데이터 유형을 선택하고 요구 사항을 충족하는 가장 작은 데이터 유형을 선택하면 저장 공간을 절약 할 수있을뿐만 아니라 데이터 처리 속도를 향상시킬 수 있습니다.

데이터 통합 단순화 : AmazonRdsMysQL 및 Redshift의 Zero ETL 통합 효율적인 데이터 통합은 데이터 중심 구성의 핵심입니다. 전통적인 ETL (추출, 변환,로드) 프로세스는 특히 데이터베이스 (예 : AmazonRDSMySQL)를 데이터웨어 하우스 (예 : Redshift)와 통합 할 때 복잡하고 시간이 많이 걸립니다. 그러나 AWS는 이러한 상황을 완전히 변경 한 Zero ETL 통합 솔루션을 제공하여 RDSMYSQL에서 Redshift로 데이터 마이그레이션을위한 단순화 된 거의 실시간 솔루션을 제공합니다. 이 기사는 RDSMYSQL ZERL ETL 통합으로 Redshift와 함께 작동하여 데이터 엔지니어 및 개발자에게 제공하는 장점과 장점을 설명합니다.

1. 올바른 색인을 사용하여 스캔 한 데이터의 양을 줄임으로써 데이터 검색 속도를 높이십시오. 테이블 열을 여러 번 찾으면 해당 열에 대한 인덱스를 만듭니다. 귀하 또는 귀하의 앱이 기준에 따라 여러 열에서 데이터가 필요한 경우 복합 인덱스 2를 만듭니다. 2. 선택을 피하십시오 * 필요한 열만 선택하면 모든 원치 않는 열을 선택하면 더 많은 서버 메모리를 선택하면 서버가 높은 부하 또는 주파수 시간으로 서버가 속도가 느려지며, 예를 들어 Creation_at 및 Updated_at 및 Timestamps와 같은 열이 포함되어 있지 않기 때문에 쿼리가 필요하지 않기 때문에 테이블은 선택을 피할 수 없습니다.
