查询所有数据库
show databases;
选择数据库 使用数据库 删除数据库
select database(); use +数据库名; drop +数据库名;
创建数据库
create database (if not exists) tb_user;
表
show tables;//查询表结构
DESC 指定表名,查看表结构
show create table 表名;//查询建表语言
表结构创建语法 //USE +数据库名 指定在那个数据库中创建
create table 表名 (
ID INT COMMENT '编号',
name varchar(50) COMMENT '姓名';
age int comment '年龄';
gender varchar(1) comment ’性别‘) comment '用户表';
添加字段
alter table 表名 add nickname varchar(20) comment '昵称' ;
修改字段
alter table 表名 change 旧字段名 新字段名 修改类型 comment '注释';
alter table 表名 change nickname username varchar(30) comment '用户名';
删除字段
alter table 表名 drop username;//删除该行
修改表名
alter table 表名 rename to 新表名
删除表名
drop table +表名; truncate table +表名;//删除表,并重建同名空表
添加数据
给字段添加数值
insert into 表名 (, ) values ( ); 或 insert into 表名 values();
插入多条数据
insert into 表名 values (,),(,);
unsigned 无符号数大于等于0
修改数据
update 表名 set name ='1123' where id=1;
修改多项数据
update 表名 set name=' ',gender=' 男' where id=1;
修改所有项数据
update 表名 set name='小李';
删除数据
delete from 表名 where gender= '女';
delete from 表名;删除所有数据
查询语句
select * from 表名;查询所有
SELECT workaddress as '工作地址' from emp;//as '工作地址' 为别名
SELECT workaddress '工作地址' from emp; //可省略as
distinct//去除重复数据
SELECT distinct workaddress '工作地址' from emp;
条件查询 该示例中 所用案例表名为 emp
select * from emp where age=88;
select * from emp where age<=20;
查询不等于80
select * from emp where age<>20;
select * from emp where age!=20;
查询没有某值的人
select *from emp where idcard is null;
有某值的人
select *from emp where idcard is not null;
查询在15 到20岁之间的数据
select * from emp where age between 15 and20;
select * from emp where age>=15 &&(and) age<=20;
查询女年龄小于20
select * from emp where and gender='gender' age<=20;
查询年龄在 18 20 40
select * from emp where age=20 or age=10 or age =40;
查询年龄为两个字的 _代替单个字符 %任意字符
select * from emp where name like '__';
查询最后一位是x的员工信息
select * from emp where idcard like '%x';
聚合函数
count 统计数量 max 求最大值 min 求最小值 avg 求平均值 sum 求和 作用于每一列//null值不参与聚合运算
select count (*//此处写所查询的属性) from emp;
select avg (age//此处写所查询的属性) from emp;
select SUM(age//此处写所查询的属性) from emp where wordaddress='西安';
分组查询
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having]
按性别分组 并统计男性以及女性员工数量 select gender, count(*) from emp group by gender;
按性别分组 统计男性员工和女性员工的平均年龄
select gender,avg(age) from emp group by gender;
查询年龄小于45的员工,按工作地址进行分组,获取员工数量大于等于3的工作地址
select workaddress,count(*) age from emp where age<45 group by workaddress having count(*)>=3;
where在分组之前进行过滤,having 在分组聚合之后进行过滤;
排序查询
order by ASC升序 DESC降序
根据年龄进行升序排序 select * from emp order by age asc ;
根据入职时间进行降序排序 select * from emp order by time desc;
根据年龄对公司员工进行升序排序,年龄相同再根据入职时间进行降序排序
select * from emp order by age asc, time DESC;
分页查询
select 字段列表 from 表名 起始索引 查询记录数;
select * from emp limit 0,10; 查询第一页数据,展示10条数据
select * from emp limit 10,10;查询第二页的数据 第一个参数记录方法:(页码-1)*页展示记录数
小节联系
查询年龄为 20,21,22,23的女性员工的信息
select * from emp where gender='女' and age in(20,21,22,23);
查询性别为男,并且年龄在 20-40岁以内的姓名为三个字的员工
select * from emp where gender= '男' and age between 20 and 40 and name like '_ _ _';
统计 员工表中,年龄小于60岁的,男性和女性员工的数量
select gender,count(*) from emp where age<60 group by gender; //分组之前进行年龄过略
查询所有年龄小于等于35岁的员工的姓名和年龄,并对查询结果按升序进行排序,如果年龄相同按入职顺序进行降序排序
select name,age from emp where age<=35 order by age ASC , time DESC;
查询性别为男,且年龄在20到四十岁以内的前五个员工的信息。对查询结果按年龄进行升序排序,年龄相同按入职时间进行升序排序;
select * from emp where gender='男' and age between 20 and 40 order by age asc,time asc
limit 0,5; 取前五条纪律语法最后写
编写与执行顺序
DCL
用户控制语言
查询用户
use mysql ;
select * from user;
创建用户
create user '用户名'@'主机名' identified by '密码';
alter user '用户名'@'主机名' identified with mysql_native_password BY ' 新密码'; 修改用户密码
删除用户 drop user '用户名'@'主机名';
创建用户
create user 'itcast'@'localhost' identified by '123456';
在任意主机可访问该数据库
create user 'itcast'@'%' identified by '123456';
修改数据库名
alter user 'heima'@'%' identified with mysql_native_password BY '1234';
删除用户名
删除用户 drop user 'itcast'@'localhost';
DCL权限控制
查询权限 show grants for '用户名'@‘主机名';
show grants for 'heima'@'%';
授予权限 grant select on 数据库.表名 to '用户名'@'主机名';
grant all on itcast.* to 'heima'@'%';//授予该数据库所有表权限。
撤销权限
revoke all on itcast.* from 'heima'@'%'; 撤销权限
字符串函数
connat//拼接字符串 select connat('hello','mysql');
lower将字符全部转换为小写 select lower('Hello');
upper将字符全部转换为大写 select upper('Hello');
字符串长度为5.且在01左侧填充 - 至长度为5 select lpad('01',5,'-');
字符串长度为5.且在01右侧填充 - 至长度为5 select rpad('01',5,'-');
trim 去除字符串头部与尾部的空格
select trim (' Hello MySQL '); 作用结果 Hello MySQL
select substring ('Hello MySQL',1,5);
由于业务变更,企业员工的工号,统一为五位数,目前不足五位数的全部在前面补0,比如 1的工号应该为 00001;
update emp set worknumber = lpad (worknumber,5,'0');
数值函数
select round (2.345,2);保留两位小鼠2.34
select lpad(rund()*1000000,6,'0') //生成六位 随机数
日期函数
datediff(date1,date2);计算两个date之间的日期 默认为 date1-date2
select now();获取当前日期和时间
案例:查询所有员工入职天数,并根据入职天数到序排列
select name ,datediff(curdate(),time) days from emp order by days desc ;
流程控制函数
ifnull(value1,value2); 如果value1不为空,返回value1,否则返回value2
if(value,t,f);如果 value 为真,返回true,否则返回false
case workaddress (所选属性) when '北京' then '一线城市' when '上海' ten '一线城市'end
约束
唯一约束 unique 主键约束 primary key ,自动增长约束 auto_increment
非空约束 not null check (age>20&&age<=120)约束 default 默认约束
外键约束
外键让两张表的数据之间建立连接,从而保证数据的一致性和完整性。
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id);
删除外键
alter table 表名 drop foreign key 外键名称;
删除和更新行为
no action ,删除/更新行为时,首先检查该记录是否有对应外键,有则不允许删除或者更新
restrict 删除/更新行为时,首先检查该记录是否有对应外键,有则不允许删除或者更新
cascade 删除/更新行为时,首先检查该记录是否有对应外键,如果有则也删除外键在子表中的记录
set null 删除/更新行为时,首先检查该记录是否有对应外键,如果有,则设置子表中的该外键值为NULL
set default 父表有变更时,子表将外键设置为一个默认的值
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id) ON update cascade on delete cascade;