Mysql数据库知识点合集

1、Mysql数据库的操做命令mysql

一、登陆:mysql -h 服务器地址 -u 登陆名 -p 密码sql

mysql -h 127.0.0.1 -u root -p root

二、数据库备份:mysqldump -h 服务器地址 -p  数据库名 > 文件名数据库

三、数据恢复:mysql  -h服务器地址  -u登陆名   -p   数据库名 < 文件名编程

四、建立数据库:create  database  数据库名称  【charset  数据库编码】 【collate  排序规则】服务器

五、删除数据库:drop  database  【 if  exists 】 数据库名称   ide

六、修改数据库:alter  database   数据库名称    charset  新的编码名   collate  新的排序规则名函数

七、显示全部数据库:show  databases编码

八、显示数据库建立语句:show  create  database  数据库名称spa

九、进入数据库:use  数据库名称code

2、字段类型

3、表操做命令

auto_increment:自动增加

primary  key:设置为主键

unique  key:设置惟一索引

not  null:设置不为空

default  某值:设置默认值

comment:设置字段说明

一、建立表:creat  table  表名称(字段名称  类型  字段属性) 【表选项】

create table a (
    id int auto_increment primary key,
    username varchar(32) not null unique key,
    password varchar(32) not null comment '密码',
    age tinyint default 18
)charset=utf8,engine=myisam;

二、索引

  • 普通索引

    key(字段名)

    就是一个索引而已,没有其余做用,只能加快查找速度

  • 惟一索引

    unique key(字段名)

    是一个索引,并且还能够设定其字段的值不能重复(惟一性)

  • 主键索引

    primary  key(字段名称)

    是一个索引,并且,还具备区分该表中的任何一行数据的做用(其实也是惟一性)它其实比惟一性索引多一点功能:惟一性能够为空null,而主键不能为空;

  • 全文索引

    fulltext(字段名)

  • 外键索引

    foreign  key (字段名) references  其余表  (对应其余表中的字段名)

create table a (
    id int auto_increment,
    username varchar(32) not null,
    password varchar(32) not null comment '密码',
    age tinyint default 18,
    primary key(id), --建立索引
    unique key(username)
)charset=utf8,engine=myisam;

三、修改表

添加字段:alter  table 表名 add  [column] 新字段名 字段类型  [字段属性列表]

alter table a add date_entered datetime;

修改字段(并可更名):alter  table 表名 change [column] 旧字段名 新字段名 新字段类型 [新字段属性列表];

alter table a change date_entered addtime int;

删除字段:alter  table  表名 drop  [column] 字段名;

alter table a drop addtime;

添加普通索引:alter  table 表名 add  key  [索引名]  (字段名1[,字段名2,...]);

alter table a add key date_entered (date_entered);

添加惟一索引(约束):alter table 表名 add unique key (字段名1[,字段名2,...]);

alter table a add unique key (username);

添加主键索引(约束):alter table 表名 add primary key (字段名1[,字段名2,...]);

alter table a add primary key (id);

修改表名:alter  table  旧表名   rename  [to] 新表名;

alter table a rename b;

 四、删除表

drop  table  【if  exists】 表名;

其余表的相关语句:

显示当前数据库中的全部表: show tables;

显示某表的结构: desc 表名; 或:describe 表名;

显示某表的建立语句:show create table 表名;

重命名表:rename table 旧表名 to 新表名;

从已有表复制表结构:create table [if not exists] 新表名 like 原表名;

4、定义视图

一、语法:create  view  视图名 【(字段名1,字段名2,字段名3,....)】   as   select语句;

create view view_b as select * from b where id > 10;

二、删除视图:drop  view  【if  exists】 视图名;

drop view if exists view_b;

5、操做数据语句

一、插入数据:

  insert [into]  表名 [(字段名1,字段名2,....)] values (值表达式1,值表达式2,....)

  replace [into] 表名 [(字段名1,字段名2,....)] values (值表达式1,值表达式2,....)

  其跟insert into几乎同样:惟一区别是,若是插入的数据的主键或惟一键“有重复”,则此时就会变成“修改该行数据”

insert into b (username, password, age) values ('yy', '123', 18);

二、修改数据:update  表名  set  字段1=值1,字段2=值2,......  【where 条件】 【order by排序字段】 【limit 限定行数】;

update b set username = 'yang' where id = 1;

三、删除数据:delete  from  表名  【where 条件】 【order by排序字段】 【limit 限定行数】;

delete from b where id = 1;

四、查询数据:select  [all | distinct]  字段或表达式列表  [from子句]  [where子句]  [group by子句]   [having子句]   [order by子句]   [limit子句];

all 和 distinct用于设定select出来的数据,是否消除“重复行”,能够不写,那就是默认值all:

all:表示不消除,即全部都出来,默认值;

distinct:表示会消除;使用all(跟不使用结果是同样的)

6、高级查询

一、链接查询

链接查询分类:

    • 交叉链接(cross  join)
    • 左链接(left  join)
    • 右链接(right  join)
    • 内链接 (inner  join)

一、内链接:select  *  from  表1  【inner】  join  表2  on  链接条件;

二、左链接:select  *  from  表1  left  join  表2  on  链接条件;

三、右链接:select  *  from  表1  right  join  表2  on  链接条件;

二、子查询

select * from product  where  price = (select  max(price)  from product );

使用in的子查询

select  *  from  product  where  protype_id  in( select  protype_id  from  product_type  where  protype_name  like%%’);

使用any的子查询

select  *  from  tab1  where  id >  any  (select  f1  from  tab2);

使用all的子查询

select  *  from  tab2  where  f1  >  all  ( select  id  from   tab1 );

使用exists的查询

select * from product where exists (select * from product_type where like '%电%' and protype_id = product.protype_id);

三、联合查询union

语法:

select 语句1

union 【all | distinct】

select 语句2

一、要求多条查询语句的查询列数是一致的!

二、要求多条查询语句的查询的每一列的类型和顺序最好一致

三、union关键字默认去重,若是使用union all 能够包含重复项 

7、用户管理

一、删除用户:drop  user  ‘用户名’@’容许登陆的地址或服务器名’;

二、修改本身的密码:set password = password('密码');

三、修改他人密码:set password  for  '用户名'@'容许登陆的地址' = password('密码');

四、受权:grant  权限列表  on  某库.某个对象  to  ‘用户名’@’容许登陆的位置’  【identified  by  ‘密码’】;

五、取消权限:revoke  权限列表  on  某库.某个对象  from  ‘用户名’@’容许登陆的位置’

 8、事务

事务执行的基本流程

1,开启一个事务:start  transaction; //也能够写成:begin;

2,执行多条增删改语句; //也就是至关于但愿这多条语句要做为一个“不可分割”的总体去执行的任务

3,判断这些语句执行的结果状况,并进行提交或回滚:

if(  没有出错 ){

commit; //提交事务;此时就是一次性完成;

}else{

rollback; //回滚事务;此时就是所有撤销;

}

数据库引擎Innodb有效

start transaction;
insert into test(name, age) values ('yang', 18);
commit;

9、存储过程、触发器

一、定义变量:

  • declare  变量名  类型名   【default  默认值】; //普通变量必须先这样定义

  赋值形式:set  变量名  =  值;

  取值:就直接使用变量名;

  注:只能在存储过程或者函数内申明变量

  • set  @变量名  =  值;

  注:基本上哪里均可以用

二、函数:

  create  function  函数名 (参数1  类型1,参数2  类型2,。。。)  returns  返回类型

  begin

    #这里写函数内容

    return  返回值

  end

注意事项:

1, 在函数内容,能够有各类变量和流程控制的使用;

2, 在函数内部,也能够有各类增删改语句;

3, 在函数内部,不能够有select或其余“返回结果集”的查询类语句;

 

create  function  test() returns int
begin
    return 1;
end;

  调用:select  函数  as 别名

  删除函数:drop function 函数名

三、存储过程:

create procedure test(【in | out | inout】 a int)
begin
  --这里写完整的过程当中语句
  --其中能够有各类流程控制
  --还能够是增删改查等
  --其中查询语句会做为存储过程调用的结果
end;

说明:

1,in:用于设定该变量是用来“接收实参数据”的,即“传入”;默认不写,就是in

2,out:用于设定该变量是用来“存储存储过程当中的数据”的,即“传出”,即函数中必须对他赋值;

3,inout:是in和out的结合,具备双向做用;

4,对于,out和inout设定,对应的实参,就“必须”是一个变量,由于该变量是用于“接收传出数据”;

create  procedure  test(in a int)
begin
    insert into test (name, age) values ('haha', 18);
end;

  调用存储过程:call  存储过程名  (实参1,实参2);

call test(1);

  删除存储过程:drop  procedure  过程名称;

三、触发器:

create  trigger  触发器名  触发时机  触发事件   on  表名   for  each  row  as

begin

  //这里,才是编程的位置,也就是触发器的内部语句

end;

说明:

1,触发时机,只有2个:  before(在....以前),  after(在....以后);

2,触发事件,只有3个:insert,  update,  delete

3,即其含义是:在某个表上进行insert(或update,或delete)以前(或以后),会去执行其中写好的代码(语句);即每一个表只有6个情形会可能调用该触发器;

4,一般,触发器用于在对某个表进行增删改操做的时候,须要同时去作另一件事情的情形;

5,在触发器的内部,有2个关键字表明某种特定的含义,能够用于获取有关数据:

new:它表明当前正要执行的insert或update的时候的“新行”数据;经过它,能够获取这一新行数据的任意一个字段的值,形式为:

set  @v1 = new.id; //得到该新插入或update行的id字段的值(前提是有该id)

set  @v2 = new.age; //同上;

old:它表明当前正要执行的delete的时候的“旧行”数据,经过它,能够获取这一旧行数据的任意一个字段的值,形式为:

set  @v1 = old.id; //得到该插入或update行的id字段的值(前提是有该id)

set  @v2 = old.age; //同上;

CREATE TRIGGER SumOfSalary BEFORE INSERT ON tb_emp8 FOR EACH ROW SET @sum=@sum+NEW.salary;
 CREATE TRIGGER double_salary AFTER INSERT ON tb_emp6 FOR EACH ROW INSERT INTO tb_emp7 VALUES (NEW.id,NEW.name,deptId,2*NEW.salary);
相关文章
相关标签/搜索