数据库概括
数据库:面向关系 使用 二维表格来存储数据。
Oracle数据库:甲骨文
MySQL :甲骨文
DB2:IBM
SQL Server:微软
数据库管理
关系型数据库管理系统:RDBMS
即 数据库服务器
仓库 + 管理员
数据库表就是一个多行多列的表格
-
表结构,对列名称列类型进行定义
-
表记录,数据
注意:MySQL 中编码UTF8 没有-
要点:
-
SQL,结构化查询语言
-
SQL,客户端使用SQL来操作服务器
-
SQL标准(国际化标准组织ISO),对DBMS的统一操作方式
-
SQL方言,有一些自己独特的语法,只能本身数据库才能使用
SQL语法
-
SQL语句可以在单行或多行书写,以分号结尾
-
可使用空格和缩进来增强语句的可读性
-
MySQL不区分大小写,建议使用大写
SQL语句分类
-
DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库,表,列等,创建,删除,修改:库,表结构
-
DML(Data Manipulation Language):数据操作语言,用来定义数据库的数据(记录):增,删,改:表记录
-
DCL(Data Control Language):数据库控制语言,用来定义访问权限和安全级别
-
DQL(Data Qurery Language):数据库查询语言,用来查询记录(数据)
DDL 语法
这里的数据库就是MySQL的某仓库
查看所有数据库:SHOW DATABASES
切换数据库:USE 数据库名(查询表,得先切换到有这个表的数据库中)
创建数据库:CREATE DATABASE 【IF NOT EXISTS (这句可加可不加,加了如果已经有这个数据库了,就不会创建,但是语句执行了不会报错)】 mydb1 【CHARSET=UTF8(默认就是utf8)】
删除数据库:DROP DATABASE【IF EXISTS】 + 数据库名称
修改数据库编码:ALTER DATABASES mydb1 CHARACTER SET UTF8
数据类型
每一个表中的列,需要一个数据类型
-
int 整型
-
double 浮点型 例如double(5,2)表示最多5位数,小数必须俩位,这样这个最大值为999.99
-
decimal 浮点型 (金钱方面)在表单钱方面使用该类型,因为不会出现精度缺失问题
-
char 固定长度字符串类型:
-
最大 char(255),长度不能变。不到长度的会补足到指定长度
-
varchar:可变长度字符串类型 ,最大 varchar(65535),需要用额外字节空间记录长度
MySQL特有类型,字符串类型,范围比较大分为四种
-
tinytext 2^8 - 1
-
text 2 16 -1
-
mediumtext 2 24-1
-
longtext 2 32-1
字节类型:
也有四种
还有 不可变的
和上面类似 自己查
日期类型
- 日期类型 data 格式:xxxx-xx-xx
- 时间类型 time 格式:xx:xx:xx
- 时间戳类型 timestamp 日期时间都有
表的操作
创建表:CREATE TABLE 表名()
括号里面需要有表结构:
列名 列类型,
列名 列类型
查看当前数据库中所有的表名称:SHOW TABLES
查看指定表的创建语句:SHOW CREATE TABLE 表名
查看表结构:DESC 表名
删除表:DROP TABLE 表名
修改表: ALTER TABLE 表名
后面加这些
– 添加列 :ADD (列名 列类型,列名 列类型)
– 修改列类型:MODIFY 列名 列类型
– 删除列:DROP 列名
– 修改表名称:RENAME TO 新表名
DQL:查询表记录
查询表记录:SELECT*FROM 表名
DML (数据操作语言,对表记录的操作)
插入数据:INSERT INTO 表名 (列名,列名,列名) VALUES(列值,列值,列值)
列值列名是对应的
注意:若有部分没有指定插入的列名,默认为null。
若都没有指定列名,默认插入所有列,且与表列的顺序一致
注意:在数据库中所有的字符串类型,必须使用单引号。日期类型也要使用单引号。JAVA中是双引号
修改数据:
UPDATA 表名 SET 列名 = 列值 (这里=是赋值)(条件)WHERE 列名 = 列值 (这里=是是否相等)
条件必须是一个boolean型的值或者表达式
条件中 = 与JAVA 中 == 相同
BETWEEB ...AND 区间
IN('','')类似集合里面满足一个就行
在条件中不能使用 = null,一直是为false,只能用 is null (is not null)
删除记录:
DELETE FROM 表名 WHERE xxx
DCL
一个项目创建一个用户,一个项目对应的数据库只有一个
这个用户只能对这个数据库有权限,其他的操作不了
创建用户 :CREATE USER 用户名@IP地址 INENTIFIED BY '密码'
用户名@‘%’
,在任意IP地址
给用户授权:GRANT 权限1,权限2 ON 数据库.* TO 用户名@IP地址
权限:CREATE,ALTER, DROP, INSERT, UPDATA等前面关键词
撤销权限:
REVOKE 权限 ON 数据库.* FROM 用户名@IP地址
查看权限:
SHOW GRANT FOR 用户名@IP地址
删除用户:
DROP USER 用户名@IP地址
现在 DQL,对数据库查询
基本查询
查询表中所有列:SELECT * FROM 表名
其中 * 是表示所有列
指定列查询
SELECT 列名1,列名2 FROM 表名
完全重复的记录只显示一次
SELECT DISTINCT FROM 表名
列运算
- 数量类型的列可以做加,减,乘,除 ,不是数量类型默认会变成0
显示出来计算结果:
SELECT 列名*1.5 FROM 表名
注意,不会修改数据库数据
数据和null进行运算,结果为null,这么解决:
使用一个函数:IFNULL(列名,0) 意思: 如果列名中有为null的,则替换为0
-
连接字符串:加号不能作为连接字符串,MySQL中使用函数:
CONCAT(列名,列名,‘xxx’)
-
给列起别名
显示:SELECT 和FROM中间 加 AS xxx, AS还能省略
条件控制:
条件查询,和前面UPDATA,DELETE一样,用WHERE来控制条件,WHRER在FROM 表名 后面加上
模糊查询:列名 中包含部分的也算,不使用 = ,使用 LIKE ‘xxx’
注意,字符串中加下划线,意思是任意匹配一个字符,一个下划线匹配一个字符
%一个百分号,匹配0到N个字符
排序:
ORDER BY 列名 ASC/DESC
ASC 升序,默认升序``
DESC 降序`
后面继续加,意思是当前面那列相等时,使用后面加的进行排序
聚合函数
COUNT() 计算有效的数据个数,为null这不计入,* 代表全部列
求和:SUM
取最大值:MXA
取最小值:MIN
取平均值:AVG
分组查询
查询组的信息,对于个人信息不太行
查询信息中使用聚合函数
前面select 什么列名,后面 group by 靠什么分组
SELECT JOB, COUNT(*) FROM EMP GROUP BY JOB;
分组可以加条件
-
在分组前的条件
– 在group by 前 加 where
-
分组后才有的信息,分组后的条件
– 最后加 HAVING 条件
limit 方言
LIMIT 用来限定查询结果的的起始行 以及总行数
例如 查询起始行为第五行,一次查询三行记录
SLECT * FROM emp LIMIT 4,3
4表示第4行开始注意 第一个行为第0行,查询3行。就是查询5,6,7行