数据库登录操作
MySQL 创建数据库
我们可以在登陆 MySQL 服务后,使用 create 命令创建数据库,语法如下:
CREATE DATABASE 数据库名;
[root@host]# mysql -u root -p
Enter password:****** # 登录后进入终端
数据库的操作
# 查看所有的数据库
show databases;
# 选择一个数据库
use 数据库名;
# 查看当前所在的数据库
select database();
# 创建数据库
create database 数据库名;
# 删除数据库
drop database 数据库名;
**
日期类型
在这里
date:只有年月日
time:只有时分秒
year:只有年
datetime:年月日时分秒
timestamp:年月日时分秒(时间戳)
datetime和timestamp的区别
datetime默认值是是null,timestamp默认是当前系统时间
数据类型
数据类型
1.数字类型,包含了整数和小数
decimal是没有精度缺失,常用于需要精确度较高的类型(利率…),常规的价格之类的使用double即可
2.字符类型(string)
char:代表字符,长度固定,容易浪费空间资源,但效率高
例如:年龄、手机号、身份证号、身高、婚姻状态、性别…
varchar:字符串,长度可变,不浪费空间,但效率低
表操作
# 查看表
show tables;
# 创建表
create table 表名(
field 数据类型 [约束],
field...
);
# 例如 创建部门表
create table t_depart(
dno int,
dname varchar(255),
loc varchar(255)
);
# 查看表结构
desc 表名;
# 删除表
drop table 表名;
# 修改表名
rename table 旧表名 to 新表名;
字段操作
# 添加字段
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;
数据库操作
添加数据
# 语法一 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楼');
修改数据
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;
在进行数据的修改时要注意,如果没有指定条件的话,会将表中的所有的数据都进行修改
查询数据
# 使用通配符*查看
select * from 表名;
# 查询指定字段的数据
select ename,birthday,phone from emp;
删除数据
在删除数据时要注意,如果没有指定条件的话,会将表中的数据清空
delete from 表名 where 条件
delete from depart where deptno=50;
清除数据
清空数据 truncate table 表名;
truncate table depart;
使用通配符和字段名的区别在哪里
符号 * 代表通配,需要先去表中查看表都有哪些字段,然后在匹配对应的字段信息
直接使用字段名,直接去表中匹配对应的字段
所以 * 会影响性能,开发要求不能使用通配符
MySQL关键字
排序是对已经查出来的结果进行排序的
关键词:order by / desc(降序) asc(升序默认的)
# 需求:按编号进行降序排列
select * from emp order by eno desc;
# 需求:根据部门编号升序排列,如果部门一致,那就按照日期降序排列
select * from emp order by dno asc,birthday desc;
运算符
连接符
非空查询
非空查询:(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);
聚合函数
行求和(如果列的值存在null,结果也是null,此时可以使用ifnull()进行运算时默认值的设置)
# 需求:求员工编号与部门编号的和
select eno + dno from emp;
# ifnull(arg0,arg1) arg0代表可能为null的列,arg1代表如果为空要进行代替的值
select eno + ifnull(dno,0) from emp;
求总行数
# 需求:求总行数 *代表以行数最多的结果为导向
select count(*) from emp;
# count也可以指定列,如果列中有null值,则不计入总数
select count(dno) from emp;
最大值
# 求最大的部门编号
select max(dno) from emp;
平均值
# 求最大的部门编号
select max(dno) from emp;
分组(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有什么区别
where是直接跟在表的后面的条件,having是跟在group by后面的条件
having的使用需要结合group by,group by在进行分组的时候是很耗性能的