## 四、权限
mysql 库里面进行操作
select host,user,password from user;
host:所在主机的操作权限
user:用户
password:通过mysql的password函数加工出来的结果
### 添加用户的方法
#### 第一种方法
+ 往user表插入拥有本地操作权限(host=localhost)的用户(dcs28)密码为(123456)的用户;
insert into user(host,user,password) values ('localhost','dcs28',password('123456'));
+ flush privileges 更新
+ 返回root 操作,进入dcs28的用户:mysql -udcs28 -p123456
+ 给dcs28操作权限,grant select,update,insert,delete,create on *.* to 'dcs28'@'localhost' identified by '123456';
+ flush privileges 更新
+ show grants for 'dcs28'@'localhost';--展示dcs28的权限情况
#### 第二种方法
1.进入数据库中的mysql库:use mysql
2.赋予权限:grant all privileges on *.* to 'root'@'%' identified by '123456';
3.查看用户生成情况:select host,user,password from user;
### 删除权限
+ 删除用户权限:revoke all on *.* from 'dcs28'@'localhost';
+ flush privileges 更新
### 修改mysql密码
1.进入mysql :use mysql
2.修改密码:update user set password =password('新密码') where user='被修改的用户';
3.flush privileges 更新
### 查看信息
1. select version(); 查看版本号
2. select now();查看当前信息
3. select database();查看当前在那个库里面
4. 使用绝对路径操作查询表格:select * from test2.grade;
5. select user();查询当前操作用户
## 五、Navicat Premium 12
### 安装步骤
前置条件,给用户添加百分号权限
添加用户的第二种方法:
1,进入数据库中的mysql库:use mysql;
2,创建用户并赋予权限:grant all privileges on *.* to 'root'@'%' identified by '123456';
3,刷新权限:flush privileges;
4,检查用户生成的情况:select host,user,password from user;
1.安装Navicat Premium 12 和汉化文件
2.点击汉化文件把这两个文件复制到文件根目录
4.连接之前把防火墙关掉:service iptables stop
5.把mysql服务重启:service mysqld restart
6.测试连接,点击连接
### 操作
ctrl+/或者#:注释语句
取消注释:再按ctrl+/
## 六、多表查询
1.内连接:inner join 对两张表里面的有字段的值是相同的,就可以通过内连接进行连接。
例如:select *from aa inner join cc on aa.id=cc.s_id;
select *from aa join cc on aa.id=cc.s_id;
2.左连接:left join 以左边的表为主,显示出完整的左边表,右边的表只出现满足的数据。左连接会比右连接的查询速度更快。
例如:select *from aa left join cc on aa.id=cc.s_id;
3.右连接:right join 以右边的表为主,显示出完整的右边表,左边的表只出现满足的数据
例如:select *from aa right join cc on aa.id=cc.s_id;
4.基本连接:对两张表当中有字段的值相同就可以通过基本连接的方法进行连接,结果和内连接没有区别,区别在语法上。
例如:select * from aa,cc where aa.id=cc.s_id;
5.机械拼接:union 硬拼接,两张表的字段数量必须一致,因为要做上下拼接。
例如:select *from aa union select *from cc;
select *from aa union select chinese,math from grade;
表头显示字段以aa为主
6.临时表:把表设置为临时表t,然后在进行连接
select score from (select *from aa left join cc on aa.id =cc.s_id) as t where t.name='zhangsan'
7.嵌套方法:
前置条件:select id from aa where name ='zhangsan'
select score from cc where s_id in (select id from aa where name ='zhangsan');
## 七、索引
索引:index
+ 作用:快速访问数据库中的特定信息。
+ 索引的类型:优先级:主键索引>唯一索引>普通索引
1.普通类型:index
+ create index aa on emp (name); 针对emp中的name字段增加aa索引
+ create index bb on emp (age,dept2);创建多个索引
+ alter table emp add index bb(age);通过改变表结构的格式增加索引
+ show index from emp ;查看索引
注意: 1.创建索引是在大量的数据前提下才会有明显的查询速度提升 2.不能对一张表的每个字段都添加索引,因为如果每个子弹都添加索引就已经失去添加索引的意义,而且添加了也会消耗大量的内存,通常添加索引是添加在经常要查询到字段上 八、视图
1.创建视图,可以理解为把表的内容复制到视图那 命名为dcs,根据查询emp表的name、incoming 字段 create view dcs as (select name,incoming from emp); show table status where comment ='view'; 查看当前库有什么视图 show tables; 查看当前有什么表,包括实体表和虚表 drop view dcs;删除视图
2.视图的优缺点: 优点:信息安全;只展示了先暴露出去的基本表的信息 缺点:使用视图的时候,其实都是由基本表进行查询出来的结果进行操作,性能差。
九、DDL、DML数据库中的DDL和DML DDL 数据库定义语言 (对表结构和表字段进行操作) : DML 数据库操作语言 (对表数据进行操作) INSERT INTO DELETE select UPDATE
十、约束表内约束主键约束:primary key 非空约束:nut null 默认约束:default 自增长约束:auto_increment
外键约束作用:保持数据的一致性,完整性 外键约束 也叫外码 外键约束,约束的是表跟表的关系 1.创建两张表dcs1,dcs2 2.在设计表的时候给dcs1表加一个外键,这个外键加在dcs2表中的sid字段上,那么dcs1表就是主表(父表),dcs2表就是从表(子表) 3.创建主表dcs1 create table dcs1(id int(4)PRIMARY key,name varchar(10)) ENGINE=INNODB ; 4.创建从表dcs2,加上外键 create table dcs2(sid int(4)primary key,sname varchar(10),CONSTRAINT fk_sid FOREIGN key(sid)REFERENCES dcs1(id))ENGINE=INNODB; //创建表dcs2,包含sid类型int(4)为主键,字段sname类型为varchar(20),创建约束命名为fk_sid 外键约束定义在sid字段,引用(来自于)dcs1表中id字段,数据引擎为innodb 对子表操作删除外键:alter table dcs2 drop foreign key fksid; 结论1.对子表进行insert into ,update操作,父表中没有的外键值,那么执行会报错秒如果附表中存在则可以进行新增和修改的操作 2.对父表进行delete,update 操作,如果操作的字段在子表中被引用,那么操作失败,没有被引用就可以直接删除和修改 十一、存储过程drop PROCEDURE if exists dcs28; #如果存在,删除存储过程dcs28create procedure dcs28() #创建存储过程,命名位dcs28 begin #写存储过程需要执行的语句
# 存储成功的函数体 ==》SQL语句的集合
drop table if exists mm;
create table mm(id int(4) primary key auto_increment,score int(10));
insert into mm values (1,99),(2,67);
insert into mm values (3,87),(4,98);
insert into mm values (5,84),(6,88);
insert into mm values (7,78),(8,95);
select *from mm;
end;call dcs28() #调用存储过程drop PROCEDURE if exists dcs28; #如果存在,删除存储过程dcs28
create procedure dcs28() #创建存储过程命名位dcs28
begin #写存储过程需要执行的语句
# 存储成功的函数体 ==》SQL语句的集合
drop table if exists mm;
create table mm(id int(4) primary key auto_increment,score int(10));
insert into mm values (1,99),(2,67);
insert into mm values (3,87),(4,98);
insert into mm values (5,84),(6,88);
insert into mm values (7,78),(8,95);
select *from mm;
end;
call dcs28() #调用存储过程
create procedure dcs28(n int) if n = 0 then # 条件1
select count(*) from mm; #结果1
else #条件2
select * from mm where id =n; #结果2
end if;if n = 0 then # 条件1
select count(*) from mm; #结果1
else if n>0 && n <=8 then #条件2
select * from mm where id =n;#结果2
else if n > 8 then #条件3
select max(id) from mm; #结果3
else #条件4
select * from mm ; #结果4
end if; #对应第一个if
end if; #对应第二个if
end if; #对应第二个if declare i int DEFAULT(select count(*) from mm); # 定义变量i 数据类型为int ,默认值为统计mm 表行数获取的结果if n = 0 then
select count(*) from mm;
else if n>0 && n <=i then
select * from mm where id =n; #i=行数,行数为8
else
while n >i do #例如n=10 第一次:10>8,满足,增加一条数据,i自加为9
#第二次:10>9,满足,增加一条数据,i自加为10
#第三次:10>10,不满足,跳出循环
insert into mm(score) values (40);
set i=i+1;
end while;
end if;
end if;
|