1. 添加数据:
* 语法:
* insert into 表名(列名1,列名2,列名3) values(值1,值2,值3)
* 注意:
1. 列名和值类型要一一对应
2. 如果表名后不定义列名,则默认给所有列添加值
3. 除了数字类型,其他类型需要使用引号引起来,单双都可以
2. 删除数据
* 语法
* delete from 表名 [where 条件]
* truncate table 表名 删除表中所有数据,保留结构信息
* 注意
1. 如果不加条件,则删除表中所有记录
2. 如果要删除所有记录
1. delete from 表名; 不推荐使用,有多少条记录就会执行多少次删除操作
2. truncate table 表名; 先删除表,然后再创建一张一样的表结构 推荐使用,效率更高
3. 修改数据
* 语法
* update 表名 set 列名1 = 值1, 列名2 = 值2 [where 条件];
* 注意
1. 如果不加任何条件,则会将表中所有记录全部修改
1. 语法:
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
2. 基础查询
1. 多个字段的查询
select 字段名1,字段名2 from 表名;
* 注意:
* 如果查询所有字段,则可以使用*来代替字段列表
2. 去除重复
* distinct
3. 计算列
* 一般可以使用四则运算计算一些列的值,一般只会进行数值型的计算
* ifnull(表达式1,表达式2)
* 表达式1:哪个字段需要判断是否为null
* 表达式2:如果该字段为null值后的替换值
* 起别名
* as:as也可以省略用空格代替
3. 条件查询
1. where子句后跟条件
2. 运算符
* > >= < <= <>或者!=(不等于) =(等于)
* between...and
* like 模糊查询
* _: 单个任意字符
* %: 多个任意字符
* in(集合)
* is null is not null
* and 或 &&
* or 或 ||
* not 或 !
4. 排序查询
* 语法: order by 字句
* order by 排序字段1 排序方式1, 排序字段2 排序方式2
* 排序方式
* ASC:升序 默认
* DESC:降序
* 注意:
* 如果有多个排序条件,则当前边的条件之一样时,才会判断第二条件
5. 聚合函数:将一列数据作为一个整体,进行纵向的计算
1. count 计算个数
1. 一般会选择非空的列:主键
2. count(*)
2. max 计算最大值
3. min 计算最小值
4. sum 求和
5. avg 计算平均值
* 注意:聚合函数的计算,会排除null值
解决方案:
1. ifnull函数
6. 分组查询
1. 语法:group by 分组字段
2. 注意:
1. 分组之后查询的字段:分组字段,聚合函数
2. where和having的区别?
1. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
2. where后不可以跟聚合函数,having可以进行聚合函数的判断
7. 分页查询
1. 语法:limit 开始的索引,每页查询的条数;
2. 公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
3. 分页操作是一个"方言",即每个数据库软件实现的方式不太一样
* DBA:数据库管理员
* DCL:管理用户,授权
1. 管理用户
USE mysql;
-- 查询用户
SELECT * FROM USER;
-- % 表示可以在任意主机访问
-- 创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
CREATE USER 'moddemod'@'%' IDENTIFIED BY 'qwertyuiop';
-- 删除用户
DROP USER '用户名'@'主机名';
-- 修改密码
UPDATE USER SET PASSWORD = PASSWORD('新密码') WHERE USER = '用户名';
UPDATE USER SET PASSWORD = PASSWORD('zhao') WHERE USER = 'moddemod';
SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码'); -- 新版本只能用这种方法
SET PASSWORD FOR 'moddemod'@'%' = PASSWORD('zxcvbn');
* mysql中忘记密码怎么办?
停止mysql服务
net stop mysql
使用无验证方式启动mysql服务
mysqld --skip-grant-tables
直接mysql就可进入mysql,更改密码后关掉mysqld进程,重启mysql即可用修改后的密码正常登录
2. 权限管理
-- 查询权限
SHOW GRANTS FOR '用户名'@'主机名';
SHOW GRANTS FOR 'root'@'localhost';
SHOW GRANTS FOR 'moddemod'@'%';
-- 授予权限
GRANT 权限列表 ON 数据库名字.表名 TO '用户名'@'主机名';
GRANT ALL ON *.* TO '用户名'@'主机名'; -- 给创建的用户授予像root用户的所有权限,可以操作所有数据库中的所有表 ALL代表所有权限
GRANT ALL ON *.* TO 'moddemod'@'%';
-- 撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
REVOKE ALL ON *.* FROM 'moddemod'@'%';
主键约束:primary key
1. 注意:
1. 含义:非空且唯一
2. 一张表只能有一个字段为主键
3. 主键就是表中记录的唯一标识
2. 在创建表时添加主键约束
create table stu(
id int primary key,
name varchar(20)
);
3. 删除主键
alter table stu drop primary key;
4. 创建完表后,添加主键
alter table stu modify id int primary key;
5. 自动增长
1. * 概念:如果某一列是数值类型的,使用auto_increment可以完成值自动增长
2. 在创建表时,添加主键约束,并且完成主键自增长
create table stu (
id int primary key auto_increment,
name varchar(20)
);
3. 删除自动增长
alter table stu modify id int;
4. 添加自动增长
alter table stu modify id int auto_increment;
外键约束:foreign key
1. 在创建表时,可以添加外键
create table 表名(
...
外键列
constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
);
2. 删除外键
alter table 表名 drop foreign key 外键名称;
3. 创建表后,添加外键
alter table 表名 add constraint 外键名称 foreign key (外键字段名称) references 主表名称(主表列名称)
4. 级联操作
1. 添加级联操作
语法: alter table 表名 add constraint 外键名称
foreign key (外键字段名称) references 主表名称(主表列名称) on update cascade on delete cascade;
2. 分类:
1. 级联更新: on update cascade
2. 级联删除: on delete cascade
多表之间的关系
实现关系
数据库的设计泛式
DBA 数据库管理员
1. 命令行
* 语法:
备份:mysqldump -u用户名 -p密码 数据库名称 > 保存的路径
还原:
1. 登录
2. 创建数据库: careate database 数据库名;
3. 使用数据库: use 数据库名;
4. 执行文件 source 文件路径
2. 图形化工具
* 笛卡尔积
* 有两个集合A,B,即区这两个集合的所有组合情况
* 要完成多表查询,需要消除无用的数据
* 分类
1. 内连接查询
1. 隐式内连接: 使用where条件消除无用数据
2. 显式内连接:
select 字段列表 from 表名1 inner join 表名2 on 条件;
inner是可选的
2. 外链接查询
1. 左外连接
select 字段列表 from 表1 left [outer] join 表2 on 条件;
2. 右外连接
select 字段列表 from 表1 right [outer] join 表2 on 条件;
3. 子查询
* 概念: 查询中嵌套查询,称嵌套查询为子查询
* 子查询的不同情况
1. 子查询的结果是单行单列
子查询可以作为条件,使用运算符去判断 > >= < <= =
2. 子查询的结果是多行单列
子查询可以作为条件,使用运算符in判断
3. 子查询的结果是多行多列
子查询可以作为一张虚拟表参与查询
1. 事务的基本介绍
1. 概念:
* 如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败
2. 操作:
1. 开启事务:start transaction;
2. 回滚: rollback;
3. 提交:commit;
3. MySQL数据库中的事务默认自动提交
* 事务提交的两种方式:
* 自动提交:
* mysql就是自动提交的
* 一条DML(增删改)语句会自动提交一次事务
* 主动提交
* Oracle诗句哭默认是手动提交的
* 需要先开启事务,再提交
* 修改事务的默认提交方式:
* 查看事务的默认提交方式: select @@autocommit; 1代表自动提交,0代表手动提交
* 修改默认提交的方式:set @@autocommit = 0;
2. 事务的四大特征
1. 原子性
是不可分割的最小操作单位,要么同时成功,要么同时失败
2. 持久性
如果一旦事务提交或回滚,将持久更新数据库表
3. 隔离性
多个事务之间,相互独立
4. 一致性
事务操作前后数据总量不变
3. 事务的隔离级别
语句 | 释义 | 场景 |
---|---|---|
limit 0,1 | limit用于强制SELECT语句返回指定的记录数 初始记录行的偏移量是0而不是1,从第0条开始取一条数据 | 盲注 |
substr(str,pos,len) | 将str从pos位置开始截取len长度的字符进行返回。注意这里的 pos位置是从1开始的 | |
ascii(str) | 返回ascii代码值 | |
length(str) | 返回str字符串的长度 | |
if(a,b,c) | a为条件,a为true,返回b,否则返回c,如 if(1>2,1,0) 返回0 | |
ord(str) | 返回ascii | |
group_concat() | 将group by 产生的同一个分组中的值连接起来,返回一个字符串结果 | |
concat() | 将多个字符串连接成一个字符串 | |
mid(str,pos,len) | 截取字符串 与substr相同,从pos开始截取len个,pos从1开始 | |
sleep() | 睡眠延迟 |
select top number|percent column_name(s) from table_name;
top子句用于规定要返回的记录的数目。
select system_user() 查看系统用户
select current_user() 查询当前用户
select user() 查询用户
select version() 查询数据库版本
select database() 查询当前连接的数据库
select @@version_compile_os 查询当前操作系统
select @@datadir 查询读取数据库路径
select @@basedir 查询MYSQL安装路径
delete from 表名;
truncate table 表名; 清空表中的数据
查看支持的所有字符集
show character set;
查看默认的字符集
show variables like '%char%';
SELECT * FROM users WHERE id='$id' LIMIT 0,1
order by
用于根据指定的列对结果集进行排序
默认按照升序对记录进行排序
如果希望按照降序对记录进行排序,可以使用DESC关键字
union 联合查询
将多条查询语句的结果合并成一个结果
应用场景:
要查询的结果来自多个表,且表之间没有直接的连接关系,但查询的信息一致
特点:
要求多条查询语句的查询列数是一致的!
要求多条查询语句的查询的每一列的类型和顺序最好一致
union默认去重,如果使用union all可以包含重复项
select md5()
sekect sha() 或者 select sha1()
select aes_encrypt()
select aes_decrypt()
count(*) 将返回表格中所有存在的行的总数包括值为NULL的行
count(列名) 返回表格中除去null以外的所有行的总数
select 用法:https://blog.csdn.net/baidu_37964071/article/details/80463290