mysql数据库

创建数据库

create database 数据库名
create database 数据库 character set 字符集 //添加字符集的
查询数据库
show create database 数据库名 //查看数据库的定义结构
show databases;//查询所有数据库名

删除数据库
drop database 数据库名
drop database day19;

修改数据库
alter database 数据库名 charactor set 字符集;
//修改数据库的字符集

use 数据库名 //切换数据库
//注意: 在创建表之前一定要指定数据库名
select database(); //查看正在使用的数据库

创建表

create table 表名(
列名 类型 [约束],
列名 类型 [约束],

列名 类型 [约束]
);
列: 字段
行: 记录
例如:
create table user (
id int auto_increment primary key,
username varchar(50) – 用户姓名
);

查询表
desc 表名 ; //查看表的定义结构

show tables; //查看所有的表

add,modify,change,rename→增加列,修改列的类型, 修改列的名称,修改表名

增加

alter table 表名 add 列名 类型 约束;//增加列

修改表
alter table 表名 modify 列名 新类型 新约束;//修改列的类型约束

alter table 表名 change 就列名 新列名 类型 约束;//修改列的名称

rename table 旧表名 to 新表名; //修改表名

删除

alter table 表名 drop 列名 //删除列
drop table 表名 //删除表

表数据(增删改查)

创建表
create table 表名(
列名 字段 类型 约束
列名 字段 类型 约束



insert into 表名(字段,字段…) values(记录,记录…)//插入特定的列
intsert into 表 values(值,值)//插入所有的列

delete from 表名 【where】
truncate table 表名;
面试题:delete 和truncate区别
DELETE 删除表中的数据,表结构还在; 删除后的数据可以找回,一条一条的删除.
TRUNCATE 删除是把表直接DROP掉,然后再创建一个同样的新表。删除的数据不能找回。执行速度比DELETE快。
工作里面的删除
物理删除: 真正的删除了, 数据不在, 使用delete就属于物理删除
逻辑删除: 没有真正的删除, 数据还在. 搞一个标记, 其实逻辑删除是更新 eg: state 1 启用 0禁用
注意:工作里面一般使用逻辑删除用的多 .

update 表名 set 列名=值,列名=值 [where…]


select * from 表名 所有的表的字段值

1.模糊查询:
like 模糊查询,一般和_或者%一起使用
_ 占一位
% 占0或者n位

name like ‘张%’ --查询姓张的用户, 名字的字数没有限制
name like ‘张_’ --查询姓张的用户 并且名字是两个的字的

2.排序查询
语法:order by 列名[ASC|DESC]
select * from student order by score desc; //单列排序
select * from student order by score desc ,age desc;//组合排序

3.聚合函数
语法:
SELECT 聚合函数(列名) FROM 表名 [where 条件];
函数类型:max(列名),min(列名),avg(列名),count(列名),sum(列名)→(最大值,最小值,平均值,
统计此列有多少条记录个数,求此列数据之和)
注意: 聚合函数会忽略空值NULL
解决:IFNULL(列名,默认值);

4.分组查询
语法:
where 条件 group by 列 [having 条件]
例如:性别分组, 统计每一组学生的总人数> 5
SELECT sex, count() FROM student GROUP BY sex HAVING count() > 5

where和having的区别【面试】
where:
1.对查询结果进行分组前,将不符合where条件的行去掉,
即在分组之前过滤数据,即先过滤再分组。
2.where后面不可以使用聚合函数

having:
1.having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,即先分组再过滤。
2. having后面可以使用聚合函数

5.分页查询

语法:
select … from … limit a ,b

6. 去重查询
select distinct 列名 from 表名
注意:distinct前面不能有字段名,一般单个字段去重,多个会出问题。

7. 别名查询
select 字段 as 别名,字段 as 别名,… from 表名
注意:as可以省略 一般都会省略

8.运算查询(+,-,*,/等)
注意:null和其他数据进行运算得到是null

外键约束

外键:一张从表中的某个字段引用主表中的主键
主表: 约束别人
副表/从表:使用别人的数据,被别人约束

外键的语法:
添加外键的两种方式:

1. 新建表时增加外键:
[CONSTRAINT] [外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名)
2. 已有表增加外键:
ALTER TABLE 从表 ADD [CONSTRAINT] [外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主键字段名);
关键字解释:
CONSTRAINT – 约束关键字
FOREIGN KEY(外键字段名) –- 某个字段作为外键
REFERENCES – 主表名(主键字段名) 表示参照主表中的主键字段

2.删除外键
ALTER TABLE 表 drop foreign key 外键名称;

外键约束的作用: 维护多表的关系, 保证引用数据的完整性

3.外键的级联
什么是级联操作:在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作
ON UPDATE CASCADE – 级联更新,主键发生更新时,外键也会更新
ON DELETE CASCADE – 级联删除,主键发生删除时,外键也会删除

添加外键级联
[CONSTRAINT] [外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名)
ON UPDATE CASCADE ON DELETE CASCADE (建表时添加)

多表关系

1.一对一: 先当做1对多, 再在外键列添加唯一约束
2.一对多: 在多方创建一个列作为外键 指向一方的主键
3. 多对多: 创建一张中间表,这个表里面至少包含两个列,都作为外键,指向一方的主键

连接查询

分类:
1.交叉查询→交叉查询其实是一种错误,数据大部分是无用数据,被称为笛卡尔积.
2.内连接查询(显示内连接和隐式内连接):为了求出公共部分。
显示内连接语法:
显示里面是有inner关键字的
select * from a [inner] join b on 连接条件 [ where 其它条件]
例如:select * from dept inner join emp on dept.id = emp.dept_id;
隐式内连接语法:
隐式里面是没有inner关键字的
select * from a,b where 连接条件 --(a表里面的主键 = b表里面的外键)
例如:select * from dept,emp where dept.id = emp.dept_id;
3.外连接(左外连接和右外连接):在内连接的继承上保证左边表或右边表的数据全部显示
左外连接:
select 字段 from 表名a left [outer] join 表名b on 条件
右外连接:
select 字段 from 表名a right [outer] join 表名b on 条件

子查询

三种情况:
1.子查询的结果是单行单列(一个值情况)
select … from … where 列 = (子查询)
2.子查询的结果是单列多行, 一般放在where后面作为条件, 通过in
select … from … where 列 in (子查询)
3.子查询的结果是多行多列, 一般放在from后面作为虚拟表, 需要给虚拟表取别名
select … from (子查询) as 别名

事务

自动事务(mysql默认)
手动开启一个事务
方式一: 手动开启事务的方式
start transaction;开启事务
commit;提交
​ rollback;回滚
方式二: 设置MYSQL中的自动提交的参数
查看MYSQL中事务是否自动提交
show variables like ‘%commit%’;
设置自动提交的参数为OFF
set autocommit = 0;-- 0:OFF 1:ON

**

事务特性【面试题】

**

原子性
一致性:(Consistency)事务前后数据的完整性必须保持一致.
持久性(Durability)持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
隔离性(Isolation)事务的隔离性是指多个用户并发操作数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。 简单来说: 事务之间互不干扰

如果不考虑隔离性,会引发下面的问题
脏读:读取未提交的数据
不可重复读:内容不一致,要求一个事务在多次读取数据时是一致的
幻读:个数不一致,要求一个事务多次读取数据时数量是一致的

事务四个隔离级别

1.读未提交(read uncommitted)
2.读已提交(read committed)
3.可重复读(repeatable read)
4.串行化(serializable)
隔离级别越高,性能(效率)越差,安全性越高。

设置隔离级别
查询当前事务隔离级别
select @@tx_isolation;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值