Mysql相關操作有哪些

1》創建數據庫:
  語法:create database 數據庫名;
  語法:show databases 查看已經存在數據庫
  舉例:  

 mysql->create?database?zytest;????注意每一條要以;號結尾      Mysql->show?databases;查詢是否創建成功        ??>use?zytest;

? ? ? ??Mysql相關操作有哪些

2》刪除數據庫:
  語法:drop database 數據庫名字;
  舉例:
    Mysql->drop database zytest; 刪除zytest
    Mysql->show databases; ? ? ? 查詢是否刪除成功

? ? ? ? ? ? ??Mysql相關操作有哪些

3》存儲引擎介紹:
?   1>innoDB引擎
? ? ? ?     innoDB是mysql的一種存儲引擎,inodb給mysql的表提供了事務日志,回滾、奔潰、修復能力和多版本并發控制的事務安全。Mysql從3.23.34a開始包含 ? ? ? ? ? ? ? ? ? ? ? ? innoDB存儲引擎.
? ? ? ?     innoDB是第一個提供外鍵約束的表引擎,而且對innoDB對事務處理的能力。也是其它引擎無法與之抗衡的。,
? ? ? ?     innodb支持自動增長列使用auto_increment,自動增長列不值不能為空
? ? ? ?     innodb 存儲引擎中支持外鍵Z(foreign key),外鍵所在的表為子表,外鍵所依賴的表為父母,父表中的被子表外檢關聯的字段必須是主鍵,當刪除、更新父表 ? ? ? ? ? ? ? ? ? 的某條信息時,子表也必須有相應的改變,
? ? ? ?     ? ?innodb存儲引擎中,創建表的表結構存儲在.frm文件中,數據和索引存儲在innodb_data_home_dir 和 innodb_data_file_path定義的表空間.

       ??元數據文件所有的表的ibdata1如果不定義innodb_data_home_dir 參數。默認就在datadir下面,InnoDB每個數據表的元數據(metadata)總是保 ? ? ? ? ? ? ? ? ? 存在ibdata1 這個共享表空間里,因此該文件必不可少innodb_data_file_path = ibdata1:10M:autoextend

  數據和索引文件集合在一起:*.ibd每個表都有單獨一個元數據,
  表定義文件:*.frm
  所有的表總的元數據文件為ibdata1
  Inoodb存儲引擎的
    優勢:在于提供了良好的事務管理、崩潰、修復能力和并發控制,
    缺點:是其讀寫效率稍差,占用的數據空間相對比較大.

?

  ? 什么是事務??我們先來看看ACID原則
      ACID是數據庫事務正常執行的四個基本要素,分別指原子性、一致性、獨立性及持久性
      原子性(Atomicity):事務的原子性是指一個事務要么全部執行,要么不執行.也就是說一個事務不可能只執行了一半就 停止了.比如你從取款機取錢, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 這個事務可以分成兩個步驟:1劃卡,2出錢.不可能劃了卡,而錢卻沒出來.這兩步必須同時完成.要么就不完成.
   ? ? ? ? ? ? ?一致性(Consistency):事務的一致性是指事務的運行并不改變數據庫中數據的一致性.例如,完整性約束了a+b=10,一個事務改變了a,那么b也應該隨 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 之改變.
     ? ? ?獨立性(Isolation):事務的獨立性也有稱作隔離性,是指兩個以上的事務不會出現交錯執行的狀態.因為這樣可能會導致數據不一致.
     ? ? ?持久性(Durability):事務的持久性是指事務執行成功以后,該事務所對數據庫所作的更改便是持久的保存在數據庫之中,不會無緣無故的回滾.

? ?? 2>MyISAM引擎
?     MyISAM存儲表分為3個文件,文件與表名相同,擴展包括frm,MYD和MYI,
?     frm為擴展名的文件存儲表的結構
?     myd為擴展名的文件存儲數據
?     myi為擴展名的文件存儲索引
    優點:占用空間小,。處理速度快,
    缺點:不支持事務日志的完整性和并發性? ? ?3>MEMORY 引擎     Mysql中的特殊引擎,所有的數據全部存放于內存當中,在企業生產環境當中。幾乎是用不到。因為數據存儲在內存,如果內存出現異常。將影響數據的完 ? ? ? ? ? ? ? 整性。  優點:存儲速度快

  缺點:缺乏穩定性和完整性

    MyISAM:不支持外鍵,不支持事務,索引和數據分開的,可以加載更多的索引,并且索引是壓縮的,相對內存來說使用效率就提高不少,,他使用一 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?種表格鎖定的機制,來優化多個并發讀寫操作,MYISAM強調了快速讀取操作;
      使用場合:在承載的大部分項目是讀多寫少的項目平臺中,而MyISAM的讀性能是比Innodb強不少的

    Innodb: 支持外鍵,支持事務、回滾,但是索引和數據是緊密捆綁的,沒有使用壓縮從而會造成INNODB比MYISAM體積龐大不小。
      使用場合:在承載的大部分項目執行insert 和update的話,應該選擇InnoDB.

    鎖的介紹:mysql常見的三種鎖級別——表級鎖、頁面鎖、行級鎖;其中表級鎖有兩種模式——表共享讀鎖和表獨占寫鎖。

   MyISAM:
    ?表級鎖:對myisam表進行讀操作的時候,它不會阻塞其他用戶對同一表的讀請求,但會阻塞對同一表>的寫操作;
         ?對myisam表進行寫操作的時候,它會阻塞其他用戶對同一表的讀、寫請求.

   innodb:

? ? ? ? ? ? ? ? 提供行鎖(locking on row level),另外,InnoDB表的行鎖也不是絕對的,如果在執行一個SQL語句時MySQL不能確定要掃描的范圍,InnoDB表同樣會 ? ? ? ? ? ? ? ? 鎖全表.

? ? 行級鎖的優點如下:
    1)當很多連接分別進行不同的查詢時減小LOCK狀態。
    2)如果出現異常,可以減少數據的丟失。因為一次可以只回滾一行或者幾行少量的數據。
? ?行級鎖的缺點如下:
    1)比頁級鎖和表級鎖要占用更多的內存。
    2)進行查詢時比頁級鎖和表級鎖需要的I/O要多,所以我們經常把行級鎖用在寫操作而不是讀操作。
    3)容易出現死鎖。
   注意:inodb不能確定操作的行,這個時候就使用的意向鎖,也就是表鎖on row level);

4》察看存儲引擎:
? ? ?  存儲引擎是Mysql的特點,Mysql可以選擇多種存儲引擎及不同的存儲方式,是否進行事物處理等;
?    1> ? 查詢Mysql支持的引擎
? ? ? ? ?      Mysql->show engines;

? ? ? ? ? ? ? ? ??Mysql相關操作有哪些

? ? ? ? ? ? ? ??? ?Mysql->show enginesG;

? ? ? ? ? ? ? ? ? ?Mysql相關操作有哪些

? ? ? ? ?? 2>查詢Mysql引擎詳細信息:? ??      

 Mysql->show?engine?innodb?statusG;

   ? ?3>查詢Mysql默認存儲引擎? ??       

Mysql->?show?variables?like?'storage_engine';

? ?     如果想修改存儲引擎,可以在 my.ini中進行修改或者my.cnf中的Default-storage-engine=引擎類型;

? ? ? ? ? ? ? ? ??Mysql相關操作有哪些

5》如何選擇存儲引擎

? ? ? ?    在企業生產環境中,選擇一個款合適的存儲引擎是一個很復雜的問題。每一種存儲引擎都有各自的優勢,不能籠統的說,誰比誰好。通常用的比較多的 ? ? 是innodb存儲引擎
? ? 以下是存儲引擎的對比:

? ? ? ? ?Mysql相關操作有哪些

==========================創建,修改,刪除表:

1》創建表的方法:
? ?    語法:create table 表名(
    屬性名數據類型完整約束條件,
    屬性名數據類型條完整約束件,
    。。。。。。。。。
    屬性名數據類型
  );

  舉例:    

create?table?example0(            id?int,            name?varchar(20),            sexboolean);

2》表的完整性約束:

? ? ? ?| 約束條件 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| 說明|

| (1)primary key ??  ?| 標識該字段為表的主鍵,具備唯一性|

| (2)foreign key ? ?  ?| 標識該字段為表的外鍵,與某表的主鍵聯系|

| (3)not null ? ? ? ? ?  ?| 標識該屬于的值不能為空|

| (4)unique ? ? ? ? ??  ?| 標識這個屬性值是唯一|

| (5)auto_increment ? ? ?| 標識該屬性值的自動增加

| (6)default?     ? ??| 為該屬性值設置默認值|

? ? ??? 1>設置表的主鍵:
? ? ? ? ?     ?主鍵是一個表的特殊字段,這個字段是唯一標識表中的每條信息,主鍵和記錄的關系,跟人的身份證一樣。名字可以一樣,但是身份證號碼覺得不會一樣, ? ? ? ? ? ?主鍵用來標識每個記錄,每個記錄的主鍵值都不同,主鍵可以幫助Mysql以最快的速度查找到表中的某一條信息,主鍵必須滿足的條件那就是它的唯一性,表中的 ? ? ? ? ?任意兩條記錄的主鍵值,不能相同,否則就會出現主鍵值沖突,主鍵值不能為空,可以是單一的字段,也可以多個字段的組合。

??? 舉例:   

 create?table?sxkj(          User_id?int?primary?key,          user_name?varchar(20),          user_sexchar(7));

? ? ? ?? 2>設置多個字段做主鍵
   舉例:   

 create?table?sxkj2(          user_id?int?,          user_name?float,          grade?float,         ???primary?key(user_id,user_name));

? ? ? ? ? ? 3>設置表的外鍵:
? ? ?      ??外鍵是表的一個特殊字段,如果aa是B表的一個屬性且依賴于A表的主鍵,那么A表被稱為父表。B表為被稱為子表,
   ? ? ? 舉例說明:
? ? ?        ?user_id 是A 表的主鍵,aa ?是B表的外鍵,那么user_id的值為zhangsan,如果這個zhangsan離職了,需要從A表中刪除,那么B表關于 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? zhangsan的信息也該得到相應的刪除,這樣可以保證信息的完整性。
    語法:
        constraint外鍵別名 foreign key(外鍵字段1,外鍵字段2)
? ? ? ? ? ?        references 表名(關聯的主鍵字段1,主鍵字段2)?

? ? ? ? ? ? ? ? ??? (1) yy1表存儲了zhangsan姓名和ID號
? ?        create table yy1(
? ?            user_id int primary key not null,
? ?            user_name varchar(20));

? ? ? ? ? ? ? ? ? ? ? ? ?Mysql相關操作有哪些

? ? ? ? ? ? ? ? ? ? ? ? (2) yy2表存儲了ID號和zhangsan的年齡(old)??            

 create?table?yy2(  ????                user_id?int?primary?key?not?null,  ????                old?int(5),  ????                constraint?y_fk?foreign?key(user_id)  ????                references?yy1(user_id)on?delete?cascade?on?update?cascade);

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Mysql相關操作有哪些

? ? ? ? ? ? ? ? ? ? ?(3)數據填充yy1和yy2表??          

 insert?into?yy1?values('110','zhangsan');  ????          insert?into?yy2?values('110','30');

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Mysql相關操作有哪些

? ? ? ? ? ? ? ? ? ?(4)更新測試:

???        update?yy1?set?user_id='120'?where?user_name='zhangsan';  ???      查詢驗證  ???        select?*?from?yy2;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ??Mysql相關操作有哪些

? ? ? ? ? ? ? ? ? ? (5)刪除測試:?         

delete?from?yy1?where?user_id='120';  ??      查詢驗證  ??        select?*?from?yy2;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ??Mysql相關操作有哪些

? ? ? ? ?? ?4>設置表的非空值
? ? ? ?      語法:屬性名數據類型 ?NOT NULL
? ? ? ?      舉例:? ? ??        

 create?table?C(  ????????          user_id?int?NOT?NULL);

? ? ? ? ? ? 5> 設置表的唯一性約束
? ? ? ? ?    ?唯一性指的就是所有記錄中該字段。不能重復出現。
? ? ? ? ?    語法:屬性名數據類型 ?unique
? ? ? ? ?    舉例:? ? ? ??      

 root@zytest?15:43>create?table?D(  ????????????????????????????????????????              ->user_id?int?unique);  ??????????      root@zytest?15:44>show?create?table?D;

? ? ? ? ? ?? 6>設置表的屬性值自動增加
? ? ? ?      ?   Auto_increment 是Mysql數據庫中特殊的約束條件,它的作用是向表中插入數據時自動生成唯一的ID,一個表只能有一個字段使用 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? auto_increment 約束,必須是唯一的;
? ? ? ?     語法:屬性名數據類型 auto_increment,默認該字段的值從1開始自增。
? ? ? ?     舉例:
? ? ? ?       

create?table?F(?user_id?int?primary?key?auto_increment);  ?????????      root@zytest?15:56>insert?into?F?values();插入一條空的信息  ?????????      Query?OK,?1?row?affected,?1?warning?(0.00?sec)  ?????????      root@zytest?15:56>select?*?from?F;值自動從1開始自增  ?????????      +---------+  ?????????      |?user_id?|  ??????????      +---------+  ????????      |???????1?|  ????????      +---------+  ????????      1?row?in?set?(0.01?sec)

? ? ? ? ? ? ?? 7>、設置表的默認值
? ? ? ? ?        在創建表時,可以指定表中的字段的默認值,如果插入一條新的紀錄時,沒有給這個字段賦值,那么數據庫會自動的給這個字段插入一個默認 ? ? ? ? ? ? ? ? ? ? ?值,字段的默認值用default來設置。
? ? ? ? ?      語法: 屬性名數據類型 default 默認值
? ? ? ? ?      舉例:? ? ? ? ?        

 root@zytest?16:05>create?table?G(  ???????????                user_id?int?primary?key?auto_increment,  ???????????                user_name?varchar(20)?default?'zero');  ???????????        root@zytest?16:05>insert?into?G?values('','');

? ? ? ? ?         插入數據,應為ID為自增,值為空,user_name設置了默認值,所以也為空。

3》查看表結構的方法:
? ? ? ?    ?DESCRIBE可以查看那表的基本定義,包括、字段名稱,字段的數據類型,是否為主鍵以及默認值等。。
? ? ? ?  (1)語法:describe 表名;可以縮寫為desc
? ? ? ?  (2) ?show create table查詢表詳細的結構語句,
? ?     1>修改表名
? ? ? ? ?      語法:alter table 舊表名 rename 新表名;
? ? ? ? ?      舉例;? ? ? ??        

 root@zytest?16:11>alter?table?A?rename?zyA;  ??????????        Query?OK,?0?rows?affected?(0.02?sec)

? ?     2>修改表的數據類型
? ? ? ?       語法:alter table 表名 modify 屬性名 數據類型;
? ? ? ?       舉例;? ? ? ?         

root@zytest?16:15>alter?table?A?modify?user_name?double;  ?????????        Query?OK,?0?rows?affected?(0.18?sec)

? ?    3>修改表的字段名稱
? ? ? ?      語法: alter table 表名 change 舊屬性名 新屬性名 新數據類型;? ? ??         

??root@zytest?16:15>alter?table?A?change?user_name?user_zyname?float;  ????????        ?Query?OK,?0?rows?affected?(0.10?sec)

? ? ? ? ? ? ? ?? 4>修改增加字段? ? ? ?        ?

?alter?table?表名?ADD?屬性名1??數據類型?[完整性約束條件]?[FIRST?|AFTER?屬性名2]

      v ? ? ?增加沒有約束條件的字段:? ? ? ?       

  root@zytest?16:18>alter?table?A?add?phone?varchar(20);  ?????????        Query?OK,?0?rows?affected?(0.13?sec)

      v ? ? ? 增加有完整約束條件的字段? ? ? ?         

root@zytest?16:42>alter?table?A?add?age?int(4)?not?null;  ?????????        Query?OK,?0?rows?affected?(0.13?sec)

      v 在表的第一個位置增加字段默認情況每次增加的字段。都在表的最后。? ? ? ?         

root@zytest?16:45>alter?table?tt?add?num?int(8)?primary?key?first;  ?????????        Query?OK,?1?row?affected?(0.12?sec)  ?????????        Records:?1??Duplicates:?0??Warnings:?0

      v ? ? ? ? ?執行在那個位置插入新的字段,在phone后面增加? ? ? ? ?        

 root@zytest?16:46>alter?table?A?add?address?varchar(30)?not?null?after?phone;  ???????????        Query?OK,?0?rows?affected?(0.10?sec)  ???????????        Records:?0??Duplicates:?0??Warnings:?0

? ? ? ? ?   總結:
? ? ? ? ?    (1) ?默認ADD 增加字段是在最后面增加
? ? ? ? ?    (2) ?如果想在表的最前端增加字段用first關鍵字
? ? ? ? ?    (3) ?如果想在某一個字段后面增加的新的字段,使用after關鍵字
?   5>刪除一個字段
? ? ?     alter table 表名DROP 屬性名;
? ? ?     舉例: 刪除A 表的age字段? ? ?       

root@zytest?16:51>alter?table?A?drop?age;???  ???????      Query?OK,?0?rows?affected?(0.11?sec)  ???????      Records:?0??Duplicates:?0??Warnings:?0  

?   6>更改表的存儲引擎? ? ??     

  alter??table表名?engine=存儲引擎  ????????      alter?table?A?engine=MyISAM;

?   7>刪除表的外鍵約束? ? ??      

 alter?table?表名drop?foreign?key?外鍵別名;  ????????      alter?table??yy2??drop?foreign?key??y_fk;

? 4》刪除表的方法

? ?     1>刪除沒有被關聯的普通表
? ? ? ? ?      drop table 表名;
? ?     2>刪除被其它表關聯的父表
? ? ? ?        在數據庫中某些表之間建立了一些關聯關系。一些成為了父表,被其子表關聯,要刪除這些父表,就不是那么簡單了。刪除方法,先刪除所關聯的 ? ? ? ? ? ? ? ?子表的外鍵,在刪除主表。

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享