mysql语法备忘
基本sql语句
库相关
增:create database mydb charset uft8;
删: drop database mydb;
改: alter table mydb charset gbk;
查:show databases;
show create databases mydb;
表相关
切换数据库:use mydb;
增:create table t1(id int,name char(5) 约束);
约束类型:default …/ UNIQUE/NOT NULL/PRIMARY KEY
删:drop table mydb;
改:修改字段:alter table t1 add|modify|drop|change
add 跟 列名和类型
modify 跟 列名 和 类型
drop 跟列名
change 跟 旧列名 新列名 类型
改字符编码:alter table 表名 default character set gbk
改名称: alter table t1 to t2;
查:show tables;
show create talbe t1;(没啥用)
desc t1
记录相关
增:
insert into 表名称 values(值1,值2,…) 值的个数要与字段完全相同
insert into 表名称(字段1,字段2…) values(值1,值2,…)
删:delete from 表名 where 条件;
改:update 表名 set 字段1 = 值1,字段2 = 值2 where 条件
查:select id/* from 表名;
重建表,清空所有数据,留下框架:
truncate table t1;
表查询的完整语句
select distinct (* or 字段名 or 四则运算) from 表名 注:distict 去重
where 条件
group by 字段
having 条件
order by 排序
limit 控制显示几条
concat 用法:仅仅用于字符串的拼接,在字段的数据前加上字段名
select concat (‘姓名’,name),concat(‘英语’,english) from stu;
聚合函数的定义:
sum,count,avg,man,min等都是聚合函数
select dept from emp where avg(salary) > 5000;
error: Invalid use of group function
报错原理解析
where 条件中不允许使用分组函数 应该把where 改成having
group_concat函数 用于拼接组内记录的某个字段 拼接为一个字符串
select dept,group_concat(name) from emp group by dept;
多表查询
内链接查询:select *from dept,emp where dept.id=emp.dept_id;
优化版内链接查询:select *from dept join emp on dept.id=emp.dept_id;
左外连接查询: select *from dept left join emp on dept.id=emp.dept_id;
全外链接查询 :select *from dept left join emp on dept.id=emp.dept_id
union
select *from dept right join emp on dept.id=emp.dept_id;
子查询
当一个查询是另一个查询的条件时,这个查询称之为子查询(内层查询)
当查询需求比较复杂,一次性查询无法得到结果,需要多次查询时,
例如:给出一个部门名称,需要获得该部门所有的员工信息
需要先确定部门的id,
然后才能通过id确定员工
内链接查询方式:
select emp.name from emp inner join dept on dept.id = emp.dept_id where dept .name = “财务”;
子查询方式:
第一步 需要知道财务部的id
select id from dept where name = “财务”;
第二步 用查询的到的id作为判断条件查询emp
select name from emp where dept_id = 3;
3不能写死 是上一个查询的结果 所以直接写在后面 加上括号就变成了子查询
select name from emp where dept_id =(最好把=改成in) (select id from dept where name = “财务”);
Mysql 用户管理
创建账号语句
create user 用户名@“ip地址” “identified” by 密码;
create user tom@“192.168.101” identified by “123”;
授权语句
grant all on . to tom@“localhost” identified by “123”;
#该语句中的all 增删改查所有权限 但是不包括grant权限
#. 表示任何数据库 任何表 存储在user表
grant all on db.* to tom@“localhost” identified by “123”
#db.* 该用户可以操作db数据库的任何表 存储在 db表
grant all on db.t1 to tom@“localhost” identified by “123”
#db.* 该用户可以操作db数据库的t1表 存储在 table_privi表
grant select(id) on db.t1 to tom@“localhost” identified by “123”
#精确到字段 和 操作级别
#该用户只能查询 db下的t1表
grant all on . to tom@“localhost” identified by “123” with grant option;
#with grant option 表示该账户可以将权限授予其他用户
REVOKE all privileges [column] on db.table from user@“host”;
#收回权限
drop user@“host”
#删除用户
flush privileges;
#刷新权限表 一些时候权限信息可能会有所延迟 可以执行该语句立即刷新权限信息