Mysql相關操作

来源:http://www.cnblogs.com/xiaocheche/archive/2017/09/28/7608893.html
-Advertisement-
Play Games

1》創建資料庫: 語法:create database 資料庫名; 語法:show databases 查看已經存在資料庫 舉例: Mysql->create database zytest; 註意每一條要以;號結尾 Mysql->show databases;查詢是否創建成功 >use zytes ...


1》創建資料庫:
  語法:create database 資料庫名;
  語法:show databases 查看已經存在資料庫
  舉例:
    Mysql->create database zytest; 註意每一條要以;號結尾
    Mysql->show databases;查詢是否創建成功
        >use zytest;

        

2》刪除資料庫:
  語法:drop database 資料庫名字;<使用此命令,請註意>
  舉例:
    Mysql->drop database zytest; 刪除zytest
    Mysql->show databases; 查詢是否刪除成功

              

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->show engines\G;

                   

           2>查詢Mysql引擎詳細信息:
      Mysql->show engine innodb status\G;
      3>查詢Mysql預設存儲引擎
      Mysql-> show variables like 'storage_engine';
    如果想修改存儲引擎,可以在 my.ini中進行修改或者my.cnf中的Default-storage-engine=引擎類型;

                  

5》如何選擇存儲引擎

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

         

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

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));

                         

                        (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);  

                                 

                     (3)數據填充yy1和yy2表
          insert into yy1 values('110','zhangsan');
          insert into yy2 values('110','30');

                               

                   (4)更新測試:
        update yy1 set user_id='120' where user_name='zhangsan';
      查詢驗證
        select * from yy2;

                              

                    (5)刪除測試:
        delete from yy1 where user_id='120';
      查詢驗證
        select * from yy2;

                              

            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>刪除被其它表關聯的父表
       在資料庫中某些表之間建立了一些關聯關係。一些成為了父表,被其子表關聯,要刪除這些父表,就不是那麼簡單了。刪除方法,先刪除所關聯的                子表的外鍵,在刪除主表。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 結構代碼: <html> <head></head> <title></title> <body> 頁面主體內容 HTML超文本語言以標簽為主編寫前端頁面。 </body> </html> ...
  • 原來用了幾個生成二維碼的插件,總是遇見各種問題……最後索性自己弄一個,這裡順便記錄一下。 Chrome 插件很開放!!!你只要拿到了ocx文件,然後把文件的尾碼名改為zip,就可以解壓了,最後一切的一切…… 此次學習參考:http://open.chrome.360.cn/extension_dev ...
  • API: https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API 直接上源碼: 運行代碼後發現,當滾動滾動軸時,只有當<li>區域完全顯示出來後才會觸發相應的下載圖片的http請求。 相容瀏覽器: desk ...
  • 接著上文[js高手之路] html5 canvas系列教程 - 像素操作(反色,黑白,亮度,復古,蒙版,透明)繼續. 一、線形漸變 線形漸變指的是一條直線上發生的漸變。 用法: var linear = cxt.createLinearGradient( x1, y1, x2, y2 ); line ...
  • 調試基於WebView的Hybrid App最舒服的工具當然是Chrome自帶的開發者工具,其中有我們熟悉的Dom樹調試,JS調試,Network監視等等功能。 Google提供的調試Android上WebView的步驟: 問題就出現在這裡,對於國內的程式猿來說,由於無法訪問 https://chr ...
  • 最近升級Xcode9.0,沒少折騰,再加上iOS11出現的問題,又要適配一些奇怪的問題。這都沒啥,但是如果Xcode出問題,那問題可真是難找。因為習慣的操作潛意思的告訴自己這樣做是不會錯的。 在Xcode9 如果你在Images.xcassets添加了圖片使用[UIImage imageNamed: ...
  • 有個項目需求是做個在日期上選擇的,就是這種: 網上看了幾個日期的demo都太厚重了,移植起來太麻煩,然後打算自己寫。 就先寫個簡化的demo看看,主要有幾個關鍵點: 首先要根據當前日期獲取這個月有幾天 然後判斷這個月份第一天是周幾 再根據上面兩個數據在合理的位置顯示數據 還要記錄下當前的日期方便切換 ...
  • SparkSQL和DataFrame SparkSQL簡介 Spark SQL是Spark用來處理結構化數據的一個模塊,它提供了一個編程抽象叫做DataFrame並且作為分散式SQL查詢引擎的作用。它是將Spark SQL轉換成RDD,然後提交到集群執行,執行效率非常快! SparkSQL的特性 1 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...