用户
我们现在默认使用的都是root
用户,超级管理员,拥有全部的权限。但是,一个公司里面的数据库服务器上面可能同时运行着很多个项目的数据库。所以,我们应该可以根据不同的项目建立不同的用户,分配不同的权限来管理和维护数据库。
- 创建用户:create user ‘用户名’@‘主机名’ identified by ‘密码’;
- 用户名:将创建的用户名
- 主机名:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
- 密码:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器
‐‐ user1用户只能在localhost这个IP登录mysql服务器
CREATE USER 'user1'@'localhost' IDENTIFIED BY '1234';
‐‐ user2用户可以在任何电脑上登录mysql服务器
CREATE USER 'user2'@'%' IDENTIFIED BY '1234';
- 授权用户的权限:GRANT 权限1,权限2…..ON 数据库名,表名 TO ‘用户名’@‘表名’’;
用户创建之后,没什么权限,需要给用户授权
- GRANT 授权关键字
- 授予用户的权限,如SELECT,INSERT,UPDATE等。如果要授予所有的权限则使用ALL
- 数据库名.表名:该用户可以操作哪个数据库的哪些表。如果要授予该用户对所有数据库和表的相应操作权限则可用*表示,如*.*
- '用户名'@'主机名': 给哪个用户授权
1. 给`user1`用户分配对`test`这个数据库操作的权限
GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON test.* TO 'user1'@'localhost';
2. 给`user2`用户分配对所有数据库操作的权限
GRANT ALL ON *.* TO 'user2'@'%';
- 撤销权限:REVOKE 权限1,权限2 ON 数据库.表名 FROM ‘用户名’@‘主机名’;
撤销user1用户对test操作的权限
REVOKE ALL ON test.* FROM 'user1'@'localhost';
- 查看权限:SHOW GRANT FOR ‘用户名’@’主机名’;
查看`user1`用户的权限
SHOW GRANTS FOR 'user1'@'localhost';
- 删除用户:DROP user ‘用户名’@’主机名’;
6.修改密码:修改管理员密码:mysqladmin -u root -p password
修改普通用户密码:set password for ‘用户名‘@’主机名‘;
- mysqladmin -uroot -p password 新密码
-
-
- 新密码不需要加上引号
- 注意:需要在未登陆MySQL的情况下操作。
-
-
数据库
- 创建数据库:CREATE DATABASE [ IF NOT EXISTS ] db_name;
- 使用数据库:USE db_name;
- 删除数据库:DROP DATABASE db_name;
- 显示所有数据库:SHOW DATABASES;
数据表
- 创建数据表中的结构:CREATE TABLE tab_name(col_name datatype default null/number comment '注释',…);
- 显示所有表:SHOW tables;
- 查看表:DESC tables;
- 创建和某结构一样的表:CREATE TABLE table LIKE 某table;
- 创建表:CREATE TABLE t AS select * from table;
- 删除表:DROP TABLE table_name;
- 重命名表:RENAME TABLE 列名 TO 新列名;
- 添加表的列:ALTER TABLE 表名 ADD id 类型;
- 修改表的列属性:ALTER TABLE 表名 MODIFY id(列名)类型;
- 修改表的列名称:ALTER TABLE 表名 CHANGE id(列名)ss(新列名) 类型;
- 删除表的列:ALTER TABLE 表名 DROP 列名;
- 备份表结构:mysqldump -u root -p -d 数据库名 table1 table2 ... > d://a.sql(路径)
- 备份数据库的所有表结构:mysqldump -u root -p -d 数据库名 > d://a.sql(路径)
- 备份多个数据库的所有表结构:mysqldump -u root -p -d DATABASES db1 db2 ... > d://a.sql(路径)
- 备份所有数据库的表结构: mysqldump -u root -p -d –all-databases> d://a.sql(路径)
记录(数据)
- 添加数据:INSERT INTO 表名(字段名) VALUES (值,值,值,);
**INSERT INTO table_name VALUES(值列表)
**INSERT INTO table_name (列列表) VALUES(值列表)**
- value和values的区别,values可以同时插入多条数据用逗号隔开
- dept和dept(列名,列名。。。)区别,如果不写列表必须按照列表创建时的顺序每一列都要添加
- 有列名的按照列名排列顺序添加
- 查询数据:查询所有数据:SELECT * FROM 表名;
查询某列数据:SELECT L 列名 FROM 表名;
根据条件查询:SELECT 列名(条件) FROM 表名 WHERE 条件;
- 修改数据:UPDATE 表名 SET deptno=6;
根据条件修改:UPDATE 表名 SET deptno=n WHERE 条件;
- 删除数据:全部删除:DELETE FROM 表名
删除指定数据:DELETE FROM 表名 WHERE 条件;
- delete from dd;
- truncate table dd;
- delete 是清空表中的数据,DML
- truncate 是清空表数据(删除表后重新创建一个一样表),DDL
- 备份数据:(相当于在备份结构的语法上去掉-d选项) d 就是date
- 还原表结构和数据:mysql -u root -p [dbname] < 目标文件
Where条件连接
当`sql`语句中的条件有多条时,可以将多个条件连接起来。他们之间的关系有一下几种:
- **`and`** `a and b`: 表示 需要同时满足 a 条件 和 b 条件
- **`or`** `a or b`: 表示 满足 a 条件 或 b 条件都可以
- `in` `in(a, ... ,b)`: 表示在 a 及 b 这些值中都可以
- `like` 模糊查询, % 表示任意个字符 _ 表示一个字符
高级查询
1. distinct
在`select`语句中,可以使用`distinct`关键字对查询的结果集进行去重。
select distinct 列1, ... , 列n from table_name [其他子句];
去重必须结果集中每个列的值都相同
2. order by
order by用于对结果进行排序显示,可以使用ASC / DESC两种方式进行排序,可以有多个排序条件
ASC:表示升序排序,如果不写即为此排序方式
DESC:表示降序排序
select [distinct] 列1, ... , 列n from table_name [其他子句] order by 排序列1 [DESC], 排序列2 [DESC];
3.分页查询limit子句
select * from emp limit 0,2;
select * from table_name limit (页码 - 1) * 每页数量, 每页数量;
第一个参数0是表示从第几条开始查询 (这里的 0 是可以省略不写的);
第二个参数 表示查询出几条数据
后面不够的,有多少写多少
4.聚合函数:
5.group by:
`group by ` 是对数据进行分组,分组时,表中有相同值的分为一组。分组后可以进行聚合查询。
`group by`分组后的查询中,`select`的列不能出现除了`group by `分组条件以及聚合函数外的其他列。
select 列1, 列2, (聚合函数) from table_name group by 列1, 列2;
6.having:
having
是对group by
分组后的结果集进行筛选。
select 列1, 列2, (聚合函数) from table_name group by 列1, 列2 having 分组后条件;
- 综合查询
SELECT DISTINCT emp.deptno FROM emp JOIN dept ON emp.deptno = dept.deptno WHERE bridate >= '2000-01-01' GROUP BY emp.deptno HAVING count(*) >= 2 ORDER BY count(*) DESC LIMIT 0, 5;
书写顺序是以上。
SQL语句的执行顺序
from --> on --> join --> where --> group by --> having --> select --> distinct-- > order by--> limit
标红的为重点(而且没有搞懂 也没有进行练习)