标签:option fun sign show 报错 作用 所有权 read 登录
用户管理
1.以某用户登入某个资料库:
mysql -u username -ppassword db_name
-p与密码之间没有空格
如果没有密码,-p可省略
db_name为可选项
2.创建用户:
mysql -u root -ppassword mysql
create user ‘username‘@‘hostname‘ identified by ‘password‘;
3.删除用户
mysql -u root -ppassword mysql
drop user ‘username‘@‘hostname‘;
如果从mysql.user表中直接删除用户,会导致重新创建同一用户时报错。
4.授权
grant privilegesCode on dbName.tableName to ‘username‘@‘host‘ identified by‘password‘ with grant option;
flush privileges;
privilegesCode表示授予的权限类型,常用的有以下几种类型:
dbName.tableName表示授予权限的具体库或表,常用的有以下几种选项:
username@host
表示授予的用户以及允许该用户登录的IP地址。其中Host有以下几种类型:
with grant option表示用户可以将自己拥有的权限授权给别人。
flush privileges表示刷新权限变更。
5.撤销授权
revoke privilegesCode on dbName.tableName from ‘username‘@‘hostname‘ identified by ‘password‘;
flush privileges;
6.查看权限
show grants for ‘username‘@‘hostname‘;
7.授权系统
MySQL的授权系统通常是通过MySQL数据库中的四个表来实现的,这些表有user、db、tables_priv和columns_priv。
碰到的问题:
问题描述:新建用户,查看只有grant usage权限,但可以增删改查。
问题原因:以前没有彻底删除用户,user和db两个表中数据的不一致,用户在db中还能map到权限。
解决办法:清除db表中相关行的数据。
命令管理
1.执行文件中的mysql语句
方法1:命令行里执行
mysql [db_name] < /文件路径/文件名
如果文件路径中有空格,记得加上\,譬如/google\ driver/
方法2:已经进入mysql,执行
source /文件路径/文件名
或者
\. /文件路径/文件名
注意:文件路径无引号
2.
数据管理
1.数据库操作
create database db_name;
drop database db_name;
show databases;
use db_name;
2.表格操作
create table tb_name (column_name column_type, column_name column_type,);
例子:create table Took (sID integer, oID integer, grade smallint, primary key (sID, oID), foreign key (sID) references Student(sID), foreign key (oID) references Offering(oID)); 创建表格,声明key和外部key。
drop table tb_name;
insert into tb_name (field1, field2, ...) values (value1, value2, ..);
insert into tb_name (subquery);
例子:create table invite (name char, campus varchar(25) default ‘StG‘, email text, age int);
insert into invite(name, email) (select firstname, email from student where cgpa >3.4);
delete from tb_name where clause;
delete from tb_name;全部删除
例子:delete from invite where name=‘shen‘;
update tb_name set attributes_assignments where clause;
update tb_name set attributes_assignments;更新所有行
例子:updata invite set campus=‘ut‘;
select column_name,column_name from tb_name where clause [limit n] [offset m]
例子:select * from student;选择student里面的全部数据
例子:select * from student s1, student s2;重命名student,并取self-joins。
例子:select name as title from course where clause; 重命名name为title。
例子:select * from offering where dept=‘csc‘ and cnum>=300;选取3rd和4th-year的课程
例子:select * from student order by sID [asc | desc];默认以学号升序排列
例子:select grade-10 from took; 数学操作符
例子:select concat(dept, cnum) as course from course; 合并两列并重命名
例子:select dept,cnum,‘satisfied‘ as breadthrequirement from course where breadth;新增breadthrequirement,赋值satisfied
例子:select * from course where name like ‘%comp%‘; pattern匹配,%任意字符,_任意单个字符;
3.聚合函数(aggregation function)和分组(group by)
聚合函数:sum, avg, count, max, min
count(*): 所有行数
count(属性):某列非空行数
count(distinct 属性):某列非空不重复行数
分组:group by 属性 having 需要满足的条件
如果使用分组group by,select、having后的属性要么是聚合函数,要么是group by后的属性,包含其他属性没有意义。
换句话说:分组后,select、having的属性要么是分组依据的属性(列名),要么就是其他某一列通过聚合函数聚合后得到的属性
例子:select count(*) from student where campus=‘stg‘; 返回campus=‘stg‘的所有行数,select属性为聚合函数
例子:select count(sid) from student where campus=‘stg‘; 返回campus=‘stg‘的所有sid非空行数,select属性为聚合函数
例子:select campus, count(*) from student group by campus; 按campus分组,并返回campus和每组campus对应的行数
例子:select sID, count(*) from student group by campus; 没有意义。
例子:select campus, count(*) from student group by campus having count(*)>1; 按campus分组,并返回满足count(*)>1条件的campus和每组campus对应的行数
例子:
4. SQL查询顺序
语言请求顺序:select, from, where, group by, having, order by
实际执行顺序:from, where, group by, having, select, order by
选择表格,筛选行,分组,分组后筛选,选取列,排序
5. set还是bag操作
select from where:默认结果为bag,不删除重复项;
select distinct from where:结果为set,删除重复项;
union:删除重复项;
union all:保留重复项;
6. 视图view
视图简单、安全、数据独立
创建视图:
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select from where
[WITH [CASCADED | LOCAL] CHECK OPTION]
1)OR REPLACE:表示替换已有视图
2)ALGORITHM:表示视图选择算法,默认算法是UNDEFINED(未定义的):MySQL自动选择要使用的算法 ;merge合并;temptable临时表
3)select_statement:表示select语句
4)[WITH [CASCADED | LOCAL] CHECK OPTION]:表示视图在更新时保证在视图的权限范围之内
cascade是默认值,表示更新视图的时候,要满足视图和表的相关条件
local表示更新视图的时候,要满足该视图定义的一个条件即可
TIPS:推荐使用WHIT [CASCADED | LOCAL] CHECK OPTION选项,可以保证数据的安全性
例子:CREATE OR REPLACE VIEW topresults (名字,姓氏,课程代码) AS SELECT firstname, surname, cnum FROM Student, Took, Offering WHERE Student.sid = Took.sid AND Took.oid = Offering.oid AND grade >= 80 AND dept = ‘CSC‘; 创建或更新视图
查看视图
DESC view_name:查看view列属性
SHOW CREATE VIEW view_name:查看create view指令
SELECT * FROM view_name:查看view中内容
修改视图
CREATE OR REPLACE:更新视图
ALTER:修改视图,保持视图与基表的一致性
DML操作:UPDATE view_name set name=‘王五‘ where 学号=‘1‘;
删除视图:
DROP VIEW [IF EXISTS] view_name;
7. NULL
A [LEFT | RIGHT | RIGHT] JOIN B 引入NULL值
如果聚合列A每一项的值均为NULL,那么该列聚合函数的结果为NULL,但是count(A)为0
否则,NULL值对聚合函数sum, avg 和 count 无影响,也不会成为max和min中的结果
8.子查询(Subquery)
在FROM中的子查询:必须用()和重命名
SELECT sid, concat(dept,cnum) as course, grade FROM Took, (SELECT *FROM Offering WHERE instructor=‘Horton’) Hoffering WHERE Took.oid = Hoffering.oid;
在WHERE中的子查询:必须用(),并用any,all,in,exists解决查询结果为多项的问题:
SELECT sid, surname FROM Student WHERE cgpa > ALL (SELECT cgpa FROM Student WHERE campus = ‘StG’);
SELECT surname, cgpa FROM Student WHERE EXISTS ( SELECT * FROM Took WHERE Student.sid = Took.sid and grade > 85);结果同下例
SELECT surname, cgpa FROM Student WHERE (sid, cgpa) IN ( SELECT sid, cgpa FROM Took WHERE Student.sid = Took.sid and grade > 85);结果同上例
[]:括弧里为可选项
参考mysql说明文档:
https://dev.mysql.com/doc/refman/8.0/en/adding-users.html
用户权限说明:
https://www.cnblogs.com/caibird2005/p/4512905.html
深入解析MySQL视图VIEW
https://www.cnblogs.com/geaozhang/p/6792369.html#chuangjianshitu
标签:option fun sign show 报错 作用 所有权 read 登录
原文地址:https://www.cnblogs.com/shendehong/p/10556222.html