数据库和表的基本操作

数据库和表的基本操作

创建和查看数据库

1.操作数据库

create database [if not exists是否要提前检查是否存在这个数据库] db_name [create_specificatioon [, create_spcification] create_specification:
[DEFAULT] character set charset_name字符集类型名称 | [default]collate collation_name校对规则的名称

创建一个名为mydb1的数据库
create database mydb1;
创建一个使用gbk字符集的mydb2数据库
create database mydb2 character set gbk;
创建一个使用utf8字符集,并带校对规则的mydb3数据库
create database mydb3 character set utf8 collate utf8_bin;

2.查看数据库

显示数据库语句:
show databases;
查看当前数据库服务器中的所有数据库 :show databases;

显示数据库创建语句:
show create database db_name;
查看前面创建的mydb2数据库的定义信息 :show create database mydb2;

3.修改数据库(alter)

alter database [if not exists] db_name | [alter_specification[, alter_specification] alter_specification:
[default] character set charset_name | [default] collate collation_name

查看服务器中的数据库,并且把其中某一个库的字符集修改为utf8;
alter database mydb2 character set utf8;

alter才可以操作基本表的列

4.删除数据库

drop database [if exists] db_name

删除前面创建的mydb1数据库
drop database mydb1;

5.选择数据库

use da_name;
select database();查看当前所选的数据库

二、数据库中表的操作

0.MySQL数据库中的数据类型

整数类型

浮点数类型和定点数类型

日期和时间类型

字符串类型

1.增加表

CREATE TABLE table_name
(
field1 datatype,
field2 datatype,
field3 datatype,
)character set 字符集 collate 校对规则

field:指定列名 datatype:指定类型

创建一个员工表employee
create table employee(
id int ,
name varchar(20),
gender char(1),
birthday date,
entry_date date,
job varchar(50),
salary double
);

2.查看表(show)

查看表结构:desc tab_name;
查询当前数据库中的所有表:show tables;
查看表的建表语句:show create table tab_name;

3.修改表(alter)

alter table table add 增加列(column datatype[default expr][, column datatype]…);

alter table table modify 修改列(column datatype[default expr][, column datatype]…);

alter table table_name drop 删除列(column);
修改表的名称:rename table 表名 to 新表名;
修改表的字符集编码:alter table table_name character set utf8;
修改列的名称:alter table table_name change [column] old_col_name column_definition;

在上面员工表的基本上增加一个image列
alter table employee add image blob;
修改job列,使其长度为60
alter table employee modify job varchar(60);
删除gender行
alter table employee drop gender;
表名修改为user
rename table employee to user;
修改表的字符集为utf8
alter table user character set utf8;
列名name修改为username
alter table user change name username varchar(20);
0

4.删除表(drop)

drop table tab_name;

删除上边的user表
drop table user;

设置表的字段值的自动增长(auto_increment)

create table employee(
    id int primary key auto_increment,//自动增长
    name varchar(20)unique,
    gender char(1) not null,
    birthday date,
    entry_date date,
    job varchar(50) default 'sxs',
    salary double,
    resume text
);

约束

主键约束

实体完整性约束:就是primary key 定义

create table employee(
    id int primary key, 主键约束,foreign key外键约束
    name varchar(20) unique, 唯一约束
    gender char(1) not null,非空约束
    birthday date ,
    entry_date date,
    job varchar(50) *default 'sxs',默认约束*
    salary double,
    resume text
);

primary key, 主键约束,foreign key外键约束
unique, 唯一约束
not null,非空约束
default ‘sxs’,默认约束

id int primary key,列级定义

id int ,
primary key (id),表级定义

删除表的约束条件(alter …drop…)

alter table 表名 drop 约束名 ;
alter table employee drop primary key ;

添加外键约束

外键约束:参照完整性

外键:可以明确的声明表和表之间关系的字段的参照关系,使数据库帮我们维护这种关系,这种键就是叫做在表和表之间声明一个外键。
如果在后续的操作中由于新增修改删除造成了外键约束的状况发生时,数据库回检测到这种状况从而阻止这类操作的进行。、

1.在建立表的过程中增加外键
foreign key (oredersid) reference oreders(id)

create table dept(
id int primary key auto_increment,
name varchar(40)
);

insert into dept values(null,‘财务部’),(null,‘人事部’),(null,‘行政部’),(null,‘科技部’);

create table emp(
id int primary key auto_increment,
name varchar(40),
dept_id int,
foreign key (id) references dept(id)
);

insert into emp values(null,‘奥巴马’,1),(null,‘阿萨姆’,2),(null,‘哈利波特’,3),(null,‘火车王’,4);

2.表已经存在,通过修改表的语句增加外键

alter table 表名 add constraint fk_id foreign key(外键字段名) references外表表名(主键字段名);

create table dept (
id int primary key auto_increment,
name varchar(40)
);
create table emp(
id int primary key auto_increment,
name varchar(40),
dept_id int
);

alter table table_name add constraint foreign key (dept_id) references dept(id);
如果需要级联删除:在最后加上on delete cascade
级联更新:on update cascade

删除外键(alter …drop…)

alter table 表名 drop foreign key aaa_fk;

用户定义的完整性约束条件(check())

列值非空:not null
列值唯一:unique
检查列值是否满足一个条件表达式(check语句)
sex char(2) check(sex in(‘男’,‘女’)),
定义元组中sname和sex属性值之间的约束条件
check(sex='女’or sname not like ‘MS.%’)

完整性约束

课本P165

索引

数据库的索引好比新华字典的音序表,它是对数据库表中一列或多列的值进行排序后的一种结构,其作用就是提高表中数据的查询速度。

1.普通索引 :可以创建在任何数据类型中,其值是否唯一和非空没有固定要求

2.唯一索引:是由unique定义的索引,该索引所在的字段值必须是唯一的

3.全文索引:是由fulltext定义的索引,它只能创建在char、varchar、text类型的字段上,而且,现在只有myisam存储引擎支持全文索引

4.单列索引:在表的单个字段上创建的索引,他可以是以上三个任意索引,只要保证该索引只对应表中的一个字段即可。

5.多列索引:在表的多个字段上创建索引,只有在查询条件中使用了这些字段中的第一个字段时,该索引才会被使用。

6.空间索引:由spatial定义的索引,它只能创建在空间数据类型的字段上(GEOMETRY,POINT,LINESTRING,POLYGON)

索引会占用空间,并且创建和维护索引的时候,其消耗的时间随数据量的增加而增加,所以要综合考虑。

创建索引INDEX

一、创建表的时候创建索引

create table 表名(字段名 数据类型[完整性约束条件],字段名 数据类型[完整性约束条件],
.....
字段名  数据类型
[UNIQUE|FULLEXTE|SPATIAL] INDEX|KEY [别名] (字段名1 [(长度)] [ASC|DESC]));

1.创建普通索引

create table t1(
    id INT ,
    name varchar(20),
    score float,
    index(id)
);

explain select*from t1 where id = 1;

2.创建唯一索引

create table t2(
    id INT not null,
    name varchar(20) not null,
    score float,
    unique index unique_id (id *ASC升序*)
);

3.创建全文索引

create table t3(
    id INT not null,
    name varchar(20) not null,
    score float,
    fulltext index fulltext_name(name)
)*ENGINE=MyISAM*;

4.创建单列索引

create table t4(
    id INT not null,
    name varchar(20) not null,
    score float,
    index single_name(name(20))
);

5.创建多列索引

create table t5(
id INT not null,
name varchar(20) not null,
score float,
index multi(id,name(20))
);

创建空间索引

create table t6(
    id INT,
    space GEOMETRY NOT NULL,
    SPATIAL INDEX sp(space)
)ENGINE=MyISAM;

二、使用CREATE INDEX语句在已经存在的表上创建索引

create [unique|fulltext|spatial] index索引名 on 表名(字段名[(长度)] [ASC|DESC]);

create table book(
    bookid int not null,
    bookname varchar(255) not null,
    info varchar(255) null,
    comment varchar(255) null,
    publicyear year not null
);

1.创建普通索引在bookid这一列 上
create index index_name on book(bookid);

2.创建唯一索引在bookid这一列上
create unique index_name uniqidx on book(bookid);

3.创建单列索引

4.创建多列索引
create index mulitidx on book(info(20));

5.创建全文索引,注意全文索引只能加在引擎时myisam的表上
drop table book;

create table book(
    bookid int not null,
    bookname varchar(255) not null,
    info varchar(255) null,
    comment varchar(255) null,
    publicyear year not null
)ENGINE=MyISAM;
create *fulltext* index ftindex on book (bookname);

6.创建空间索引

create table t7(
    g GEOMETRY NOT NULL
)ENGINE=MyISAM;
CREATE *spatial* INDEX spatidex on t7(g);

三、使用(alter…add…)语句在已经存在表上创造索引

alter table 表名 add [unique|fulltext|spatial] index
索引名 (字段名[(长度)] [ASC|DESC]);
create table book(
bookid int not null,
bookname varchar(255) not null,
info varchar(255) null,
comment varchar(255) null,
publicyear year not null
);

alter table book add index indexone (bookid);

修改索引名

alter index 旧索引名 rename to 新索引名;

删除索引

方式一:
alter table 表名 drop index 索引名

alter table book drop index indexone;

方式二:
drop index 索引名 on 表名;

drop index indexone on book;

第三章操作表记录

insert增
update改
delete删
select查
CRUD:create,read,update,delete

添加数据

insert:

INSERT INTO table [(columnp [,column…])] VALUES(value[,value…]);

方式一:insert into employee(id,name,gender,birthday,entry_date,job,salary,resume)values(null,‘张飞’,‘m’,‘1999-09-09’,‘2000-01-02’,‘打手’,‘998.0’,‘真的很能打…’);

方式二:insert into employee values(null,‘关羽’,‘m’,‘1998-09-09’,‘2000-02-02’,‘财神爷’,‘999999.0’,‘公司挣钱全靠他’);

方式三:insert into employee values(null,‘刘备’,‘m’,‘1997-09-09’,‘1999-09-09’,‘ceo’,‘10000.0’,‘公司的老大…’),(null,‘赵云’,‘m’,‘1999-09-09’,‘1999-09-09’,‘保安’,‘100.0’,‘老大身边的人…’);

在values中列出的数据位置必须与被加入列的排列位置相对应
字符和日期型数据需要包含在单引号中

更新数据(alter …set…)

update

update tab_name set col_name1=exprl [,col_name2=expr2…][where where_definition]

将所有员工的薪水修改为5000元。
update employee set salary = 5000;
将姓名‘张飞’的员工薪水修为3000元。
update employee set salary = 3000 where name=‘张飞’;
将姓名为的员工薪水修改为,job修改为ccc.
update employee set salary = 4000,job = ‘ccc’ where name= ‘关羽’;
将的薪水在原有的基础上增加1000元。
update employee set salary = salary +1000 where name = ‘刘备’;

删除数据

delete(truncate)
delete:一个一个删

truncate:先全部摧毁,后删除(只能全部删除,不能用于只删除一列)

delete from tbl_name [where where_definition]

删除表中名称为张飞的记录。
delete from employee where name = ‘张飞’;
删除表中的所有记录。
delete from employee;
使用truncate删除表中的记录。
truncate employee;

第四章 单表查询

查询

distinct:筛选掉重复的数据

空值:不知道、不存在null
涉及空值的查询,谓词:IS NULL\IS NOT NULL

AND 的优先级高于 OR,

[not] IN
[not]BETWEEN … AND…

create table exam(
id int primary key auto_increment,
name varchar(20) not null,
chinese double,
math double,
english double
);
insert into exam values(null,‘关羽’,86,76,70);
insert into exam values(null,‘张飞’,86,76,70);
insert into exam values(null,‘赵云’,86,76,70);

insert into exam values(null,‘关羽’,86,76,70),(null,‘张飞’,86,76,70),(null,‘赵云’,86,76,70);

1.select

select [distinct] */ {column1,column2.column3…} from table;

查询表中所有学生的信息。
select *
from exam;
查询表中所有学生的姓名和对应的英语成绩。
select name,english
from exam;

*distinct:过滤表中重复的数据*

select distinct english 
from exam;

在所有学生的分数上加10分特长分显示。(只是显示为加10分,实际并没有加)
select name,math + 10,english + 10,chinese + 10
from exam;
统计每个学生的总分。
select name,math + english+ chinese
from exam;
使用别名表示学生的总分。
select name as 姓名, math + english +chinese as 总成绩
from exam;
省略as
select name 姓名, math + english +chinese 总成绩
from exam;

查询全体学生的姓名 、出生日期和所在的院系要求用小写的字母表示系名
select sname,‘year of birth:’,2014-sage,lower(sdept)
from student;

*lower()-->变小写函数*

2.带有where字句的过滤查询

查询姓名为XXX的学生成绩。

select * 
from exam 
where name ='张飞';

查询英语成绩大于90分的同学。

select * 
from exam 
where english >90;

查询总分大于200分的同学。

select * 
from exam 
where math + chinese + english >200;

查询英语成绩在80-100之间的学生。

select * 
from exam 
where english between 80 and 100;

查询数学分数在75,76,77的同学。

select *
from exam 
where math in <75,76,77>;

查询所有姓张的学生的成绩。
%:代表任意长度的字符串
_:代表任意单个字符串

select * 
from exam 
where name like '张%';

select * 
from exam 
where name like '张_';

select * 
from exam 
where name like '张__';

查询属性分>70,语文分>80的同学。

select * 
from exam 
where math >70 and chinese>80;

名字带有符号的查询

查询DB_Design课程的课程号

select sno
from course
where cname like ‘DB_Design escape’’;

escape: ''表示" \ "为换行字符,使得跟在DB后面的‘_’字符不再具有通配符的含义

查询’DB_‘开头,且倒数第三个字符为i的课程的详细情况
select *
from course
where cname like ‘DB_%i__’ escape’’;

如果需要查询的属性值为NULL,则使用IS NULL;不能使用 ‘=’

3.排序查询

column:列
默认排序方式为升序
asc:升序;
desc:降序;

select column1,cloumn2,column3… from table order by column asc|desc

对英语成绩排序后输出。
select name,english from exam order by english desc;
对总分排序按从高到低的顺序输出。
select name 姓名,math+english+chinese 总分 from exam order by 总分 desc;
对姓张的学生成绩排序输出。
select name 姓名,math+english+chinese 总分 from where name like ‘张%’ order by 总分 desc;

如果排列存在空值,升序最后显示,降序开始显示,可以将空值想象成最大值

4.聚合函数

distinct:明确的,可以用来消除重复的数据,使显示出来的内容无重复值

<1> count聚合函数,用来统计行数

统计一个班共有多少学生?
select * from exam;
select count() from exam;
统计数学成绩大于90分的学生有多少个?
select * from exam where math >90;
select count(
) from exam where math >90;
统计总分大于250分的人数有多少?
select * from exam where math+english+chinese>250;
select count(*) from exam where math+english+chinese>250;

<2> sum聚合函数,求符合条件的某列的和值

统计一个班级的数学总成绩。
select sum(math) from exam ;
统计一个班的语文、英语、数学各科的总成绩。
select sum(math),sum(chinese),sum(english) from exam;
统计一个班的语文、英语、数学的成绩总和。
select sum (math+english+chinese) from exam;
统计一个班级语文成绩平均分。
select sum(chinese)/count(*) from exam;

<3> avg聚合函数,求符合条件的列的平均值

求一个班的数学平均分。
select avg(math) from exam;
求一个班的总分平均分。
select avg(math+english+chinese) from exam;

<4>MAX/MIN聚合函数,求符合条件的列的最大值和最小值

求班级的最高分和最低分。
select min(math+english+chinese) from exam;
select max(math+english+chinese) from exam;

分组查询

分类汇总Group by,不使用where语句,使用having条件语句

having:针对分组后的每组表,限定查询,不能单独使用,需要跟在group by后面
where:针对所有表或视图

select column1,column2…
from table
group by column
having…;

对订单中的商品归类后,显示每一类商品的总价

select * 
from orders 
group by product;

select product,sum(price) 
from orders 
group by product;

查询总价大于100元的商品名称

select product,sum(price) 
from orders 
group by product 
having sum(price)>100;

where语句可以进行过滤,他是*分组之前进行过滤*,where语句中是*不允许使用聚合函数*的
如果想在*分组之后进行过滤*,必须使用*having语句*来进行,having语句中是*可以使用聚合函数的*

1.select * from orders where price<100 group by product;
2.select product,sum(price) from orders where price <100 group by product;
3.select product,sum(price) from orders where price <100 group by product having sum(price)>100;

使用LIMIT限制查询结果的数量

select 字段1,字段2,…from 表名 limit [offset,] 记录数
offset:起始查询的位置,第几条数据

从第五条往后查询五条。
select * from talbe limit 5,5;

Subquery returns more than 1 row:子查询返回超过一行

在where查询语句的最后加上limit 1

函数

为表取别名

select * from 表名 as 别名;

第五章 多表操作

操作关联表

多表设计

1.对于一对多:我们可以在多的一方设计外键保存一的一方的主键。

2.对于一对一的关系:我们可以在任意保存另一方的主键作为外键。

3.对于多对多的关系:新建一张第三方关系表,保存两张表的主键作为外键,存储两张表主键和主键之间的对应关系,来保存两张表之间的关系。

添加数据,自己回来总结…

连接查询

多表设计多表查询

create table dept (
id int primary key auto_increment,
name varchar(40)
);
insert into dept values(null,‘财务部’),(null,‘人事部’),(null,‘行政部’),(null,‘科技部’),(null,‘销售部’);
create table emp(
id int primary key auto_increment,
name varchar(40),
dept_id int
);
insert into emp values(null,‘奥巴马’,1),(null,‘阿萨姆’,2),(null,‘哈利波特’,3),(null,‘火车王’,4),(null,‘张三丰’,5);

笛卡尔积查询
select * from dept,emp;—是两张表相乘的结果,
如果左边表有M条记录,
右边表有N条记录,
则查出来M*N条记录,
这样的结果中往往包含大量错误的数据,
所以这种查询方式我们通常不使用.

内连接查询:查询出左边表存在且右边表同样存在的记录
select * from dept,emp where dept.id
=emp.dept_id;

select * from dept inner join emp on

dept.id = emp.dept_id;

左外连接查询:在内连接的基础上左边表有而右边表没有的记录
select * from dept left join emp on dept
id=emp.dept_id;

右外链接查询:在内连接的基础上右边表有而左边表没有的记录
select * from dept right join emp on dept
id=emp.dept_id;

全外连接查询:在内链接的基础上增加左边表有而右边表没有的记录和右边表有而左边表没有的记录
select * from dept full join emp on dept
id=emp.dept_id;
MySQL不支持全外连接!

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;

MySQL中可以使用union操作左外+右外

查询4号部门的名称和员工的姓名:
select * from dept.name 部门名称,emp.name 员工名称 inner join emp on dept.id = emp.dept_id where dept.id = 4;

用自然连接完成

如果查询属性单个表有则引用时不需要加上表名前缀,如果两表均有加上表名前缀,以方便辨认

自身连接 P101页

带IN关键字的子查询

外层查询或者父查询
内层查询或者子查询

使用IN关键字进行子查询时,内层查询语句仅仅返回一个数据列,这个数据列的值将供外层查询语句进行比较操作。

查询存在年龄为20岁的员工的部门
select dname
from department
where did in(
select did
from employee
where age = 20);

select语句中还可以使用not in关键字,其作用正好与in相反.

查询不存在年龄为20岁的员工的部门
select dname from department where did not in
(select did from employee where age = 20);

带exists关键字的子查询

exists关键字后面的参数可以是任意一个子查询,这个子查询的作用相当于测试,他不产生任何数据,只因为ture或false,当返回值为ture时,从外查询才会执行.

查询employee表中是否存在年龄大于21岁的员工,如果存在,则查询department表中的所有记录.
select *
from department
where exists (
select *
from employee
where age>21);

带any关键字的子查询

any关键字表示满足其中任意一个条件,它允许创建一个表达式对子查询的返回值列表进行比较,只要满足内层子查询中的任意一个比较条件,就返回一个结果作为外层查询条件.

使用带any关键字的子查询,查询满足条件的部门
select * from department where did>any(select did from employee);

带all关键字的子查询

all关键字与any有点类似,只不过带all关键字的子查询返回的结果须同时满足所有内存查询条件.

使用带all关键字的子查询,查询满足条件的部门
select * form department where did>all(select did from employee);

带比较运算符的子查询

,< ,>= ,= ,!=…

使用带比较运算符的子查询,查询赵四是哪个部门的员工.
select dname from department where did = (select did from employee where name =‘赵四’);

视图

创建视图

create view <视图名> [(列名),(列名)…]
as [子查询]

[with check option]
在执行增删改查操作时,数据库管理系统会自动加上此次创建所使用的where条件语句

create database chapter07;
use chapter07;
create table student(
s_id int(3),
name varchar(20),
math float,
chinese float
);
insert into student(s_id,name,math,chinese) values (1,‘Tom’,80,78);
insert into student(s_id,name,math,chinese) values (2,‘Jack’,70,80);
insert into student(s_id,name,math,chinese) values (3,‘Lucy’,97,95);

单表创建视图

创建视图包含 数学 语文 数学+语文
create (or replace,替换已经创建的同名视图) view_stu
as select math,chinese,math+chinese
from student;

select * from view_stu;

create  view_stu2 (数学,语文,总分)
as select math,chinese,math+chinese 
from student;

select *from view_stu2;

多表创建视图

将表通过相同的属性列连接起来

create table stu_info(
s_id int(3),
class varchar(50),
addr varchar(100)
);
insert into stu_info(s_id,class,addr) values (1,‘erban’,‘anhui’);
insert into stu_info(s_id,class,addr) values (2,‘sanban’,‘chongqing’);
insert into stu_info(s_id,class,addr) values (3,‘yiban’,‘shandong’);

创建视图包含 编号 学生的姓名 和班级姓名
create view stu_class (编号,姓名,班级)
as select student.id,student.name,stu_info.class
from student,stu_info
where student.s_id =stu_info.s_id;

查看视图

1.desc 视图名; --查看视图结构
2.show table status like ‘视图名’; --查看视图信息
3.show create view 视图名; --查看视图的创建语句

修改视图(create/replace/alter)

1.create or replace view语句修改视图;

2.alter [algorithm = {undefined | merge |temptable}]
view view_name [(column_list)]
as select_statement
[with[cascaded | local]check option]

更新视图

1.update语句来更新视图
update view_stu set chinese =100;
2.insert
insert into student values(4,‘lili’,20,30);
3.delete
delete from view_stu where chinese = 30;

删除视图(drop)

drop view [if exists]view_name [,view_name1]…
[restrict | cascade];
删除view_stu2
drop view if exists view_stu2;

数据库的高级操作

数据的备份

mysqldump:
mysqldump -u username -p password dbname [tbname1 [tbname2…]]
> filename.sql;

数据的还原

恢复数据只能恢复数据库中的表和表记录,不能恢复数据库本身

  1. mysql:
    mysql -u usename -p password [dname] < filename.sql;

  2. sourse命令
    在MySQL命令提示符下:创建数据库,进入数据库 course xxx.sql文件 将备份的SQL文件在当前位置执行,恢复出其中的内容

用户管理

创建普通用户

1.grant privileges on database table
to ‘username’@‘hostname’ [identified by [password]‘password’]

grant select on mydb3.* to ‘huochewang’@‘localhost’ identified by ‘abc123’;

2.create user ‘username’@‘hostname’ [identified by [password] ‘password’]

create user ‘huochewang2’@‘localhost’ identified by ‘abc123’;

3.insert into mysql.user(host,user,password,ssl_cipher,x509_issuer,x509_subject)values(‘hostname’,‘username’,password(‘password’),’’,’’,’’);
flush privileges;

insert into mysql user(host,user,password,ssl_cipher,x509_issuer,x509_subject)
values(‘localhost’,‘huochewang3’,password(‘abc123’),’’,’’,’’);
flush privileges;

删除用户

1.drop user ‘username’@‘hostname’;

drop user ‘huochewang’@‘localhost’;

2.delete from mysql.user where host =‘hostname’ and user =‘username’;

delete from mysql.user where host =‘localhost’ and user =‘huochewang2’;
flush privileges;

修改用户密码

1.修改root用户密码

方式一:
mysqladmin -u username [-h hostname] -p password new_password
C:\documents and settings[当前windows用户的目录]

方式二:
update mysql.user set password = password(‘new_password’)
where user=‘username’ and host=‘hostname’;
flush privileges;

方式三:
必须用root用户登录,执行
set password = password(‘new_password’);

2.利用root用户修改普通用户的密码

方式一:
grant usafe on . to ‘username’@‘localhost’ identified by [password] ‘new_password’;

方式二:
update mysql.user set password =password(‘new_password’)
where user= ‘username’ and host = ‘hostname’;
flush privileges;

方式三:
set password for ‘username’@‘hostname’=password(‘new_password’);

3.普通用户修改密码

set password =password(‘new_password’);

授权

grant [<权限>,<权限>…]
on [<对象类型><对象名>,<对象类型><对象名>…]
to [<用户>,<用户>…]
[with grant option];

grant option:将自己的权限授予其他用户
max_queries_per_hour count:设置每小时最多可以执行多少次(count)查询
max_updates_per_hour count:设置每小时最多可以执行多少次更新
max_connections_per_hour count:设置每小时最大的连接数量
max_user_connections:设置每个用户最多可以同时建立连接的数量

使用grant语句创建一个新的用户,用户名为user4,密码为123,user4用户对所有数据库有insert、select权限并使用with grant option;

grant insert,select 
on *.* 
to *'user4'@'localhost' identified by '123' *
with grant option;

授予u5修改student学号的权限
grant update(sno)
on table student
to u5;

将一个角色授予其他用户或者角色,同时也可以使用revoke收回权限
grant 角色
to 其他用户或角色
[with admin option]–>可以将获得的权限授予其他的角色

查看权限

show grants for ‘username’@‘hostname’;

收回权限

revoke[<权限>,<权限>…]
on [<对象类型><对象>,<对象类型><对象>…]
from[<用户>,<用户>…]
[cascade|restrict]

收回user4的insert权限:
revoke insert on . from ‘user4’@‘localhost’;

收回某个用户的所有权限
revoke all privileges,grant option
from ‘username’@‘hostname’;

收回所有用户的所有权限
revoke all privileges
from table student
from public;

级联收回权限

例如,用户将u5将权限授予u6、u7,需要将其权限收回
revoke insert
on table sc
from u5 cascade;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值