数据库DB概述
什么是数据库?
-
数据库(DB)就是存储数据的仓库。
-
数据库本质上是一个文件系统,以文件的方式(使用了对应的数据结构组织数据)存在服务器的电脑上
数据库优点、缺点
优点
- 数据可以永久保存
- 查询速度快
- 对数据管理方便
缺点
- 占用资源,需要花钱
选用MySQL原因
- 免费
- 功能强大
MySQL安装过程省略
数据库管理系统DBMS
DataBase Management System
概述
操作和管理数据库的软件,用于建立、使用、维护、查询统计数据库等操作功能,对数据库进行统一管理和控制,保证数据库的安全性和完整性。
1.一个数据库服务器包含多个库
2.一个数据库包含多张表
3.一张表包含多条记录
结构化查询语言SQL
Structured Query Language
定义了操作所有关系数据库的规则
SQL通用语法
- SQL可以单行或多行书写,以分号结尾
- 可以使用空格和缩进来增强语句的通畅
MySQL的语法
- SQL中不区分大小写,一般建议关键字用大写
- 注释:–空格 单行注释 /* */ 多行注释 # mysql特有的注释
SQL语句分类
Data Definition Language
(DDL 数据定义语言) //建库 ,建表Data Manipulation Language
(DML 数据操纵语言) //对表中的记录操作增删改Data Query Language
(DQL 数据查询语言) //对表中查询操作
链接:DQL详解用法Data Control Language
(DCL 数据控制语言) //用户权限的设置
链接:DCL概述用法
DDL
操作数据库,表
操作库
- 创建(create)
1.创建数据库
* CREATE DATABASE 数据库名;
2.创建数据库。判断是否存在,不存在则进行创建数据库
* CREATE DATABASE IF NOT EXISTS 数据库名;
3.创建数据库,指定字符集
* CREATE DATABASE 数据库名 CHARACTER SET 字符集;
-- 创建数据库K1
create database K1;
-- 判断是否存在,不存在则创建数据库K2
create database if not exists K2;
-- 创建数据库,指定字符集为gbk
create database K3 default character set gbk;
-
查询(retrieve)
1.查询所有数据库的名称 * show databases; 2.查询某个数据库的字符集,查询某个数据库的创建语句 * show create database 数据库名称; -- 参看所有的数据库 show database; -- 查看某个数据库的定义信息 show create database K1; show create database K2; # 按tab键可以自动补全关键字
- 修改(update)
修改数据库的字符集 * alter database 数据库名称 character set 字符集名称; -- 将K2数据库字符集修改为utf8 alter database K2 character set utf8;
- 删除(delete)
1.删除数据库 * drop database 数据库名称; 2.判断数据是否存在,存在则删除 * drop database if exists 数据库名称; -- 删除K1数据库 drop database K1;
- 使用数据库
mysql
1.查询当前正在使用的数据库名称
* select database();
2.使用数据库
* use 数据库名称;
-- 改变要使用的数据库
use K4;
操作表
- 数据库类型
1.int :整数类型
age int,
2.double:小数类型
score double(3,1)
#表示一共3位,小数点保留1位
3. varchar:字符串
name varchar(20):姓名最大10个字符
#例如xuanyue 7个字符 轩月 2个字符
4.timestamp:时间戳类型 包含年月日时分秒
#yyyy-MM-dd HH:mm:ss
#如果不给字段赋值或者赋值为null,默认使用系统时间自动赋值
5.datetime:日期,包含年月日时分秒
#yyyy-MM-dd HH:mm:ss
6.date:日期,年月日 #yyyy-MM-dd
- 创建(create)
语法:
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
....
列名n 数据类型n #最后一行不需要加逗号,
);
复制表:
create table 表名 like 被复制的表名;
-- 创建表
create table student(
id int,
name varchar(33),
age int ,
score double(6,2),
birthday date,
insert_time timestamp
);
- 查询(retrieve)
1.查询某个数据库中所有的表名称
* show tables;
2.查询表结构
* desc 表名;
- 修改(update)
1. 修改表名
alter table 表名 rename to 新的表名;
2. 修改表的字符集
alter table 表名 character set 字符集名称;
3. 添加一列
alter table 表名 add 列名 数据类型;
4. 修改列名
alter table 表名 change 列名 新列名。 新数据类型;
5.修改列类型 MODIFY
alter table 表名 modify 列名 新数据类型;
- 删除(delete)
1.删除列
alter table 表名 drop 列名;
2.删除表名
* drop table 表名;
3.判断表是否存在,如果存在则删除表
* drop table if exists 表名 ;
DML
增删改表中数据MySQL基础
- 添加(插入)
1.所有的列名都写出来
* insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
# 列名与值要一一对应
#除了数字类型,其他类型需要使用引号(单双都可以)
2.不写列名
* insert into 表名 values(值1,值2,...值n);
#默认给所有列添加值,没有添加数据的列会使用NULL
-- 注意事项
1.插入的数据应该与列的数据类型相同
2.数据的大小不能超过所规定的范围
3.字符和日期型数据应包含在单引号中,mysql中双引号可作分隔符
4.不指定列或使用 null,表示插入空值。
- 删除
1.不带条件删除数据
DELETE FROM 表名;
2.带条件删除数据
DELETE FROM 表名 WHERE 字段名=值;
-- 注意
如果不加 where条件,将会删除表中所有数据
3.使用 truncate 删除表中所有记录
TRUNCATE TABLE 表名;
-- truncate 和 delete 的区别
truncate只能删除整个表,delete 可以带where条件
- 修改(更新)
1.不带条件修改数据
UPDATE 表名 SET 字段名=值; -- 修改所有的行
2.带条件修改数据
UPDATE 表名 SET 字段名=值 WHERE 字段名=值;
DQL
查询表中的记录
select * from 表名;
语法:
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
- 简单查询
1.使用*表示所有列
SELECT * FROM 表名;
-- 查询所有学生
select * from student;
2.查询指定列
SELECT 字段名 1, 字段名 2, 字段名 3, ... FROM 表名;
-- 查询Student表中 name 和 age列
select name,age from student;
- 指定列的别名进行查询
1.对列指定别名
SELECT 字段名 1 AS 别名1, 字段名 2 AS 别名2... FROM 表名;
-- 使用别名
select name as 姓名,age 年龄 from student;
2.对列和表同时指定别名
SELECT 字段名 1 AS 别名, 字段名 2 AS 别名... FROM 表名 AS 表别名;
-- 表使用别名,可用于多表查询
select name as 姓名,age 年龄 from student as stu;
- 去除重复
查询指定列并且结果不出现重复数据
SELECT DISTINCT 字段名 FROM 表名;
-- 查询学生的生源地
select address from student;
-- 去掉重复的地方
select distinct address Student;
- 查询结果参与计算、计算列
1.一般可以使用四则运算计算一些列的值
2.ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
表达式1:哪个字段需要判断是否为null
如果该字段为null后的替换值。
1.某列数据和固定值运算
SELECT 列名 1 + 固定值 FROM 表名;
2.某列数据和其他列数据参与运算
SELECT 列名 1 + 列名 2 FROM 表名;
-- 参与运算必须是数值类型
- 条件查询
运算符
IS NULL
and 或 &&
or 或 ||
not 或 !
LIKE:模糊查询
占位符:
_:单个任意字符
%:多个任意字符
-- 查询年龄大于30岁
select * from student where age >30;
select * from student where age >=30;
-- 查询年龄等于30岁
select * from student where age =30;
-- 查询年龄不等于30岁
select * from student where age !=30;
select * from student where age <>30;
-- 查询年龄大于等于30 小于等于40
select * from student where age >=30 && age <=40;
select * from student where age >=30 and age <=40;
select * from student where age between 30 and 40;
-- 查询年龄18岁,22岁,32岁的信息
select * from student where age =18 or age= 22 or age = 32;
select * from student where age in(18,22,32);
-- 查询数学成绩为null
select * from student where math is null;
-- 查询数学成绩不为null
select * from student where math is not null;
-- 查询姓罗的有哪些? like模糊查询
select * from student where name like '罗%';
select * from student where name like '罗';
-- 查询姓罗,且姓名有三个字的学生
select * from student where name like '罗__';
-- 查询姓名第二个字是月的人
select * from Student where name like '_月%';
-- 查询姓名是3个字的人
select * from Student where name like '___';
-- 查询姓名中包含轩的人
select * from student where name like '%轩%';