近期在学习Mysql,并对其中基础的增删改查命令做了笔记,希望能帮到大家!
MySQL启动/关闭命令: net start mysql80 net stop mysql80(在cmd中可以直接通过mysql进入,通过quit退出)
MySQL客户端连接:mysql [-h 127.0.0.1] [-P 3306] -u root -p
MySQL数据类型分为两种:数据库、表
SQL命令分为四种类型:DDL(数据定义语言,创建数据库、表以及其内部的定义)、DML(数据操作语言,对数据进行增删改)、DQL(数据查询语言,查询数据库中表的记录)、DCL(数据控制语言,创建用户赋予权限)
DDL
查询所有数据库
show databases;
查询当前数据库
select databases();
创建 create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则];
删除 drop database [if exits] 数据库名;
使用 use 数据库名;
查询当前数据库所有表 show tables;
查询表结构 desc 表名;
查询指定表的建表语句(定义这个表时候的表内属性) show create table 表名;
表操作-创建 create table 表名(
字段1 字段1类型[comment 字段1注释], 例如age tinyint comment '年龄'
......
字段n 字段n类型[comment 字段n注释] 注意:最后一个字段后面没有逗号
)[comment 表注释] 例如comment ‘职员信息表';
数据类型
数值:tinyint (-128,127) 或 unsigned tinyint (0,255)
smallint(-32768,32767) 或 (0,65535)
medium(-8388608,8388607) 或 (0,16777215)
int/integer(-2147483648, 2147483647) 或(0, 4294967295)
bigint(-2^63, 2^63-1) 或(0, 2^64-1)
float(-3.402823466 E+38, 3.402823466351 E+38) 或 0和(1.175494351 E-38, 3.402823466 E+38)
double(-1.7976931348623157 E+308, 1.7976931348623157 E+308) 或 0和 (2.2250738585072014 E-308, 1.7976931348623157 E-308)
decimal 依赖于M(精度)和D(标度)的值
字符串:char(定长字符串)
varchar(变长字符串)
tinyblob(不超过255个字符的二进制数据)
blob(二进制形式的长文本数据)
text(长文本数据)
mediumblob(二进制形式的中等长度文本数据)
mediumtext(中等长度文本数据)
longblob(二进制形式的极大文本数据)
longtext(极大文本数据)
日期:date(日期值 格式YYYY-MM-DD)
time(时间值或持续时间 格式HH:MM:SS)
year(年份值 格式YYYY)
datetime(混合日期和时间值 格式YYYY-MM-DD HH:MM:SS)
timestamp(混合日期和时间值 格式YYYY-MM-DD HH:MM:SS)
DML
表修改
增加字段 alter table 表名 add 字段名 类型(长度) [comment 注释] [约束]
例如 为emp表增加一个新的字段"昵称"为nickname,类型为varchar(20)
alter table emp add nicename varchar(20) comment ' 昵称';
修改数据类型 alter table 表名 modify 字段名 新数据类型(长度);
修改字段名和字段类型
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束];
例如 将emp表的nickname字段修改为username,类型为varchar(30)
alter table emp change nickname username varchar(30) comment '用户名';
删除字段 alter table 表名 drop 字段名;
例如 将emp表的字段username删除
alter table emp drop username;
修改表名 alter table 表名 rename to 新表名;
例如 将emp表的表名修改为employee
alter table emp rename to employee;
删除表 drop table [if exists] 表名;
删除指定表,并重新创建该表(删除表内数据用)
truncate table 表名;
例如 删除表tb_user
drop table if exists tb_user;
DQL
条件查询(where)
查询年龄等于88的员工
select * from emp where age = 88;
查询没有身份证好的员工信息(空值的用法)
select * from emp where idcard is null;
查询年龄不等于88的员工信息(不等于的用法)
select * from emp where age != 88; 或者 select * from emp where age <> 88;
查询年龄在15-20的员工信息(范围表示)
select * from emp where age >=15 && age <=20; 或者 select * from emp where age >=15and age <=20; 或者 select * from emp where age between 15and 20;(一定要是小的在前面大的在后面)
查询年龄等于18或20或40的员工信息(或 的表示)
select * from emp where age = 18 or age = 20 or age = 40; 或者 select * from emp where age in(18,20,40);
查询姓名为两个字的员工信息
select * from emp where name like '__';(用下划线表示字,一个下划线代表一个未知字)
查询身份证号最后一位是X的员工信息
select * from emp where idcard like '%X';(百分号可以替换无限制数量的字符,不然就得用17个_表示了)
聚合函数:
count 统计数量
max 最大值
min 最小值
avg 平均值
sum 求和
select 聚合函数(字段列表) from 表明; null值不参与聚合函数计算
例:统计该企业西安员工的平均年龄
select count(*) from emp where workaddress = '西安'; 或者 select count(idcard) from emp where workaddress = '西安';
分组查询:
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后的过滤条件];
例如 根据工作地址分组,查询其中年龄大于20的男性员工和女性员工的数量,获取员工数量大于3的工作地址(将表头输出为address_count)
select workaddress, count(*) address_count from emp where age > 20 group by workaddress having count(*) > 3;
执行顺序中:where > 聚合函数 > having
分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
排序查询:
select 字段列表 from 表名 order by 字段1 排序方式, 字段2 排序方式2;
排序方式: 1、ASC 升序(默认) 2、DESC 降序
例如 根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序
select * from emp order by age asc,entrydate desc;(其中的asc可以省略)
分页查询:
select 字段列表 from 表名 limit 起始索引, 查询记录数;
注意:起始索引从0开始,起始索引=(查询页码-1)*每页显示数,查询第一页的时候起始索引可以省略
例如 查询第2页员工数据,每页展示10条记录
select * from emp limit 10,10;
思考:
查询年龄为20,21,22,23岁的女性员工信息。
查询性别为 男,并且年龄在 20-40 岁(含)以内的姓名为三个字的员工。
统计员工表中,年龄小于60岁的,男性员工和女性员工的人数。
查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序。
查询性别为男,且年龄在20-40岁(含)以内的5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。
答案:
select * from emp where gender = '女' and age in(20,21,22,23);
select * from emp where gender = '男' and age between 20 and 40 and like '___';
select gender, count(*) from emp where age < 60 group by gender;
select name , age from emp where age <= 35 order by age asc, entrydate desc;
select * from emp where gender = '男' and age between 20 and 40 order by age asc,entrydate desc limit 5;
DQL编写顺序:select 字段列表 from 表名列表 where 条件列表 group by 分组字段列表 having 分组后条件列表 order by 排序字段列表 limit 分页参数(编写代码的格式顺序)
DQL执行顺序:1 表名列表 2 条件列表 3 分组字段列表、分组后条件列表 4 字段列表 5 排序字段列表 6 分页参数(数据库中操作的执行优先度)
DCL
管理用户
查询用户 USE mysql;
select * from user;
创建用户 create user '用户名'@'主机名' identified by '密码';
修改用户密码 alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';
删除用户 drop user '用户名'@'主机名';
其中主机名若为%,表示任意主机
权限控制(常用)
所有权限 all, all privileges
查询数据 select
插入数据 insert
修改数据 update
删除数据 delete
修改表 alter
删除数据库/表/视图 drop
创建数据库/表 greate
查询权限 show grants for '用户名'@'主机名'
授予权限 grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
撤销权限 revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';