数据库MySql的增删改查

什么是数据库

数据库就是一个文件系统,但是访问的时候需要使用标准SQL语句来访问数据。如果我们在本地安装,其实我们本地也是一个服务器,这个服务器只能存储数据。

 

关系型数据库

存储的都是实体与实体之间的关系。(用户,订单,商品)

 

 

可以通过ER模型图来描述之间的关系

 

 

常见的数据库

Oracle :甲骨文公司的数据库产品,大型的收费的数据库。

SQLServer :微软公司的数据库产品,中型的收费的数据库。

MySQL :是开源的,免费的数据库产品。在5.x版本是免费的,6.x是收费的。

DB2 IBM公司的数据库产品,大型的收费的数据库。

SyBASE :已退出了历史舞台,PowerDigener(数据库建模工具)

 

 

 

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

* 找到上面的两个路径,删除就ok了。

 

MySQL数据库的安装和配置(参考安装文档)

* 安装路径不要有中文(*****

* MySQL默认端口是3306,不要修改。

* 设置MySQL的编码集(采用UTF-8的编码)

* 要把黑窗口的勾勾选上。

* 设置用户名的密码:两行都是密码,第一行是密码,第二行是确认密码。

* 安装完成。

 

 

访问:

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

输入密码 回车

 

 

 

 

 

MySQL数据库Root密码重置

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服务

 

 

服务器,数据库,表之间的关系

 

 

 

 

语言解释

1)所谓安装数据库服务器,只是在机器上装了一个数据库管理程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。

2)为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。

3)数据库服务器、数据库和表的关系如图所示:

 

 

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

 

 

 

SQL语言

SQL语言简介

SQLStructured Query Language, 结构化查询语言

特点:非过程性语言

过程性语言:当前的这条语句执行需要依赖于上一条或几条语句

非过程性语言:可一条语句,就会执行一个结果。

 

为加强SQL的语言能力,各厂商增强了过程性语言的特征

OraclePL/SQL过程性处理能力

SQL ServerSybaseT-SQL

 

 

 

 

SQL是用来存取关系数据库的语言,具有查询、操纵、定义和控制关系型数据库的四方面功能

 

SQL分类

DDL (数据定义语言)

数据定义语言 - Data Definition Language

用来定义数据库的对象,如数据表、视图、索引等

比如创建数据库和创建表

DML  (数据操纵语言)

数据处理语言 - Data Manipulation Language

在数据库表中更新,增加和删除记录

update insert delete

DCL (数据控制语言)

数据控制语言 Data Control Language

指用于设置用户权限和控制事务语句

grantrevokeifelsewhilebegin transaction

DQL (数据查询语言)

数据查询语言 Data Query Language

Select

 

 

今天要完成任务(数据库增删改查(CRUD),表的增删改查,数据的增删改查)

它代表创建(Create)、更新(Update)、读取(Retrieve)和删除(Delete)操作。

 

创建数据库

 

 

CHARACTER SET:指定数据库采用的字符集

 

语法create database 数据名称;

      create database 数据库名称 character set编码

 

 

 

练习:

创建一个名称为mydb1的数据库。

   create database mydb1;

创建一个使用utf8字符集的mydb2数据库。

 create database mydb2 character set 'utf8';

 

 

查看、删除数据库

 

 

查看数据库 show databases;

查询数据库的定义 show create database 数据库;

show create database mydb2;

 删除数据库 drop database 数据库名称;

 

练习

   查看当前数据库服务器中的所有数据库

 show databases;

   查看前面创建的mydb2数据库的定义信息

 show create database mydb2;

   删除前面创建的mydb1数据库

 drop database mydb1;

 

 

 修改数据库与其他操作


   * 语法alter database 数据库 character set 编码;

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

alter database mydb2 character set 'gbk';

 其他的操作

* 切换数据库(*****use db_name;

* 查看当前使用的数据库 select database();

 

 

 

创建表(基本语句)

 

 

* 语法:

create table 表名(

字段1 类型(长度)约束,

字段2 类型(长度)约束,

字段3 类型(长度)约束,

字段4 类型(长度)约束

);

注意:

* 表名小括号,后面要有分号。

* 每一行字段后面要有逗号,但是最后一行没有逗号。

* 数据的类型后面有长度,如果是字符串类型,长度必须加。如果其他类型可以不加。默认长度。int默认长度11

 

 

 

 

public class User{

int id;

String name;

String pass;

String eamil;

String nikename;

}

数据的类型

 

字符串型  VARCHARCHAR

 * varcharchar区别:

* varchar(经常使用) 长度是可变的。 name varchar(8)存入数据hello,但是如果存入helloworld报错了。

* char 长度不可变的。   name char(8)存入的数据hello,如果不够用空格补全。

* 效率高:char效果。

大数据类型(一般不用)

 BLOBTEXT

 BLOB:二进制文件

 TEXT:字符

 数值型 TINYINT SMALLINTINTBIGINTFLOATDOUBLE

 逻辑性 对应boolean01

  BIT

日期型  DATETIMEDATETIMETIMESTAMP

* date 只包含日期

* time 只包含时分秒

* datetimetimestamp包含日期和时分秒区别:

* datetime需要手动录入时间。

* timestamp不传入数据,默认选择当前系统时间。

 

 

 

 

创建表练习

 

 

create table employee(

id int,

name varchar(20),

gender varchar(10),

birthday date,

entry_date date,

job varchar(100),

salary double,

resume text

);

 

使用desc 表名; 查看表的信息

 

 

定义单表字段的约束

* 主键约束

 * 标识标记该条记录。 通过pramary key声明主键。(默认唯一、非空)

 * auto_increment 数据库维护主键。自动增长。

* 唯一约束

* 值是唯一的。使用unique声明

* 非空约束

  * 值不能为空 not null

 

 

练习

创建新的标签employee2,把约束加上。

create table employee2(

id int primary key auto_increment,

name varchar(20) unique not null,

gender varchar(10) not null,

birthday date not null,

entry_date date not null,

job varchar(100) not null,

salary double not null,

resume text not null

);

 

 

其他表操作

  数据表删除

    语法:drop table 表名;

 

查看数据表结构

   desc 表名;查看表结构

   show tables ; 查看当前库内所有表名

   show create table 表名;查看建表语句和字符集

 

 

修改表

 

 

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语句    (增加数据)

Update语句  (更新数据)

Delete语句   (删除数据)

Select语句 (查找数据)

 

 

添加数据

 

* insert into 表名 (字段1,字段2,字段3..) values(1,2,3...); 有几列就插入多少的值。

* insert into 表名 values(1,2,3...); 插入所有的列

 * 注意:

  数据与字段的类型相同。

  字段长度需要控制。

  字符串或者日期类型需要使用' '

 

 

  user表中插入数据

insert into user values (1,'xiaofeng','1994-10-10','2011-1-1','HR',19000,'aaa','abc');

insert into user values (2,'美美','1994-10-10','2011-1-1','HR',19000,'aaa','abc');

insert into user values (3,'小风','1994-10-10','2011-1-1','WORKER',21000,'aaa','abc');

insert into user values (4,'芙蓉','1994-10-10','2011-1-1','HR',1000,'aaa','abc');

insert into user values (5,'班长','1994-10-10','2011-1-1','HR',100,'aaa','abc');

查看插入的数据:select * from

  解决中文乱码的问题

[client]

port=3306

[mysql]

default-character-set=gbk

  修改完需要重新启动服务

 

 

 

 

Update语句

 

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

 * 如果没有where条件,默认更新所有的记录。

 * where提交,选择某一条记录。

将所有员工薪水修改为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语句

 

如果不使用where子句,将删除表中所有数据。

Delete语句不能删除某一列的值(可使用update

使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。

insertupdate一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应该始终不要忘记这个潜在的问题。

外键约束

删除表中数据也可使用truncate table 语句,它和delete有所不同,参看mysql文档。

 

 

delete

语法:delete from 表名 [where ]; 删除数据

truncate 表名;删除所有的数据

* truncate delete的区别:

* truncate删除数据,先删除整个表。再创建一个新的空的表。(效率)

* delete删除数据,一条一条删除的。(*****

练习

删除表中名称为’班长’的记录。

* delete from user where username='班长';

删除表中所有记录。

* delete from user;

使用truncate删除表中记录。

* truncate user;

 

 

Select语句

 

select 指定查询哪些列的数据。

column指定列名。

*号代表查询所有列。

from指定查询哪张表。

DISTINCT可选,指显示结果时,是否剔除重复数据

 

 

 

* 语法:

select * from 表名; 查询所有(字段)

select 字段名1,字段名2,字段名3 from表名;     显示查询字段名

select DISTINCT 字段名 from表名;     去除重复的数据。

 

create table stu(

  

    id int primary key auto_increment,

 

    name varchar(20),

 

    math int,

  

    english int,

  

    chinese int

 

);

 

insert into stu values (null,'班长',18,11,62);

 

insert into stu values (null,'小风',98,91,92);

 

insert into stu values (null,'美美',68,81,52);

 

insert into stu values (null,'芙蓉',78,89,66);

 

insert into stu values (null,'班长',46,90,65);

查询表中所有学生的信息。

select * from stu;

查询表中所有学生的姓名和对应的英语成绩。

select name,english from stu;

过滤表中重复数据。(面试题)

select distinct english from stu;

 

 

Select语句

 

 

 

* 查询的列可以运算

 * 可以使用别名:使用as别名 并且as可以省略。

练习:

在所有学生分数上加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条件过滤

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

 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;

 

 

 

 

 

 

 

 

 

 

 

 

 

常用的符号

 

 

>   <   <=   >=   =    <>(不等于)

   in(范围内取内容)

   like -- 模糊查询 写法:like '_或者%'; _%区别:占位符。_只一个%可以有多个

   %的写法 like '%';结果XXX

like '%';结果张XXX

like '%%'; 只要有张就行

is null -- 判断是否为null

and -- 并且

or -- 或者

not -- 不成立

  练习

  查询英语分数在 8090之间的同学。

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 子句排序查询结果

 

使用order by 升序默认的(asc)/降序(desc)

* 出现select的语句末尾。

练习

对数学成绩排序后输出。

 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;

 

 

聚集函数-count

 

  

 

练习:

  统计一个班级共有多少学生?

 select count(*) from stu;

  统计数学成绩大于90的学生有多少个?

 select count(*) from stu where math > 90;

  统计总分大于150的人数有多少?

 select count(*) from stu where (math+english+chinese) > 150;

 

 

 

 

聚集函数-SUM

 

注意:sum仅对数值起作用,否则会报错。

注意:对多列求和,“,”号不能少。

ifnull(xxx,0) 如果为null,则值是0

 

 

sum 求和(忽略null值)可以同ifnull(xxx,0)

统计一个班级数学总成绩?

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 平均数

 练习:

   求一个班级数学平均分?

    select avg(math) from stu;

   求一个班级总分平均分

select avg(ifnull(math,0)+english+chinese) from stu;

 max 最大值

select max(math) from stu;

 

 min 最小值

select min(math) from stu;

 

 

 

 

 

 

 

 

 

 

create table orders(

id int,

product varchar(20),

price float

);

 

insert into orders(id,product,price) values(1,'电视',900);

insert into orders(id,product,price) values(2,'洗衣机',100);

insert into orders(id,product,price) values(3,'洗衣粉',90);

insert into orders(id,product,price) values(4,'桔子',9);

insert into orders(id,product,price) values(5,'洗衣粉',90);

insert into orders(id,product,price) values(6,'电视',900);

 

 group by 分组(一起使用) 条件过滤需要是having,不能使用where

练习:对订单表中商品归类后,显示每一类商品的总价.

 select product,count(*),sum(price) from orders group by product;

    练习:查询购买了几类商品,并且每类总价大于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 ... ;

顺序不能改变

 

 

 

 

 

 

 

 

 

 

 

                        Day23 mysql

 

数据库简介

什么是数据库

数据库就是一个文件系统,但是访问的时候需要使用标准SQL语句来访问数据。如果我们在本地安装,其实我们本地也是一个服务器,这个服务器只能存储数据。

 

关系型数据库

存储的都是实体与实体之间的关系。(用户,订单,商品)

 

 

可以通过ER模型图来描述之间的关系

 

 

常见的数据库

Oracle :甲骨文公司的数据库产品,大型的收费的数据库。

SQLServer :微软公司的数据库产品,中型的收费的数据库。

MySQL :是开源的,免费的数据库产品。在5.x版本是免费的,6.x是收费的。

DB2 IBM公司的数据库产品,大型的收费的数据库。

SyBASE :已退出了历史舞台,PowerDigener(数据库建模工具)

 

 

 

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

* 找到上面的两个路径,删除就ok了。

 

MySQL数据库的安装和配置(参考安装文档)

* 安装路径不要有中文(*****

* MySQL默认端口是3306,不要修改。

* 设置MySQL的编码集(采用UTF-8的编码)

* 要把黑窗口的勾勾选上。

* 设置用户名的密码:两行都是密码,第一行是密码,第二行是确认密码。

* 安装完成。

 

 

访问:

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

输入密码 回车

 

 

 

 

 

MySQL数据库Root密码重置

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服务

 

 

服务器,数据库,表之间的关系

 

 

 

 

语言解释

1)所谓安装数据库服务器,只是在机器上装了一个数据库管理程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。

2)为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。

3)数据库服务器、数据库和表的关系如图所示:

 

 

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

 

 

 

SQL语言

SQL语言简介

SQLStructured Query Language, 结构化查询语言

特点:非过程性语言

过程性语言:当前的这条语句执行需要依赖于上一条或几条语句

非过程性语言:可一条语句,就会执行一个结果。

 

为加强SQL的语言能力,各厂商增强了过程性语言的特征

OraclePL/SQL过程性处理能力

SQL ServerSybaseT-SQL

 

 

 

 

SQL是用来存取关系数据库的语言,具有查询、操纵、定义和控制关系型数据库的四方面功能

 

SQL分类

DDL (数据定义语言)

数据定义语言 - Data Definition Language

用来定义数据库的对象,如数据表、视图、索引等

比如创建数据库和创建表

DML  (数据操纵语言)

数据处理语言 - Data Manipulation Language

在数据库表中更新,增加和删除记录

update insert delete

DCL (数据控制语言)

数据控制语言 Data Control Language

指用于设置用户权限和控制事务语句

grantrevokeifelsewhilebegin transaction

DQL (数据查询语言)

数据查询语言 Data Query Language

Select

 

 

今天要完成任务(数据库增删改查(CRUD),表的增删改查,数据的增删改查)

它代表创建(Create)、更新(Update)、读取(Retrieve)和删除(Delete)操作。

 

创建数据库

 

 

CHARACTER SET:指定数据库采用的字符集

 

语法create database 数据名称;

      create database 数据库名称 character set编码

 

 

 

练习:

创建一个名称为mydb1的数据库。

   create database mydb1;

创建一个使用utf8字符集的mydb2数据库。

 create database mydb2 character set 'utf8';

 

 

查看、删除数据库

 

 

查看数据库 show databases;

查询数据库的定义 show create database 数据库;

show create database mydb2;

 删除数据库 drop database 数据库名称;

 

练习

   查看当前数据库服务器中的所有数据库

 show databases;

   查看前面创建的mydb2数据库的定义信息

 show create database mydb2;

   删除前面创建的mydb1数据库

 drop database mydb1;

 

 

 修改数据库与其他操作

   * 语法alter database 数据库 character set 编码;

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

alter database mydb2 character set 'gbk';

 其他的操作

* 切换数据库(*****use db_name;

* 查看当前使用的数据库 select database();

 

 

 

创建表(基本语句)

 

 

* 语法:

create table 表名(

字段1 类型(长度)约束,

字段2 类型(长度)约束,

字段3 类型(长度)约束,

字段4 类型(长度)约束

);

注意:

* 表名小括号,后面要有分号。

* 每一行字段后面要有逗号,但是最后一行没有逗号。

* 数据的类型后面有长度,如果是字符串类型,长度必须加。如果其他类型可以不加。默认长度。int默认长度11

 

 

 

 

public class User{

int id;

String name;

String pass;

String eamil;

String nikename;

}

数据的类型

 

字符串型  VARCHARCHAR

 * varcharchar区别:

* varchar(经常使用) 长度是可变的。 name varchar(8)存入数据hello,但是如果存入helloworld报错了。

* char 长度不可变的。   name char(8)存入的数据hello,如果不够用空格补全。

* 效率高:char效果。

大数据类型(一般不用)

 BLOBTEXT

 BLOB:二进制文件

 TEXT:字符

 数值型 TINYINT SMALLINTINTBIGINTFLOATDOUBLE

 逻辑性 对应boolean01

  BIT

日期型  DATETIMEDATETIMETIMESTAMP

* date 只包含日期

* time 只包含时分秒

* datetimetimestamp包含日期和时分秒区别:

* datetime需要手动录入时间。

* timestamp不传入数据,默认选择当前系统时间。

 

 

 

 

创建表练习

 

 

create table employee(

id int,

name varchar(20),

gender varchar(10),

birthday date,

entry_date date,

job varchar(100),

salary double,

resume text

);

 

使用desc 表名; 查看表的信息

 

 

定义单表字段的约束

* 主键约束

 * 标识标记该条记录。 通过pramary key声明主键。(默认唯一、非空)

 * auto_increment 数据库维护主键。自动增长。

* 唯一约束

* 值是唯一的。使用unique声明

* 非空约束

  * 值不能为空 not null

 

 

练习

创建新的标签employee2,把约束加上。

create table employee2(

id int primary key auto_increment,

name varchar(20) unique not null,

gender varchar(10) not null,

birthday date not null,

entry_date date not null,

job varchar(100) not null,

salary double not null,

resume text not null

);

 

 

其他表操作

  数据表删除

    语法:drop table 表名;

 

查看数据表结构

   desc 表名;查看表结构

   show tables ; 查看当前库内所有表名

   show create table 表名;查看建表语句和字符集

 

 

修改表

 

 

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语句    (增加数据)

Update语句  (更新数据)

Delete语句   (删除数据)

Select语句 (查找数据)

 

 

添加数据

 

* insert into 表名 (字段1,字段2,字段3..) values(1,2,3...); 有几列就插入多少的值。

* insert into 表名 values(1,2,3...); 插入所有的列

 * 注意:

  数据与字段的类型相同。

  字段长度需要控制。

  字符串或者日期类型需要使用' '

 

 

  user表中插入数据

insert into user values (1,'xiaofeng','1994-10-10','2011-1-1','HR',19000,'aaa','abc');

insert into user values (2,'美美','1994-10-10','2011-1-1','HR',19000,'aaa','abc');

insert into user values (3,'小风','1994-10-10','2011-1-1','WORKER',21000,'aaa','abc');

insert into user values (4,'芙蓉','1994-10-10','2011-1-1','HR',1000,'aaa','abc');

insert into user values (5,'班长','1994-10-10','2011-1-1','HR',100,'aaa','abc');

查看插入的数据:select * from

  解决中文乱码的问题

[client]

port=3306

[mysql]

default-character-set=gbk

  修改完需要重新启动服务

 

 

 

 

Update语句

 

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

 * 如果没有where条件,默认更新所有的记录。

 * where提交,选择某一条记录。

将所有员工薪水修改为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语句

 

如果不使用where子句,将删除表中所有数据。

Delete语句不能删除某一列的值(可使用update

使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。

insertupdate一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应该始终不要忘记这个潜在的问题。

外键约束

删除表中数据也可使用truncate table 语句,它和delete有所不同,参看mysql文档。

 

 

delete

语法:delete from 表名 [where ]; 删除数据

truncate 表名;删除所有的数据

* truncate delete的区别:

* truncate删除数据,先删除整个表。再创建一个新的空的表。(效率)

* delete删除数据,一条一条删除的。(*****

练习

删除表中名称为’班长’的记录。

* delete from user where username='班长';

删除表中所有记录。

* delete from user;

使用truncate删除表中记录。

* truncate user;

 

 

Select语句

 

select 指定查询哪些列的数据。

column指定列名。

*号代表查询所有列。

from指定查询哪张表。

DISTINCT可选,指显示结果时,是否剔除重复数据

 

 

 

* 语法:

select * from 表名; 查询所有(字段)

select 字段名1,字段名2,字段名3 from表名;     显示查询字段名

select DISTINCT 字段名 from表名;     去除重复的数据。

 

create table stu(

  

    id int primary key auto_increment,

 

    name varchar(20),

 

    math int,

  

    english int,

  

    chinese int

 

);

 

insert into stu values (null,'班长',18,11,62);

 

insert into stu values (null,'小风',98,91,92);

 

insert into stu values (null,'美美',68,81,52);

 

insert into stu values (null,'芙蓉',78,89,66);

 

insert into stu values (null,'班长',46,90,65);

查询表中所有学生的信息。

select * from stu;

查询表中所有学生的姓名和对应的英语成绩。

select name,english from stu;

过滤表中重复数据。(面试题)

select distinct english from stu;

 

 

Select语句

 

 

 

* 查询的列可以运算

 * 可以使用别名:使用as别名 并且as可以省略。

练习:

在所有学生分数上加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条件过滤

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

 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;

 

 

 

 

 

 

 

 

 

 

 

 

 

常用的符号

 

 

>   <   <=   >=   =    <>(不等于)

   in(范围内取内容)

   like -- 模糊查询 写法:like '_或者%'; _%区别:占位符。_只一个%可以有多个

   %的写法 like '%';结果XXX

like '%';结果张XXX

like '%%'; 只要有张就行

is null -- 判断是否为null

and -- 并且

or -- 或者

not -- 不成立

  练习

  查询英语分数在 8090之间的同学。

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 子句排序查询结果

 

使用order by 升序默认的(asc)/降序(desc)

* 出现select的语句末尾。

练习

对数学成绩排序后输出。

 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;

 

 

聚集函数-count

 

  

 

练习:

  统计一个班级共有多少学生?

 select count(*) from stu;

  统计数学成绩大于90的学生有多少个?

 select count(*) from stu where math > 90;

  统计总分大于150的人数有多少?

 select count(*) from stu where (math+english+chinese) > 150;

 

 

 

 

聚集函数-SUM

 

注意:sum仅对数值起作用,否则会报错。

注意:对多列求和,“,”号不能少。

ifnull(xxx,0) 如果为null,则值是0

 

 

sum 求和(忽略null值)可以同ifnull(xxx,0)

统计一个班级数学总成绩?

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 平均数

 练习:

   求一个班级数学平均分?

    select avg(math) from stu;

   求一个班级总分平均分

select avg(ifnull(math,0)+english+chinese) from stu;

 max 最大值

select max(math) from stu;

 

 min 最小值

select min(math) from stu;

 

 

 

 

 

 

 

 

 

 

create table orders(

id int,

product varchar(20),

price float

);

 

insert into orders(id,product,price) values(1,'电视',900);

insert into orders(id,product,price) values(2,'洗衣机',100);

insert into orders(id,product,price) values(3,'洗衣粉',90);

insert into orders(id,product,price) values(4,'桔子',9);

insert into orders(id,product,price) values(5,'洗衣粉',90);

insert into orders(id,product,price) values(6,'电视',900);

 

 group by 分组(一起使用) 条件过滤需要是having,不能使用where

练习:对订单表中商品归类后,显示每一类商品的总价.

 select product,count(*),sum(price) from orders group by product;

    练习:查询购买了几类商品,并且每类总价大于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 ... ;

顺序不能改变

 

 

 

 

 

 

 

 

 

 

                         Day23 mysql

 

数据库简介

什么是数据库

数据库就是一个文件系统,但是访问的时候需要使用标准SQL语句来访问数据。如果我们在本地安装,其实我们本地也是一个服务器,这个服务器只能存储数据。

 

关系型数据库

存储的都是实体与实体之间的关系。(用户,订单,商品)

 

 

可以通过ER模型图来描述之间的关系

 

 

常见的数据库

Oracle :甲骨文公司的数据库产品,大型的收费的数据库。

SQLServer :微软公司的数据库产品,中型的收费的数据库。

MySQL :是开源的,免费的数据库产品。在5.x版本是免费的,6.x是收费的。

DB2 IBM公司的数据库产品,大型的收费的数据库。

SyBASE :已退出了历史舞台,PowerDigener(数据库建模工具)

 

 

 

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

* 找到上面的两个路径,删除就ok了。

 

MySQL数据库的安装和配置(参考安装文档)

* 安装路径不要有中文(*****

* MySQL默认端口是3306,不要修改。

* 设置MySQL的编码集(采用UTF-8的编码)

* 要把黑窗口的勾勾选上。

* 设置用户名的密码:两行都是密码,第一行是密码,第二行是确认密码。

* 安装完成。

 

 

访问:

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

输入密码 回车

 

 

 

 

 

MySQL数据库Root密码重置

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服务

 

 

服务器,数据库,表之间的关系

 

 

 

 

语言解释

1)所谓安装数据库服务器,只是在机器上装了一个数据库管理程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。

2)为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。

3)数据库服务器、数据库和表的关系如图所示:

 

 

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

 

 

 

SQL语言

SQL语言简介

SQLStructured Query Language, 结构化查询语言

特点:非过程性语言

过程性语言:当前的这条语句执行需要依赖于上一条或几条语句

非过程性语言:可一条语句,就会执行一个结果。

 

为加强SQL的语言能力,各厂商增强了过程性语言的特征

OraclePL/SQL过程性处理能力

SQL ServerSybaseT-SQL

 

 

 

 

SQL是用来存取关系数据库的语言,具有查询、操纵、定义和控制关系型数据库的四方面功能

 

SQL分类

DDL (数据定义语言)

数据定义语言 - Data Definition Language

用来定义数据库的对象,如数据表、视图、索引等

比如创建数据库和创建表

DML  (数据操纵语言)

数据处理语言 - Data Manipulation Language

在数据库表中更新,增加和删除记录

update insert delete

DCL (数据控制语言)

数据控制语言 Data Control Language

指用于设置用户权限和控制事务语句

grantrevokeifelsewhilebegin transaction

DQL (数据查询语言)

数据查询语言 Data Query Language

Select

 

 

今天要完成任务(数据库增删改查(CRUD),表的增删改查,数据的增删改查)

它代表创建(Create)、更新(Update)、读取(Retrieve)和删除(Delete)操作。

 

创建数据库

 

 

CHARACTER SET:指定数据库采用的字符集

 

语法create database 数据名称;

      create database 数据库名称 character set编码

 

 

 

练习:

创建一个名称为mydb1的数据库。

   create database mydb1;

创建一个使用utf8字符集的mydb2数据库。

 create database mydb2 character set 'utf8';

 

 

查看、删除数据库

 

 

查看数据库 show databases;

查询数据库的定义 show create database 数据库;

show create database mydb2;

 删除数据库 drop database 数据库名称;

 

练习

   查看当前数据库服务器中的所有数据库

 show databases;

   查看前面创建的mydb2数据库的定义信息

 show create database mydb2;

   删除前面创建的mydb1数据库

 drop database mydb1;

 

 

 修改数据库与其他操作

   * 语法alter database 数据库 character set 编码;

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

alter database mydb2 character set 'gbk';

 其他的操作

* 切换数据库(*****use db_name;

* 查看当前使用的数据库 select database();

 

 

 

创建表(基本语句)

 

 

* 语法:

create table 表名(

字段1 类型(长度)约束,

字段2 类型(长度)约束,

字段3 类型(长度)约束,

字段4 类型(长度)约束

);

注意:

* 表名小括号,后面要有分号。

* 每一行字段后面要有逗号,但是最后一行没有逗号。

* 数据的类型后面有长度,如果是字符串类型,长度必须加。如果其他类型可以不加。默认长度。int默认长度11

 

 

 

 

public class User{

int id;

String name;

String pass;

String eamil;

String nikename;

}

数据的类型

 

字符串型  VARCHARCHAR

 * varcharchar区别:

* varchar(经常使用) 长度是可变的。 name varchar(8)存入数据hello,但是如果存入helloworld报错了。

* char 长度不可变的。   name char(8)存入的数据hello,如果不够用空格补全。

* 效率高:char效果。

大数据类型(一般不用)

 BLOBTEXT

 BLOB:二进制文件

 TEXT:字符

 数值型 TINYINT SMALLINTINTBIGINTFLOATDOUBLE

 逻辑性 对应boolean01

  BIT

日期型  DATETIMEDATETIMETIMESTAMP

* date 只包含日期

* time 只包含时分秒

* datetimetimestamp包含日期和时分秒区别:

* datetime需要手动录入时间。

* timestamp不传入数据,默认选择当前系统时间。

 

 

 

 

创建表练习

 

 

create table employee(

id int,

name varchar(20),

gender varchar(10),

birthday date,

entry_date date,

job varchar(100),

salary double,

resume text

);

 

使用desc 表名; 查看表的信息

 

 

定义单表字段的约束

* 主键约束

 * 标识标记该条记录。 通过pramary key声明主键。(默认唯一、非空)

 * auto_increment 数据库维护主键。自动增长。

* 唯一约束

* 值是唯一的。使用unique声明

* 非空约束

  * 值不能为空 not null

 

 

练习

创建新的标签employee2,把约束加上。

create table employee2(

id int primary key auto_increment,

name varchar(20) unique not null,

gender varchar(10) not null,

birthday date not null,

entry_date date not null,

job varchar(100) not null,

salary double not null,

resume text not null

);

 

 

其他表操作

  数据表删除

    语法:drop table 表名;

 

查看数据表结构

   desc 表名;查看表结构

   show tables ; 查看当前库内所有表名

   show create table 表名;查看建表语句和字符集

 

 

修改表

 

 

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语句    (增加数据)

Update语句  (更新数据)

Delete语句   (删除数据)

Select语句 (查找数据)

 

 

添加数据

 

* insert into 表名 (字段1,字段2,字段3..) values(1,2,3...); 有几列就插入多少的值。

* insert into 表名 values(1,2,3...); 插入所有的列

 * 注意:

  数据与字段的类型相同。

  字段长度需要控制。

  字符串或者日期类型需要使用' '

 

 

  user表中插入数据

insert into user values (1,'xiaofeng','1994-10-10','2011-1-1','HR',19000,'aaa','abc');

insert into user values (2,'美美','1994-10-10','2011-1-1','HR',19000,'aaa','abc');

insert into user values (3,'小风','1994-10-10','2011-1-1','WORKER',21000,'aaa','abc');

insert into user values (4,'芙蓉','1994-10-10','2011-1-1','HR',1000,'aaa','abc');

insert into user values (5,'班长','1994-10-10','2011-1-1','HR',100,'aaa','abc');

查看插入的数据:select * from

  解决中文乱码的问题

[client]

port=3306

[mysql]

default-character-set=gbk

  修改完需要重新启动服务

 

 

 

 

Update语句

 

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

 * 如果没有where条件,默认更新所有的记录。

 * where提交,选择某一条记录。

将所有员工薪水修改为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语句

 

如果不使用where子句,将删除表中所有数据。

Delete语句不能删除某一列的值(可使用update

使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。

insertupdate一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应该始终不要忘记这个潜在的问题。

外键约束

删除表中数据也可使用truncate table 语句,它和delete有所不同,参看mysql文档。

 

 

delete

语法:delete from 表名 [where ]; 删除数据

truncate 表名;删除所有的数据

* truncate delete的区别:

* truncate删除数据,先删除整个表。再创建一个新的空的表。(效率)

* delete删除数据,一条一条删除的。(*****

练习

删除表中名称为’班长’的记录。

* delete from user where username='班长';

删除表中所有记录。

* delete from user;

使用truncate删除表中记录。

* truncate user;

 

 

Select语句

 

select 指定查询哪些列的数据。

column指定列名。

*号代表查询所有列。

from指定查询哪张表。

DISTINCT可选,指显示结果时,是否剔除重复数据

 

 

 

* 语法:

select * from 表名; 查询所有(字段)

select 字段名1,字段名2,字段名3 from表名;     显示查询字段名

select DISTINCT 字段名 from表名;     去除重复的数据。

 

create table stu(

  

    id int primary key auto_increment,

 

    name varchar(20),

 

    math int,

  

    english int,

  

    chinese int

 

);

 

insert into stu values (null,'班长',18,11,62);

 

insert into stu values (null,'小风',98,91,92);

 

insert into stu values (null,'美美',68,81,52);

 

insert into stu values (null,'芙蓉',78,89,66);

 

insert into stu values (null,'班长',46,90,65);

查询表中所有学生的信息。

select * from stu;

查询表中所有学生的姓名和对应的英语成绩。

select name,english from stu;

过滤表中重复数据。(面试题)

select distinct english from stu;

 

 

Select语句

 

 

 

* 查询的列可以运算

 * 可以使用别名:使用as别名 并且as可以省略。

练习:

在所有学生分数上加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条件过滤

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

 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;

 

 

 

 

 

 

 

 

 

 

 

 

 

常用的符号

 

 

>   <   <=   >=   =    <>(不等于)

   in(范围内取内容)

   like -- 模糊查询 写法:like '_或者%'; _%区别:占位符。_只一个%可以有多个

   %的写法 like '%';结果XXX

like '%';结果张XXX

like '%%'; 只要有张就行

is null -- 判断是否为null

and -- 并且

or -- 或者

not -- 不成立

  练习

  查询英语分数在 8090之间的同学。

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 子句排序查询结果

 

使用order by 升序默认的(asc)/降序(desc)

* 出现select的语句末尾。

练习

对数学成绩排序后输出。

 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;

 

 

聚集函数-count

 

  

 

练习:

  统计一个班级共有多少学生?

 select count(*) from stu;

  统计数学成绩大于90的学生有多少个?

 select count(*) from stu where math > 90;

  统计总分大于150的人数有多少?

 select count(*) from stu where (math+english+chinese) > 150;

 

 

 

 

聚集函数-SUM

 

注意:sum仅对数值起作用,否则会报错。

注意:对多列求和,“,”号不能少。

ifnull(xxx,0) 如果为null,则值是0

 

 

sum 求和(忽略null值)可以同ifnull(xxx,0)

统计一个班级数学总成绩?

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 平均数

 练习:

   求一个班级数学平均分?

    select avg(math) from stu;

   求一个班级总分平均分

select avg(ifnull(math,0)+english+chinese) from stu;

 max 最大值

select max(math) from stu;

 

 min 最小值

select min(math) from stu;

 

 

 

 

 

 

 

 

 

 

create table orders(

id int,

product varchar(20),

price float

);

 

insert into orders(id,product,price) values(1,'电视',900);

insert into orders(id,product,price) values(2,'洗衣机',100);

insert into orders(id,product,price) values(3,'洗衣粉',90);

insert into orders(id,product,price) values(4,'桔子',9);

insert into orders(id,product,price) values(5,'洗衣粉',90);

insert into orders(id,product,price) values(6,'电视',900);

 

 group by 分组(一起使用) 条件过滤需要是having,不能使用where

练习:对订单表中商品归类后,显示每一类商品的总价.

 select product,count(*),sum(price) from orders group by product;

    练习:查询购买了几类商品,并且每类总价大于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 ... ;

顺序不能改变

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值