提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、MySQL
1.SQL语句的分类
1. DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等。
2. DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据)增删改。
3. DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别。
4. DQL(Data Query Language):数据查询语言,用来查询记录(数据)查询。
2.DDL操作数据库
2.1 创建数据库
语法:
CREATE DATABASE 数据库名;
create database 数据库名 character set 编码方式;
create database 数据库名 set 编码方式 collate 排序规则;
2.2 查看数据库
语法:
show databases;
#查看创建的数据库定义的信息
show create database 数据库名;
2.3修改数据库编码方式
语法:
alter database 数据库名 character set 编码方式
2.4 删除数据库
语法:
drop database 数据库名
2.5 查看当前使用的数据库
语法:
Select database();
2.6 切换数据库
语法:
use 数据库名
2.7 添加表
语法:
CREATE TABLE 表名(
字段属性1 数据类型 [约束],
字段属性2 数据类型 [约束],
字段属性n 数据类型 [约束]
);
例如:
#注意:每一个字段属性结束后后面跟着一个英文的逗号,最后一个字段属性没有逗号
create table student(
id int,
name varchar(255),
info varchar(255)
)
数据库中常用数据类型
nt:整型
double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为
999.99;默认支持四舍五入
char:固定长度字符串类型; char(10) 'aaa ' 占10位
varchar:可变长度字符串类型; varchar(10) 'aaa' 占3位
text:字符串类型,比如小说信息;
blob:字节类型,保存文件信息(视频,音频,图片);
date:日期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 会自动赋值
datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
2.8 查看表信息
语法:
#删除表
drop table 表名;
#查看所有表
show tables;
#查看表信息
desc 表名;
2.9 在已有的表中的字段属性进行添加修改删除
语法:
#给已有的表添加新的属性字段
alter table 表名 add 新字段属性 新的数据类型
#给已有的表修改属性字段
alter table 表名 change 旧列名 新列名 新的数据类型
#给已有的表删除属性字段
alter table 表名 drop 列名
#给表重命名
alter table 旧表名 rename 新表名;
2.10 查看表名的创建细节
语法:
show create table 表名;
3、DML操作数据库
#DML是对数据库中的表进行增删改的操作
语句:
1.插入操作:
insert into 表名(属性字段1,属性字段2,...) values(数据值1,数据值2);
插入例子:
insert into student(name,age,sex) values('张三1',18,'a');
2.更新操作:
update 表名 set 属性字段1=新的属性值1,属性字段2=新的属性值2 ... WHERE 属性字段=值
更新例子:
update emp set name='张三',age=20 where id=1;
3.删除操作:
delete from 表名 【WHERE 属性字段=指定的值】
删除例子:
delete from emp where id=1;
提示:
删除的两种方式:
1.delete 删除表中的数据,表结构还在;删除后的数据可以找回
2. truncate 删除是把表直接DROP掉,然后再创建一个同样的新表。删除的数据不能找回。执行速度比DELETE快。
4、DCL权限(了解即可)
语法:
1、创建用户:
create user 用户名@指定ip identified by 密码;
create user 用户名@客户端ip identified by 密码; 指定IP才能登陆
create user 用户名@‘% ’ identified by 密码 任意IP均可登陆
2、用户权限
grant 权限1,权限2,........,权限n on
数据库名.* to 用户名@IP; 给指定用户授予指定指定数据库指定权限
3、用户权限查询:
show grants for 用户名@IP;
4、撤销用户权限:
revoke 权限1,权限2,........,权限n on 数据库名.* from 用户名@IP;
5、删除用户:
drop user 用户名@IP;
5、DQL查询(重要)
5.1 条件查询
语法:
条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:
=、!=、<>、<、<=、>、>=; BETWEEN…AND; IN(set); IS NULL; AND;OR; NOT;
(1)查询性别为女,并且年龄50以内的记录
SELECT * FROM stu WHERE gender='female' AND age<50;
(2)查询学号为S_1001,或者姓名为liSi的记录
SELECT * FROM stu WHERE sid ='S_1001' OR sname='liSi';
(3)查询学号为S_1001,S_1002,S_1003的记录
SELECT * FROM stu WHERE sid IN ('S_1001','S_1002','S_1003');
(4)查询学号不是S_1001,S_1002,S_1003的记录
SELECT * FROM tab_student WHERE sid NOT IN('S1001','S1002','S_1003');
(5)查询年龄为null的记录
SELECT * FROM stu WHERE age IS NULL;
(6) 查询年龄在20到40之间的学生记录
SELECT * FROM stu WHERE age>=20 AND age<=40;
SELECT * FROM stu WHERE age BETWEEN 20 AND 40;
(7) 查询姓名不为null的学生记录
SELECT * FROM stu WHERE sname IS NOT NULL;
(8) 查询性别非男的学生记录
SELECT * FROM stu WHERE gender!='male';
5.2 模糊查询
语法:
通配符:
_(下划线): 任意一个字符
%:任意0~n个字符,'张%'
(1)查询姓名由3个字构成的学生记录
SELECT * FROM stu WHERE sname LIKE '___';
(2)查询姓名由5个字母构成,并且第5个字母为“i”的学生记录
SELECT * FROM stu WHERE sname LIKE '____i';
(3)查询姓名以“z”开头的学生记录
SELECT * FROM stu WHERE sname LIKE 'z%';
(4)查询姓名中第2个字母为“i”的学生记录
SELECT * FROM stu WHERE sname LIKE '_i%';
(5)查询姓名中包含“a”字母的学生记录
SELECT * FROM stu WHERE sname LIKE '%a%';
5.3 字段控制查询
语法:
(1)去除重复记录 DISTINCT关键字
SELECT DISTINCT sal FROM emp;
(2)查看雇员的月薪与佣金之和 函数IFNULL(值,0) 如果字段为null,那么为null的字段就替换成0,来进行运算
SELECT *,sal+IFNULL(comm,0) FROM emp;
(3)给列名添加别名 as关键字
select sal+ifnull(comm,0) as MySal from emp;
5.4 排序
语法:
order by 要按照排序的字段名 asc/desc
(1) 查询所有学生记录,按年龄升序排序
SELECT * FROM stu ORDER BY age ASC;
(2) 查询所有学生记录,按年龄降序排序
SELECT * FROM stu ORDER BY age DESC;
(3) 查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序 多列排序:当前面的列的值相同的时候,才会按照后面的列值进行排序
SELECT * FROM emp ORDER BY sal DESC,empno ASC;
5.5 聚合函数
语法:
COUNT(列名):统计指定列不为NULL的记录行数;
MAX(列名):计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN(列名):计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM(列名):计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
AVG(列名):计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
5.6 分组查询
使用分组查询 select后只能填 聚合参数和被分组的属性字段
语法:
当需要分组查询时需要使用GROUP BY子句,例如查询每个部门的工资和,这说明要使用部分来分组。
注意:如果查询语句中有分组操作,则select后面能添加的只能是 聚合函数 和 被分组的列名
1.查询每个部门的部门编号以及每个部门工资大于1500的人数:
SELECT deptno,COUNT(*) FROM emp WHERE sal>1500 GROUP BY deptno;
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
二、MySQL高级
1.数据库的完整性
语法:
用来保证存放到数据库中的数据是有效的,即数据的有效性和准确性
确保数据的完整性 = 在创建表时给表中添加约束
完整性的分类:
- 实体完整性(行完整性):
- 域完整性(列完整性):
- 引用完整性(关联表完整性):
主键约束:primary key
唯一约束:unique [key]
非空约束:not null
默认约束:default
自动增长:auto_increment
外键约束: foreign key
建议这些约束应该在创建表的时候设置
多个约束条件之间使用空格间隔
2.1 非空约束
not null
语法:
not null
CREATE TABLE student( Id int primary key, Name varchar(50) not null, Sex
varchar(10) ); INSERT INTO student values(1,’tom’,null);
2.2 默认值约束
default
语法:
CREATE TABLE student( Id int primary key, Name varchar(50) not null, Sex
varchar(10) default '男' );
2.3 引用完整性
外键约束:FOREIGN KEY
语法:
constraint 自定义外键名称 foreign key(外键列名) references 主键表名(主键列名)
第二种添加外键方式。
alter table 被添加外键的表 add constraint 自定义外键约束名称 foreign key(要绑定外键的列) references
关联外键的表(关联外键表中的主键列);
2.4 多表联查
1. 合并结果集
作用:合并结果集就是把两个select语句的查询结果合并到一起!
语句:
合并结果集有两种方式:
UNION:去除重复记录,例如:SELECT* FROM t1 UNION SELECT * FROM t2;
UNION ALL:不去除重复记录,例如:SELECT * FROM t1 UNION ALL SELECT * FROM t2。
注意:被合并的两个结果:列数、列类型必须相同。
2. 内连接
语法:
select 列名
from 表1
inner join 表2
on 表1.列名=表2.列名 //外键列的关系
where.....
等价于
select 列名
from 表1,表2
where 表1.列名=表2.列名 and ...(其他条件)
三表联查:
select 列名 from 表1
inner join 表2 on 表1.列名=表2.列名
inner join 表3 on 表1或表2.列名=表3.列名 where
等价于:
select 列名 from 表1,表2,表3
where 表1.列名=表2.列名 and 表1/表2.列名=表3.列名
3.外连接
介绍:
包括左外连接和右外连接,外连接的特点:查询出的结果存在不满足条件的可能。
-- 显示还没有员工的部门名称?
-- 外联查询
-- 左外联:select 列名 from 主表 left join 次表 on 主表.列名=次表.列名
-- 1.主表数据全部显示,次表数据匹配显示,能匹配到的显示数据,匹配不成功的显示null
-- 2.主表和次表不能随意调换位置
左外连接语法:
select 列名 from 主表 left join 次表 on 主表.列名=次表.列名
右外连接语法:
select 列名 from 次表 right join 主表 on 主表.列名=次表.列名
2.4 内连接
查询嵌套查询
语法:
SELECT sal FROM emp WHERE ename='JONES';
SELECT * FROM emp WHERE sal > (第一步结果);
SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE ename='JONES');
2.5 获取当前时间和获取时间差
语法:
#获取当前时间
select now();
#获取时间的整数 21
select year(当前时间)
select year(当前时间-入职时间) #算出来工作了几年
3、MySQL进阶
1. 事务的语法
语法:
#开启事务
1. start transaction 或者 begin;
#提交事务
2. commit; 使得当前的修改确认
#回滚事务
3. rollback; 使得当前的修改被放弃
2.事务的特性ACID
1. 原⼦性(Atomicity)
事务的原⼦性是指事务必须是⼀个原子的操作序列单元。事务中包含的各项操作在⼀次执⾏过程中,只
允许出现两种状态之一。
(1)全部执行成功
(2)全部执行失败
事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执⾏过程中出错,
会回滚到事务开始前的状态,所有的操作就像没有发⽣一样。也就是说事务是⼀个不可分割的整体,就
像化学中学过的原子,是物质构成的基本单位。
2. ⼀致性(Consistency)
事务的一致性是指事务的执⾏不能破坏数据库数据的完整性和一致性,一个事务在执⾏之前和执行之
后,数据库都必须处以⼀致性状态。
比如:如果从A账户转账到B账户,不可能因为A账户扣了钱,⽽B账户没有加钱。
3. 隔离性(Isolation)
事务的隔离性是指在并发环境中,并发的事务是互相隔离的。也就是说,不同的事务并发操作相同的数
据时,每个事务都有各自完整的数据空间。
⼀个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务是不能互相干扰的。
隔离性分4个级别,下面会介绍。
4. 持久性(Duration)
事务的持久性是指事务⼀旦提交后,数据库中的数据必须被永久的保存下来。即使服务器系统崩溃或服
务器宕机等故障。只要数据库重新启动,那么一定能够将其恢复到事务成功结束后的状态
3.事务的隔离级别
查看当前的事务隔离级别 与 设置隔离级别
语法:
select @@tx_isolation;
#设置隔离级别
set session transaction isolation level read uncommitted;