MySQL基础语法

MySQL基础语法

3.1 数据库操作
# 查看所有的数据库
show databases;
# 选择一个数据库
use 数据库名;
# 查看当前所在的数据库
select database();
# 创建数据库
create database 数据库名;
# 删除数据库
drop database 数据库名;
3.2 数据类型

1.数字类型,包含了整数和小数
decimal是没有精度缺失,常用于需要精确度较高的类型(利率…),常规的价格之类的使用double即可

2.字符类型(string)

char:代表字符,长度固定,容易浪费空间资源,但效率高

​ 例如:年龄、手机号、身份证号、身高、婚姻状态、性别…

varchar:字符串,长度可变,不浪费空间,但效率低

3.日期类型

date:只有年月日

time:只有时分秒

year:只有年

datetime:年月日时分秒

timestamp:年月日时分秒(时间戳)

datetime和timestamp的区别

datetime默认值是是null,timestamp默认是当前系统时间

3.3 表操作

注意:所有对表的操作,前提是需要先选择数据库

# 查看表
show tables;
# 创建表
create table 表名(
field 数据类型 [约束],
field...
);
# 例如 创建部门表
create table t_depart(
dno int,
dname varchar(255),
loc varchar(255)
);
# 查看表结构
desc 表名;
# 删除表
drop table 表名;
# 修改表名
rename table 旧表名 to 新表名;
3.3.1 表字段操作
# 添加字段
alter table 表名 add field 数据类型 [约束];
alter table depart add departphone varchar(11);
# 修改字段数据类型
alter table 表名 modify field 数据类型 [约束];
alter table depart modify departphone char(11);
# 修改字段名
alter table 表名 change 老字段名 新字段名 数据类型;
alter table depart change departphone phone char(11);
# 删除指定字段
alter table drop [column] field;
alter table 表名 drop phone;

创建员工表

create table emp(
eno int,
ename varchar(50),
sex varchar(5),
birthday date,
phone varchar(11),
dno int);
4.MySQL数据操作

对于数据的操作,就是增删改查(CURD),区别点在于实际对应的需求不同,所以写的SQL的复杂程度不同

4.1 添加数据
# 语法一 insert into 表名 values(值,...); 值的顺序与类型要和创建表时给定的字段顺序及类型保持一致
insert into depart values(10,'研发部','上海市浦东新区XXX大厦16楼1603');
# 语法二 insert into 表名(filed,...) values(值,...); 值的顺序与类型要和前面指定的字段的顺序及类型保持一致
insert into emp(eno,ename,sex,phone,dno) values(1,'小阿飞','男','16864543487',10);
# 批量添加数据 insert into 表名(field,...) values(val,...),(val,...),...;
insert into depart values(20,'客服部','郑州市高新区中移在线5楼'),(30,'运维部','郑州市高新区中移在线3楼');
4.2 修改数据

在进行数据的修改时要注意,如果没有指定条件的话,会将表中的所有的数据都进行修改

# 修改数据 update 表名 set field=val,field=val,... where 条件;
update emp set birthday='2000-02-28' where eno=1;
update emp set birthday='2000-02-27',phone='13687487469' where eno=1;
4.3 删除数据

在删除数据时要注意,如果没有指定条件的话,会将表中的数据清空

# 删除数据 delete from 表名 where 条件
delete from depart where deptno=50;
# truncate 清空数据 truncate table 表名;
truncate table depart;
4.4 查询数据
# 使用通配符*查看
select * from 表名;
# 查询指定字段的数据
select ename,birthday,phone from emp;

思考:使用通配符和使用字段名的区别

*代表通配,需要先去表中查看表都有哪些字段,然后在匹配对应的字段信息

直接使用字段名,直接去表中匹配对应的字段

所以*会影响性能,开发要求不能使用通配符

5.MySQL关键字
5.1 排序

排序是对已经查出来的结果进行排序的

关键词:order by / desc(降序) asc(升序默认的)

# 需求:按编号进行降序排列
select * from emp order by eno desc;
# 需求:根据部门编号升序排列,如果部门一致,那就按照日期降序排列
select * from emp order by dno asc,birthday desc;
5.2 运算符
运算符描述运算符描述
=判断>大于
<小于!=非等
<>非等>=大于或等于
<=小于或等于
# 需求:找出性别为男的员工
select * from emp where sex='男';
5.3 连接符
连接符描述
and且关系(前后两个条件必须同时满足)
or或关系(两者满足其中之一即可)
# 需求:性别为男且部门为20的员工
select * from emp where sex='男' and dno=20;
# 需求:性别为男或部门编号为20的
select * from emp where sex='男' or dno=20;
# 需求:性别为男且部门编号为20的员工或员工id<5
select * from emp where sex='男' and dno=20 or eno<5;

非空查询(is null)

# 需求:删除部门编号为空的数据
delete from emp where dno is null;
5.4 in/not in

在in的括号中可以给定多个参数值,参数值之间的条件是或关系,且不一定非要满足

# 需求:查询指定部门的员工信息
select * from emp where dno in(10,11,12,20,30,31,55,66,77);
5.5 聚合函数
函数名描述
sum()求和(列的和)
count()求总行数
max()求最大值
min()求最小值
avg()求平均值

行求和(如果列的值存在null,结果也是null,此时可以使用ifnull()进行运算时默认值的设置)

# 需求:求员工编号与部门编号的和
select eno + dno from emp;
# ifnull(arg0,arg1) arg0代表可能为null的列,arg1代表如果为空要进行代替的值
select eno + ifnull(dno,0) from emp;

求总行数(count())

# 需求:求总行数 *代表以行数最多的结果为导向
select count(*) from emp;
# count也可以指定列,如果列中有null值,则不计入总数
select count(dno) from emp;

求最大值(max())

# 求最大的部门编号
select max(dno) from emp;

求平均值(avg())

# 求部门的平均值
select avg(dno) from emp;
5.6 分组(group by)

根据数据中的某一个特征对数据进行划分,这种形式叫分组

# 需求:求男生和女生的人数
select sex,count(sex) from emp group by sex;

having条件(结合group by使用,在分组的基础上再次进行筛选)

# 需求:求男生女生人数在3个以上的员工信息
select sex,count(sex) from emp group by sex having count(sex)>3;

having和where有什么区别

1.where是直接跟在表的后面的条件,having是跟在group by后面的条件

2.having的使用需要结合group by,group by在进行分组的时候是很耗性能的

5.7 别名

别名仅仅只是在当前要显示的结果中生效,起到简化及通俗易懂的效果

关键词:as

# 需求:显示员工的信息(as可以省略不写)
select eno as 员工编号,ename as 员工姓名,dno 部门编号 from emp;
5.8 分页(limit)

limit在MySQL中称为方言(该关键词只能在MySQL中使用)

语法:limit arg0,arg1; arg0代表起始下标(数据库中的下标是从0开始的),arg1代表要查询的条数

# 需求:查询前三条数据
select * from emp limit 0,3;
# 需求:查询第二页的数
select * from emp limit 3,3;
6. 约束

约束就是给字段添加对应的规则,用户在进行数据的操作时必须要符合对应的规则,才能进行操作,可以有效的保证数据的安全性

约束名关键字描述
非空约束not null数据不能为空
唯一约束unique数据不能重复
主键primary key主键(非空且唯一)
外键foreign key外键(用于表之间的关联关系)
# 指定手机号不能为空
alter table emp modify phone varchar(11) not null;
# 指定手机号是唯一的(null值是可以重复的)
alter table emp modify phone varchar(11) unique;
# 指定手机号不能为null且唯一
alter table emp modify phone varchar(11) not null unique;
# 指定员工编号为主键
alter table emp modify eno int primary key;

思考:表中一定要存在主键嘛

建议每张表都要有一个主键,因为其他的字段中的数据可能存在重复的,就没有办法区分数据,所以主键的存在就是一个唯一标识

一般用户(程序员)会给每张表都设置一个id字段,作为主键,该字段如果是数字类型,为了方便管理,可以让其自增长(auto_increment)

# 让员工编号自增长
alter table emp modify eno int auto_increment;

外键用于多张表之间的关联关系(主从关系)

# 给员工表中的部门编号设置外键约束
alter table 表名 add constraint 约束名 foreign key(当前表中约束的字段) references 主表表名(要约束的字段名);
alter table emp add constraint fk_emp_dno foreign key(dno) references depart(dno);

注意

1.主表中作为外键使用的字段要求一定是非空且唯一的

2.如果此时要删除主表中的数据,前提是该外键字段的值在从表中没有被使用

创建表时添加约束

 create table salarys(
 sid int primary key auto_increment,
 salary double(8,2) not null,
 eno int not null,
 constraint fk_salarys_eno foreign key(eno) references emp(eno));
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值