Mysql常用命令

DDL语言(操作表)

进入本机MySQL终端
mysql -h localhost -u root -p
//-h 地址 -u 用户名 -p 密码
mysql终端清屏
system cls;
暂停服务
net stop <mysql服务名>;
开启服务
net strat <mysql服务名>
建立数据库
create database <数据库名>;
查看所有的数据库
show databases;
查看建库语句
show create database <数据库名>;
修改数据库名
alter database <数据库名> 修改内容;
切换或使用数据库
use <数据库名>;
删除库
drop database <数据库名>
创建表
create table <数据表名>(字段名 数据类型 约束,... constraint s_s foreign key(外键名) references 连接的数据表名(主键名));
查看表结构
desc 数据表名;
查看建表的sql语句
show create table <数据表名>;
查看该库的所有数据表名
show tables;
删除数据表
drop table <表名>;
设置外键
constraint s_s foreign references key(外键名) 连接到数据表名(主键名);
查询表中所有数据
select * from 表名;
查看表中某字段的数据
select 字段1,字段2... from 表名;
向表中添加数据
insert into 表名(字段1,字段2...) values(数据1,数据2...);
//切记字段名和数据顺序需要保持一致
0填充
create table a(id int(11) zerofill);
修改表中的字段类型
alter table 数据表名 modify 字段名 数据类型;
修改表名
alter table 旧表名 rename(to) 新表名;
添加字段
向末尾添加字段
alter table 表名 add 字段名 数据类型 约束名;
向第一个位置添加字段
alter table 表名 add 字段名 数据类型 约束名 first;
向指定位置添加字段
alter table 表名 add 字段名 数据类型 约束名 after 字段名;
添加多个字段
alter table 表名 add 字段名1 数据类型1 约束名1,字段名2 数据类型2 约束名2,....
修改字段顺序
将字段移动到指定位置
alter table 表名 modify 字段名 数据类型 after 字段名
将字段移动到首位
alter table 表名 modify 字段名 数据类型 first;
删除字段
alter table 表名 drop 字段名;
修改字段
修改字段类型(未重命名)
alter table 表名 modify 字段名 数据类型;
修改字段名称(可修改数据类型和约束)
alter table 表名 change 旧字段名 新字段名 旧数据类型 旧约束;
//只修改字段名
alter table 表名 change 旧字段名 新字段名 新数据类型 新约束;
//修改字段名和数据类型与约束
约束
非空约束
alter table 表名 modify 字段名 数据类型 not null;
//非空
alter table 表名 modify 字段名 数据类型 null;
//空
添加默认约束
alter table 表名 modify 字段名 数据类型 default 默认值;
删除默认约束
alter table 表名 alter column 字段 drop default;
唯一约束
添加唯一约束
alter table 表名 modify 字段 类型 unique;
删除唯一约束
drop index key name on 表名;
主键约束
添加主键约束
alter table 表名 modify 字段名 字段类型 primary key;
//单一主键
删除主键约束
alter table 表名 drop primary key;
建表时给多个字段设置主键
create table 表名(字段1,类型1,约束1,字段2 类型 约束.... constraint 约束名 primary key(主键1,主键2,....))
自增约束
添加自增约束
alter table 表名 modify 字段 类型 auto_increment
删除自增约束
alter table 表名 modify 字段 类型;
清除数据

清空表后id从1开始,这个明显是用来清除前面数据。当程序员进行开发的时候,有很多的测试数据,当上线运行的时候,程序员都会I删掉。例如 id1000,现在想从001开始。

truncate 表名;
外键约束
增加外键约束
constraint s_s foeign key(外键名) references 连接表名(主键);
删除外键约束
alter table 表名 drop foreign key 外键约束名;
级联操作
delete cascade
alter table 表名 add constraint 外键约束名 foreign key(外键字段) references 父表名(父表字段)on delete cascade;
//如果把父表中的数据删除,子表的这个字段对应的数据更新成null
update cascade
alter table 表名 add constraint 外键约束名 foreign key(外键字段) references 父表名(父表字段)on update cascade;

DML

添加数据
insert into 表名(需要添加的字段) values(需要给的值);
//选中某些字段添加
insert into 表名 values(需要给的值);
//全部字段添加,值要与字段一一对应
insert into 表名(需要添加数据的字段) values(,,,,),(),();
//添加多条数据
删除数据
delete from 表名 where 条件;
更新数据
update 表名 set 字段1=,....where 条件;
条件语句
>    <    >=    <=   =
and(&&) or(||)//建议使用add和or
between1 and2//在值1和值2之间
is null    not is null//是否为空
in(1,2...)//在这些值内查找

DQL

查询所有表内数据
select * from 表名;
查询指定字段的数据
select 字段1,字段2 from 表名 where 条件;
查询指定字段的数据并给指定字段起名
select 字段1 as 别名1,.... from 表名 where 条件;
去重查询
select distinct 查询到字段名1,distinct 查询到字段名2... from 表名 where 条件;
查询到数据进行四则运算
select 查询到字段名1进行四则运算,查询到字段名2进行四则运算... from 表名 where 条件;
拼接查询内容
select concat(1,2,...) from 表名 where 条件;
//拼接值1,值2,...成一个字段
查询在两者之间
select 字段.... from 表名 where 字段 betweenand;
查询不在两者之间
select * from 表名 where 字段名 not betweenand
模糊查询
//_占位符,只能占一位
//%通配符,可占任意位

select * from 表名 where 字段名 like '%a%';
//查询含有a的某一字段
分页查询
//limit num1,num2  显式从第num1条数据开始,查询出num2条数据。num1是从0开始的

select * from 表名 limit num1,num2;
//从第num1行开始,查找num2条数据
排序
select * from 表名 order by 字段名 asc;
select * from 表名 order by 表名 desc;
//asc 升序
//desc 降序
分组(group by)
select * from 表名 group by 字段名;

聚合函数

//统计条数
(count(字段))
//计算平均值
avg(字段)
//最大值max(字段)//最小值min(字段)
HAVING 子句

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。

表与表之间的关系

由于咱们再实际开发中,需要使用的数据会很多,也就导致数据对应的字段特别多。如果你把所有的字段全部建立再一张表里面,这样会导致一个数据的冗余度特别大。就需要把这些字段按照功能或者需求来进行分离,也就是咱们需要建立多张表,需要咱们在多张表之间进行操作(查询)。

一对一

一张表里面的一条记录对应另外一张表的一条记录

用户表和用户详细信息表

学生信息和学籍

人的信息表和身份证

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UheocrMc-1634978606736)(C:\Users\Administrator\Desktop\day42\笔记\images\image-20211020091923223.png)]

方案一:

用户登陆表里面有id,把这个id作为主键来设置,用户详情表id也作为主键,然后让用户表中的id和用户详情表的id对应

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QOlwVbtW-1634978606739)(C:\Users\Administrator\Desktop\day42\笔记\images\image-20211020092210851.png)]

方案二:唯一外键

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xMGzTLpe-1634978606741)(C:\Users\Administrator\Desktop\day42\笔记\images\image-20211020092720595.png)]

一对多

一张表里面的一条记录对应另外一张表的多条记录

多对一

一张表里面的多条记录对应另外一张表的一条记录

学生表和班级表

一个班级对应多个学生,多个学生对应的是一个班级

使用外键来实现表与表之间的关系

多对多

一张表里面的一条记录对应另外一张表的多条记录

另外一张表的一条记录对应一张表的多条记录

多表联查(join)
内连接(inner join)
select * from 表名1 inner join 表名2;
//这种情况会出现笛卡尔积,其结果为两张表的总数的乘积。查看查询出来的结果集中只有当表名1.主键= 表名2.主键.主键时符合需求
select * from 表名1 inner join 表名2 where 表名1.主键= 表名2.主键;

使用on关键字可以有效降低笛卡儿积带来的内存消耗

select * from 表名1 inner join 表名2 on dept.deptno = emp.deptno;

也可以使用as关键字给表起别名

select e.ename,e.job,d.loc from 表名1 e inner join 表名2 d on e.主键 = d.主键;
左连接(left join)
select * from 表名1 left join dept on 表名2.主键 = dept.主键;
//左边的表全部显式,右边的表没有与左边表对应,全部显式成null
右连接(right join)
select * from 表名1 right join dept on 表名2.主键 = dept.主键;
Union

把具有相同字段数目和字段类型的表合并到一起,去除相同记录。

SELECT name FROM table_name1 UNION SELECT name FROM table_name2 ....;
//在查询相同表内不同查询内容时,其形成的新的两张表字段名和字段类型完全相同,所以可以使用Union合并这两张查询表
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值