数据库的基本概念
1.数据库的英文单词:DataBase 简称:DB
2.什么数据库?
用于存储和管理数据的仓库
3.数据库的特点:
持久化存储数据的。其实数据库就是一个文件系统
方便存储数据
使用了统一的方式操作数据库——SQL
4.MySQL登录
在cmd下输入:
1.mysql -uroot -p密码
2.mysql -hip -uroot -p连接目标的密码
3.mysql --host=ip --user=root --password=连接目标的密码
5.MySQL退出
1.exit
2.quit
SQL
什么是SQL?
Structured Query Language:结构化查询语言
其实就是定义了操作所有关系型数据库的规则。每种数据库操作的方式存在不一样的地方,称为“方言”。
SQL通用语法
1.SQL语句可以单行或多行书写,以分号结尾。
2.可使用空格和缩进来增强语句的可读性。
3.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
4.3种注释
*单行注释:-- 注释内容 或 # 注释内容(MySQL独有)
*多行注释:
/*注释*/
SQL分类
1) DDL(Data Definition Language)数据定义语言
用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等
2) DML(Data Manipulation Language)数据操作语言
用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等
3) DQL(Data Query Language)数据查询语言
用来查询数据库中表的记录(数据)。关键字:select, where 等
4) DCL(Data Control Language)数据控制语言(了解)
用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等
DDL:操作数据库、表
1.操作数据库(CRUD)
1、C(create):创建
*创建数据库:
*create database 数据库名称;
*创建数据库,判断不存在,再创建
*create database if not exists 数据库名称;
*创建数据库,并指定字符集
*create database 数据名称 character set 字符集名;
具体操作:
--直接创建数据库db1
create database db1;
--创建数据库,判断不存在,再创建db2
create database if not exists db2;
--创建数据库并指定字符集为gbk
create database db3 default character set gbk;
2、R(Retrive):查询
*查询所有数据库名称:
*show databases;
*查询某个数据库的字符集:查询某个数据库的创建语句:
*show create database 数据库名称;
3、U(Update):修改
*修改数据库的字符集:
*alter create database 数据库名称 character set 字符集名称;
具体操作:
--将db3数据库的字符集改成utf8:
alter create database db3 character set utf8;
4、D(Delete):删除
*删除数据库:
*drop database 数据库名称;
*判断数据库是否存在,存在再删除
*drop database if exists 数据库名称;
具体操作:
--删除db2数据库
drop database db2;
5、使用数据库
*查询当前正在使用的数据库名称:
*select database();
*使用数据库:
*use 数据名称;
2.操作表
1、D(Create)创建:
1、语法:
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
···
列名n 数据类型n
);
*注意:最后一列,不需要加(,)逗号
*数据类型:
1、int:整数类型
*age int,
2、double:小数类型
*score double(5,2);
3、date:日期,只包含年月日,yyyy-MM-dd
4、datetime:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss
5、timestamp:时间错类型,包含年月日时分秒 yyyy-MM-dd HH:mm:ss
*如果将来不给这个字段赋值或赋值为null,则默认使用当前系统的时间,来自动赋值。
6、varchar:字符串
*name varchar(20):姓名最大20个字符
*复制表:
*create table 表名 like 被复制的表名;
2、R(Retrieve)查询
*查询某个数据库中所有表的名称
*show tables;
*查询表结构
*desc 表名;
*查询创建表的SQL语句
*show create table 表名;
3、U(Update)修改
1、修改表名
*alter table 表名 rename to 新的表名
2、修改表的字符集
*alter table 表名 character set 新字符集名称
3、添加一列
*alter table 表名 add 列名 数据类型
4、修改列名称类型
*alter table 表名 change 列名 新列别 新数据类型
*alter table 表名 modify 列名 新数据类型
5、删除列
*alter table 表名 drop 列名
4、D(Delete)删除
*drop table 表名;
*drop table if exists 表名;
DML:增删改表中的数据
1、添加数据
*语法
*insert into 表名(列名1,列名2,···列名n) value (值1,值2···值n);
*注意:
1、列名和值要一一对应
2、如果表名后,不定义列名,则默认给所有列添加值
insert into 表名 value (值1,值2···值n);
3、除了数字类型,其他值都需要使用引号(单引号双引号都可)引起来。
2、删除数据
*语法:
*delete from 表名 where 条件;
*注意:
1、如果不加条件,则删除表中所哟记录。
2、如果要删除所有记录
1、delete from 表名;--不推荐使用。这个语句有多少记录就会执行多少次删除
2、TRUNCATE TABLE 表名;--推荐使用,效率高,先删除表再创建一张一样的表
3、修改数据
*语法:
*update 表名 set 列名1=值1,列名2=值2,··· where 条件;
*注意:
1、如果不加条件,则会将表中所有记录全部修改
DQL:查询表中的记录
*select * from 表名;
1、语法:
select 字段列表
from 表名列表
where 条件列表
group by 分组列表
having 分组之后的条件
limit 分页限定
2、基础查询
1、多个字段的查询
select 字段1,字段2,··· from 表名;
*注意:
*如果查询所有字段,则可以使用*代替字段列表。
2、去除重复
*distinct
3、计算列
*一般可以使用四则运算计算一些列的值(一般只会进行数值型的计算)
*if null(表达式1,表达式2):null参与的运算,计算结果为null
*表达式1:哪个字段需要判断是否为null
*表达式2:如果该字段为null后的替换值
4、起别名
*as :as也可以省略
具体操作:
--查询所有的学生
select * from student;
--查询student表中的name和age列
select name,age from student;
--使用别名
select name as 姓名,age as 年龄 from student;
--查询学生来自那些地方
select address from srudent;
--去掉重复的记录
select distinct address from student;
3、条件查询
1、where 后跟条件
2、运算符
*>,<,<=,>=,=,<>
*BETWEEN ···AND
*IN(集合)
*LIKE 模糊查询
*占位符:
*_:单个任意符;
*%:多个任意符;
*IS NULL
*and 或 &&
*or 或 ||
*not 或 !
4、排序查询:
*语法:
*order by 排序字段1,排序方式1,排序字段2,排序方式2···
*排序方式:
ASC:升序,默认
DESC:降序
*注意:
*如果有多个排序条件,则当前条件值一样是才会判断第二个条件
5、聚合函数:将一列数据作为一个整体,进行纵向的计算。
1. count:计算个数
1. 一般选择非空的列:主键
2. count(*)
2. max:计算最大值
3. min:计算最小值
4. sum:计算和
5. avg:计算平均值
* 注意:聚合函数的计算,排除null值。
解决方案:
1. 选择不包含非空的列进行计算
2. IFNULL函数
6、分组查询:
1. 语法:group by 分组字段;
2. 注意:
1. 分组之后查询的字段:分组字段、聚合函数
2. where 和 having 的区别?
1. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。
-- 按照性别分组。分别查询男、女同学的平均分
SELECT sex , AVG(math) FROM student GROUP BY sex;
-- 按照性别分组。分别查询男、女同学的平均分,人数
SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;
-- 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组
SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex;
-- 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2个人
SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;
SELECT sex , AVG(math),COUNT(id) 人数 FROM student WHERE math > 70 GROUP BY sex HAVING 人数 > 2;
7、分页查询
1. 语法:limit 开始的索引,每页查询的条数;
2. 公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
-- 每页显示3条记录
SELECT * FROM student LIMIT 0,3; -- 第1页
SELECT * FROM student LIMIT 3,3; -- 第2页
SELECT * FROM student LIMIT 6,3; -- 第3页
3. limit 是一个MySQL"方言"