库操作
操作 | 语句 |
---|
进入mysql | mysql -uroot -proot -h127.0.0.1 -P3306 |
进入mysql防止插入中文乱码 | mysql --default-character-set=gbk -uroot -proot |
备份数据库数据 | mysqldump -u用户名 -p 备份库名 >备份地址(例:d:/db40.sql) |
备份所有mysql数据 | mysqldump -u用户名 -p --all-database >备份地址(例:d:/all.sql) |
恢复数据库 | mysql -u用户名 -p 恢复到数据库名字<备份文件地址(例:d:/db40.sql) |
进入库 | use 库名; |
展示库列表 | show tables; |
获取当前时间 | select now(); select curdata(); select curtime(); |
退出库 | exit / quit / \p |
1. C(create):创建
操作 | 语句 |
---|
增加新库 | create database 库名; creat database 库名 charset 编码; |
判断增加库 | create database is not exists 名称 chatset 编码; |
恢复库(进入库后) | source sql位置(例:d:/db40.sql) |
2. R(retrieve):查询
操作 | 语句 |
---|
浏览数据库的所有库 | show databases; |
查看建库时的语句验证使用的编码 | show create database 库名; |
3. U(Update):修改
操作 | 语句 |
---|
修改数据库的的字符集 | alter database 库名 character set 新名称; |
4. D(Delete):删除
操作 | 语句 |
---|
删除库 | drop database 库名; |
判断删除库 | drop database if exists 库名; |
表操作
如果是在cmd中执行插入记录的语句,先 set names gbk; 再插入记录!(防止中文乱码)
1. C(create):创建
操作 | 语句 |
---|
创建表 | create table 表名( 列名 数据类型, 列名 数据类型, … 列名 数据类型); |
复制类 | create table 表名 like 被复制的表名; |
添加主键 | alter table 表名 add primary key(列名); |
2. R(retrieve):查询
操作 | 语句 |
---|
展示库内表列表 | show tables; |
查看表结构 | desc 表名; |
3. U(Update):修改
操作 | 语句 |
---|
修改表名 | alter table 表名 rename to 新的表名; |
修改列名称 类型 | alter table 表名 change 列名 新列名 新数据类型; |
4. D(Delete):删除
操作 | 语句 |
---|
删除 | drop table 表名; |
删除主键 | alter table 表名 drop primary key; |
如果存在则删除 | drop table if exists 表名; |
书写顺序
- select * | 列名 ------ 确定要查询的列有哪些
- from 表名 ------确定查询哪张表
- where 条件 ------ 通过筛选过滤,剔除不符合条件的记录
- group by 分组的列 asc(升)/desc(降) ------ 指定根据哪一列进行分组
- having 条件 ------ 通过条件对分组后的数据进行筛选过滤
- order by 排序的列 ------ 指定根据哪一列进行排序
- limit ((页码-1)+每页显示记录数,每页显示记录数 ------ 指定返回第几页记录以及每页显示多少条
执行顺序
- from 表名 ------ 确定查询哪张表
- where 条件 ------ 通过筛选过滤,剔除不符合条件的记录
- select * | 列名 列别名 ------ 确定要查询的列有哪些,
- group by 分组的列 ------ 指定根据哪一列进行分组
- having 条件 ------ 通过条件对分组后的数据进行筛选过滤
- order by 排序的列 ------ 指定根据哪一列进行排序
- limit (countPage-1)*rowCount, rowCount
表记录
1. C(create):创建
操作 | 语句 |
---|
增 | insert into 表名(列名1,列名2,列名3…) values(值1,值2,值3…); |
增2 | insert into 表名 values(值1,值2,值3…); |
批量增 | insert into 表名 values(值1,值2,值3…),(值1,值2,值3…); |
添加一列 | alter table 表名 add 列名 数据类型; |
2. R(retrieve):查询
特殊条件写法
含null判断用 :列名 is null | 列名 is not null
在…之间:between 值 and 值
模糊查询:列名 like 值+通配符(%、_)
操作 | 语句 |
---|
查询所有表信息 | select * from 表名 where 条件一 and(or) 条件二····; |
查询表信息 | select 列名,列名··· FROM 表名 where 条件一 and(or) 条件二····; |
查询表信息(别名) | select 列名 别名,列名 别名··· FROM 表名 where 条件一 and(or) 条件二····; |
查询表信息 (含null) | select ifnull(列名,修改值) 别名··· FROM 表名 where 条件一 and(or) 条件二····; |
查询表信息 (拼接) | select concat(列名,拼接字符) 别名··· FROM 表名 where 条件一 and(or) 条件二····; |
查并去除重复记录 | select distinct 列名 from 表名 where 条件一 and(or) 条件二····; |
排序查询 | select 列名 from 表名 order by 列名 asc(升)/desc(降) , 列名 asc(升)/desc(降)······ ; |
分页查询 | select * from emp limit (页码-1)+每页显示记录数,每页显示记录数; |
连接查询 | select *from 表一,表二 where 表一.外键=表二.对应键; |
左外连接查询 | select *from 表一 left join 表二 on 表一.外键=表二.对应键; |
右外连接查询 | select *from 表一 right join 表二 on 表一.外键=表二.对应键; |
全外查询 | select *from 表一 full join 表二 on 表一.外键=表二.对应键; |
函数
1 curdate() 返回日期
curtime() 获取时间
now() 获取日期加时间
concat(s1,s2…)合并字符串
concat_ws(x,s1,s2…)加分隔符
year(date)/month(date)/day(date)/hour(date)/minute(date)/second(date) 返回 年/月/日/天/时/分/秒
多行函数
- 常见:
- count(列 | *) 某列行数
- max(列名) 最大值
- min(列名) 最小值
- sum(列名) 和
- avg(列名) 平均值
- 规则;
- (1)多行函数不能用在where子句中
- (2)多行函数和是否分组有关,分组与否会直接影响多行函数执行的结果。
- 例子
- 使用多行函数: select 函数(列名) FROM 表名;
- 分组使用多行函数: select 函数(列名) FROM 表名 group by 列名;
3. U(Update):修改
操作 | 语句 |
---|
改 | update 表名 set 列名=新值 where 条件一 and(or) 条件二····; |
4. D(Delete):删除
操作 | 语句 |
---|
删条件列 | delete from 表名 where 条件; |
删除列 | alter table 表名 drop 列名; |
表内语句约束
操作 | 语句 |
---|
主键 主键的特点是唯一且不能为空 | primary key; |
自增 | auto_increment; |
查看建表时的语句 | show create table stu; |
非空约束 | not null; |
唯一约束 | unique; |
外键 | foreign key(本表列) references 外表名(外表列); |
级联删除 | on delete cascade |
级联更新 | on update cascade |
where和having的区别
- 相同点: where和having都可以对记录进行筛选过滤。
- 区别:where是在分组之前,对记录进行筛选过滤,并且where子句中不能使用多行函数以及列别名(但是可以使用表别名)
- 区别:having是在分组之后,对记录进行筛选过滤,并且having子句中可以使用多行函数以及列别名、表别名。