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);
相關文章
相關標籤/搜索