找回密码
 立即注册

推荐阅读

  • 便民服务
  • 关注我们
  • 社区新手
## 四、权限

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 ;查看索引
    • alter table emp drop index aa;  删除索引


    2.唯一索引:unique index ,前提条件是字段里的数据都是唯一的才能增加唯一索引
    • cteate unique index cc on emp (name) 给emp 中的name 字段增加唯一索引,命名为cc
    • alter table emp add unique index cc(name); 用alter 增加唯一索引
    • alter table emp drop index cc;删除索引
    • alter table emp drop index cc,drop index bb;同时删除多个索引


    3.主键索引:primary ,在创建主键约束的时候,主键索引同时会被创建成功
    • alter table emp drop primary key; 删除主键
    • show index from emp;显示索引
    • alter table emp add primary key;增加主键同时也增加索引



注意:
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
数据库定义语言 (对表结构和表字段进行操作) :
  • create
  • alter table
  • DROP

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; #如果存在,删除存储过程dcs28
  • 创建存储过程

create procedure dcs28()  #创建存储过程,命名位dcs28
  • begin        end;

  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)创建一个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判断语句的多分支判断

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 表行数获取的结果
  • while 循环    end while;

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;



分享至 : QQ空间
收藏

3 个回复

倒序浏览
请问楼主,什么是视图?
回复 使用道具 举报
视图就是把表需要查看的字段及其数据复制到表上,便于查看。这样可以保证信息的安全性,但视图只是针对查询的数据进行操作,没有灵活性。
回复 使用道具 举报
请问楼主DDL和DML语言有什么区别
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册