目录
(2)非空约束 not null(3) 唯一约束 nuique ( 唯一约束 :可以有null值,不能重复)
入门
一、mysql库的管理
1、查看所有数据库
show databases;
2、 创建数据库
create database 库名;
3、查看数据库,创建数据语句
show create database 库名;
4、删除数据库
drop database 库名;
二、表的管理
1、查看所有的表
show tables;
2、创建表
create table 表名( -- 内容
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
age INT
);
3、 查看表sql格式
show create table 表名 ;
4、查看表格格式
desc 表名 ;
5、删除表
drop table 表名 ;
6、管理数据-增删改
插入数据
-- insert into 表名 values (值);
INSERT INTO stydent92class VALUES (1,'王彦登',24,'男',98,56,85);
修改数据
-- update 表名 set 列明=值 where 条件;
UPDATE stydent92class SET math = 145 WHERE id = 1 ;
删除数据
-- delete from 表名 where 条件; 带条件删除数据
-- delete from 表名 ;删除全表数据,表的结构还存在
-- truncate table 表名;-- 删除所有数据,再创建一张一模一样的表
删除全表的语法
delete from 表名
truncate table 表名; 两个区别
1)delete from 表名:只是删除全表数据;表的结构还存在,
如果表中 存在主键并且自增长约束,那么不会受影响,下一次在插入数据
继续在之前的基础上继续自增长!
2)truncate table 表名 ;
将表中数据删除的同时删除了表,然后在创建一张一模一样空表,
影响自增长主键的值,再次插入数据,自增长从1开始...
等价于
create table my_use;
创建一个当前一模一样的表结构
7、查询数据
DQL带条件查询
-- where条件查询
-- 可以基本运算符:比较运算符(<,>,<=,>=,!=)/逻辑运算符(|| && /and /or)/赋值运算符 =
-- where后面多个or ,in(数据1,数据2) ,在两个值之间 between 值1 and 值2
-- mysql 判断某个字段为null :is null /is not null
模糊查询 like
-- 聚合函数 count(列名)/max(列名)/min(列名)/sum(列名)/avg(列名)
-- 排序查询 order by
-- 分组查询 group by
-- 筛选查询 having
-- 分页查询 limit
--------------------------------------------------------------------------------------------------------------------------------
1)查询所有列
-- select * from 表名 ;
2)as 可以省略 -- 查询时指定别名
SELECT
id AS 92班,
SUM(IFNULL(chinese,0)) AS 语文总分,
AVG(math) AS 数学平均分,
MAX(english) AS 英语最高分,
MIN(english) AS 英语最低分
FROM
stydent92class;
3)distinct -- 去除重复数据 “select distinct name from emp”
4)查询年龄大于 20 的总数 : <> !=
5)模糊查询 like
-- select 字段列表 from 表名 where 字段名称 like '%字符%' ;
-- 查询第二个字符包含化的学生信息
SELECT * FROM student WHERE NAME LIKE '_%化%' ;
% :包含的指定的字符 使用'%字符值%' 模糊查询包含指定字符的信息
_ :代表单个字符(一个_下划线代表一个字符)
两个相结合使用: '_%字符值%_' 三个字符:中间字符包含指定的值进行模糊查询
6) 聚合函数查询--单行单列的数据
-- count(列名) :总记录数
-- max(列名): 最大值
-- min(列名字段):最小值
-- sum(字段名称):求和
-- avg(列名):平均分
-- select 聚合函数(列名) from 表名;
-- ifnull (列名 ,0);
-- 查询英语成绩的最高成绩
SELECT MAX(IFNULL(english,0)) 英语最高分 FROM student ;
8)排序查询- order by
order by 字段名称 asc/desc (升序/降序)
-- select 字段列表 from 表名 order by 字段名 排序规则; -- 单个字段进排序
9)分组查询- group by
group by 后面不能使用聚合函数
10)筛选- having
-- group by不能聚合函数,但是having后面可以聚合函数
11)分页查询- limit
-- select 字段列表 from 表名 limit 起始行数,每页显示多少条;
-- limit 起始行数=(当前页码数-1)*每页显示的条数,每页显示条数;
三、数据库约束
(1)默认约束 default
default 默认约束 防止出现非法数据null(没有插入造成null值)
-- 添加约束
ALTER TABLE test MODIFY gender VARCHAR(2) DEFAULT '女' ;
-- 通过sql语句修改表的类型,删除默认约束
ALTER TABLE test MODIFY gender VARCHAR(2) ;
(2)非空约束 not null
(3) 唯一约束 nuique ( 唯一约束 :可以有null值,不能重复)
-- 通过语句删除唯一约束
-- 删除唯一约束的sql alter table test drop index 字段名称;
ALTER TABLE test DROP INDEX phone ;
-- 添加唯一约束
ALTER TABLE test MODIFY phone VARCHAR(11) UNIQUE ; -- unique
(4)主键约束 primary key (非空+唯一特点)
(5)外键约束- foreign key
1、foreign key
外键所在的表称为从表
例:
cerate table emp (
id int primary key auto_increment,
gender Varchar(20),
dept_id, -- 部门id
constraint fk_demp_emp --- 声明外键
foreign key (demp_id) -- 作用在指定从表字段
references -- 关联
dept(id) -- 部门表的主键id
)
2、添加外键
1、创建表的时候直接添加
2、通过alter table 表名 add 添加方式
3、 删除外键
alter table 表名 drop foreign key 外键名称
4、级联操作
级联修改 on update cascade
当前修改主表的数据,那么从表和主表相关关联的数据一会被随着更改掉
级联删除 on delete cascade
当删除主表的数据,那么从表和主表关联的数据一会被随着删除掉
通过sql语句删除外键
alter table 表名 drop froeign key 外键名称;ALTER TABLE emp ADD
CONSTRAINT fk_dept_emp
FOREIGN KEY (dept_id)
REFERENCES
dept(id)
ON UPDATE CASCADE -- 添加级联修改
ON DELETE CASCADE ; -- 添加级联删除
5、mysql中设置外键约束的语法(创建表时添加)
create table 表名(
字段列表...
....,
constraint 外键名称(fk_主表_从表)
foreign key (外键字段名称)
references 主表(主键字段)
)通过sql语句删除外键
alter table 表名 drop froeign key 外键名称;
通过sql语句添加外键以及级联操作
alter table 表名 add constraint 外键名称(fk_主表_从表)
foreign key (外键字段名称)
references 主表(主键字段)
on update cascade -- 级联修改
on delete cascade -- 级联删除
四、数据库备份和还原
备份:
1、图形界面话:简单直观
-- 选择数据库---右键----备份---->选择导出的路径(结构以及数据都保存)
-- 将之前存在库,然后选择 执行指定sql脚本----> 选择指定的sql脚本---进行执行即可!
2、命令行方式
-- 备份:mysqldump -uroot -p密码 备份数据库名称 > 保存的本地地址
还原:
-- 将原来删除,新建库,使用库, source 将保存的本地地址
五、数据库的三大范式
1NF :数据库表的每一列都是不可分割的原子数据项,不能出现复合项
2NF:在第一范式的基础上所有列完全依赖于主键列
3NF:在第二范式的基础上,非主键字段不能传递依赖于主键(外键解决)
六、多表查询
内连接、外连接、子查询
内连接
1)隐式内连接
操作步骤:
-- 1)查询哪张表
-- 2)要查询的是指定表中的哪个字段
-- 3)表和表之间的关联关系问题SELECT
e.name '员工姓名' ,
e.`gender` '性别',
e.`salary` '工资',
e.`dept_id` ,
d.id ,
d.`name` '部门名称'
FROM
emp e,dept d -- 员工表的别名e ,部门表的别名dWHERE
e.`dept_id` = d.`id` ;
2)显示内连接
-- select <字段列表>
-- from 表名1
-- (inner) join
-- 表名2
-- on 关联关系(连接条件);SELECT
t1.*,-- 员工表中的所有字段 (实际开发中,* 不建议使用!)
t2.`name` -- 部门表的部门名称
FROM emp t1
INNER JOIN dept t2
ON
t1.`dept_id` = t2.`id` ;
外连接
左外链接:left(outer) join
右外连接:right(outer)join
-- 语法格式
-- select
-- 字段列表
-- from
-- 表名1 -- 左表
-- left outer join 表名2
-- on 连接条件 ;
子查询
OR 、 、IN 、 not in 、 exists /not exists /any(sql)
七、mysql事务
1、什么是事务
在业务操作中,一次性可能同时操作多个sql语句,防止操作多个sql语句时出现问题,将业务看成一个整体进行处理,要么一次性执行成功,要么同时失败!
2、 开启事务
--开启手动提交事务
start transaction;
--执行操作
update cccount set balance = balance-500 where name= “22”;
update account set balabce = balance+500 where name= “36”;
--事务回滚 : 回滚到操作之前的状态
rollback ;
--如果没问题,手动提交事务
commit;
3、特点
原子性 : 事务造作业务中,要么同时执行成功,要么同时失败
一致性: 操作语句前后,总量保持不变
隔离性: 将业务使用事务管理,业务和业务之间分离;事务与事务之间不能相互影响,事务是独立的
持久性:一但事务被提交,将是永久储存
4、隔离级别
read uncommitted 读未提交,安全性最差,不能有效防止脏读
read committed 读已提交,安全相对较高,不能防止重复读
reteatable read 可重复读 ,能够防止脏读,可重复读
serializable 串行话
5、隔离级别的不同,会出现不同问题
脏读:一个事务读取另一个没有提交的事务(最严重的问题)
不可重复读: 一般都是update语句影响,两个事务中,一个事务读取的前后的内容不一致!
幻读:一般insert/delete :影响两个事务中,前后数量不一致!
6、查看隔离级别
查询隔离级别 select @@tx_isolation; mysql5.5/5.7都可以
SELECT @@transaction_isolation; mysql8.0
7、设置隔离级别
设置隔离级别 set global transaction isolation level 级别字符串;