笔记-JavaWeb学习之旅2
数据库的基本概念
1.数据库:database 简称 db,用于存储和管理数据的仓库
特点:
1.持久化存储数据的,其实数据库就是一个文件系统,
2.方便存储和管理数据
3.使用了统一操作数据库 --sql
sql通用语法
sql语句可以单行或多行书写,以分号结尾
可使用空格和缩进来增强可读性
mysql数据库的sql语句不区分大小写,关键字建议大写
-
3种注释
单行注释: -- 注释内容 或 # 注释内容
多行注释 :/* 注释*/
sql分类:
- ddl(data definition language)数据定义语言,用来定义数据库对象:数据库表,列等。关键字: create,drop,alter等
- dml(data maipulation language)数据操作语言,用来对数据库中表的数据进行增删改,关键字:insert,delete,update等
- dql(data query language)数据查询语言,用来查询数据库中表的记录,关键字:select ,where等
- dcl(data control language)数据控制语言,用来定义数据库的访问权限和安全级别,级及创建用户,关键字:grant,revoke等
ddl:操作数据库、表
操作数据库
-
c(create):创建
创建数据库 create database 数据库名称;
-
创建数据库,判断不存在在创建
create database if not exists 数据库名称;
-
创建数据库,并制定字符集
create database 数据库名称 character set 字符集名:
-
r(retrieve):查询
-
查询所有数据库的名称
show databases;
-
查询某个数据库的字符集:
show create database 数据库名称;
-
-
u(update):修改
-
修改数据库的字符集
alter database 数据库名称 character set 字符集名称;
-
-
d(delete):删除
-
删除数据库
drop database 数据库名称;
-
判断数据库存在,存在再删除
drop database if exists 数据库名称;
-
-
使用数据库
-
查询当前正在使用的数据库名称
select database();
-
使用数据库
use 数据库名称;
-
操作表
-
c(create):创建
-
语法:
-
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
.....
列名n 数据类型n
);
注意:最后一列,不需要加逗号
数据库常用类型:
- int: 整数类型
- double:小数类型
- date 日期类型,只包含年月日 ,
- datatime:日期类型,包含年月日时分秒
- timestamp:时间错类型 包含年月日时分秒(如果不给这个字段赋值,或赋值为null,则默认使用当前系统的时间)
- varchar:字符串
复制表:create table 新的表名 like 被复制的表名;
- int: 整数类型
-
-
-
r(retrieve):查询
查询某个数据库中所有的表名 show tables;
-
查询表结构
desc 表名;
-
u(update):修改
-
修改表名
alter table 表名 rename to 新的表名;
-
修改表的字符集
alter table 表名 character set 字符集名称;
-
添加一列
alter table 表名 add 列名 数据类型;
-
修改列名称 和数据类型
alter table 表名 change 旧的列名 新列名 新数据类型;
alter table 表名 modify 列名 新数据类型(这种方式只改数据类型);
-
删除列
alter table 表名 drop 列名;
-
-
d(delete):删除
- drop table 表名;
- drop table if exists 表名;
create table student( id int,-- 列名id 数据类型 int name varchar(32),-- 列名 数据类型字符串varchar,字符串数据类型要指定长度 age int, score double(4,1), birthday date, insert_time timestamp -- 不要加逗号 );
dml:增删改表中数据
-
添加数据:
语法:insert into 表名(列名1,列名2,,...列名n)values(值1,值2,...值n);
注意
- 列名和值都要一一对应
- 如果表名后,不定义列名,则默认给所有列添加值
- 除了数字类型,其他类型都需要使用引号(单双都可以)引起来
-
删除数据
语法:
delete from 表名[where 条件]
如果不加条件,则删除表中所有记录
-
修改数据
语法:
update 表名 set 列名1 = 值1 ,列名2 = 值2,....[where 条件];
如果不加任何条件,则会将表中所有记录全部修改
dql:查询语句
-
排序查询
语法:
select *from 表名 order by 排序字段1 排序方式1,排序字段 排序方式2...
排序方式:
asc:升序,磨人的
desc:降序
注意:
如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件
-
聚合函数
- count:计算个数 select count(列名) from 表名;
- max:计算最大值 select max(列名) from 表名;
- min:计算最小值 select min(列名) from 表名;
- sum:计算和 select sum(列名) from 表名;
- avg:计算平均值 select avg(列名) from 表名;
-
分组查询
1.语法:group by分组字段;
2.注意:
分组之后查询的字段:分组字段、聚合函数
-
where和having的区别
1.where在分组之前就已经限定了(筛选出条件不满足的)having在分完组之后在进行限定,又一次筛选出不满足的
2.where后不可以跟聚合函数,having可以跟聚合函数
desc student; select*from student; insert into student values(9,'小乔',17,'女','建业',83,95); -- 把男女分为两组,然后按照性别来求他们的数学平均分 select sex,avg(math) from student group by sex; -- sex是数组字段,avg(math)是聚合函数,count(id)也是聚合函数 -- max(english)也是聚合函数,现在可以求出他们分组后的,分组后的,分组后的所需的各种值 -- 把男女分为两组,然后按照性别来求他们的数学平均分 -- 把他们分为两组之后他们的一组都有多少人 select sex,avg(math),count(id),max(english) from student group by sex; -- 要求分数大于90分的才参与分组 select sex,avg(math),count(id),max(english) from student where math >90 group by sex; update student set math=95 where id=9; -- 要求分组后的人数大于2个人,才参入求数学平均分,分组后的人数,英语最大值 select sex,avg(math) ,count(id) ,max(english) from student where math >90 group by sex having count(id)>2; -- 可以对分组后的聚合函数后面可以加别名 select sex,avg(math) 平均分,count(id) 人数,max(english)最大值 from student where math >90 group by sex having count(id)>2; --
-
分页查询
- 语法:limit 开始的索引,每页查询的条数;
- 公式:开始的索引= (当前的页码-1)*每页显示的条数
dql:查询表中的记录
-
语法
select
字段列表(name ,age,sex)
from
表名列表
where
条件列表
group by
分组查询
having
分组后的条件
order by
排序
limit
分页限定
-
基础查询
-
多个字段的查询
select 字段名1,....from 表名;
-
去除重复
distinct
-
计算列
一般可以使用四则运算计算列与列之间的值
ifnull(表达式1,表达式2):表达式1表示的是哪个字段,如果该字段为null,则使用表达式2来替代null
-
其别名
as
-
-- 去除重复的结果集 select distinct address from student; -- 计算math和english的和 select name,math+english from student; select name,math 数学,english 英语,math+english 总分 from student;
条件查询
where子句后跟条件
运算符>,<,<=,>=,=,<>,,between...and ,in(集合),like, is null adn或&&,or或||,not或!
表的约束
- 主键约束:primary key
- 非空约束:not null
- 唯一约束:unique
- 外键约束:foreign key
非空约束:
-- 非空的作用:被修饰的列不能为null -- 非空约束的创建 在创建表示添加非空约束 create table stu( id int not null, -- id为非空 name varchar(20) ); -- 在表创建完之后添加非空 alter table stumodify name varchar(20) not null; -- name为非空
唯一约束
-- 唯一约束的作用:被修饰的列的值不能重复 -- 创建表时,添加唯一元素 create table stu( id int, phome_number varchar(20) unique -- 添加了唯一元素 ); -- 在表创建后添加唯一约束 alter table stu modify phone number varchar(20) unique; -- 删除唯一约束 alter table stu drop index phone_number;
主键约束
create table stu( id int primary key auto_increment, -- 给id添加主键约束,auto_increment自动增长 name varchar(20) ); -- 删除主键 alter table stu drop primary key; -- 创建表后,添加主键 alter table stu modiey id int primary key; -- 删除自动增长 alter table stu modiey id int; -- 添加自动增长 alter table stu modiey id int auto_increment;
外键约束
-- 外键约束作用:让表与表之间产生关系,从而保证数据的正确性 create table 表名( .... 外键列 constraint 外键名称 foreign key (外键列名称) references 主表名称(注表列名称) ); -- 删除外键 alter table 表名 drop foreign key 外键名称; -- 创建之后,添加外键 alter table 表名 add constraint 外键名称 foreign key (外键列名称) references 主表名称(注表列名称) -- 级联操作 -- 作用,列被修改后被关联的另外一条列也会被更改 -- 添加方法 alter table 表名 add alter table 表名 add constraint 外键名称 foreign key (外键列名称) references 主表名称(注表列名称) on update cascade on delete cascade; on update cascade;级联更新,更新一条列,被关联的列也会被更新 on update cascade;级联删除,删除一条列,被关联的列也会被删除
下一篇: 小米“小仙女”CC9邀请函快速开箱