1. 程式人生 > >MySQL 基本概念瞭解及入門

MySQL 基本概念瞭解及入門

       發現自己對 MySQL 的瞭解確實少得可憐,於是到菜鳥網站菜鳥教程進行最基礎的學習入門,一個個參考例子進行學習與實踐,個人覺得上面的例子很簡單,對於初學者來講還是可以的,當然頂多入個門吧。我在這想記錄下,方便以後溫習與檢視。

       先下載mysql並安裝完成後就可以通過MySql命令列敲命令並檢視結果。

      

先了解下mysql基本一些概念:

Mysql是最流行的關係型資料庫管理系統,在WEB應用方面MySQL是最好的RDBMS(Relational Database Management System:關係資料庫管理系統)應用軟體之一。

RDBMS即關係資料庫管理系統(Relational Database Management System)的特點:

1.資料以表格的形式出現

2.每行為各種記錄名稱

3.每列為記錄名稱所對應的資料域

4.許多的行和列組成一張表單

5.若干的表單組成database

RDBMS 術語資料庫: 

    資料庫是一些關聯表的集合。

資料表: 表是資料的矩陣。在一個數據庫中的表看起來像一個簡單的電子表格。

    列: 一列(資料元素) 包含了相同的資料, 例如郵政編碼的資料。

行:一行(=元組,或記錄)是一組相關的資料,例如一條使用者訂閱的資料。

冗餘:儲存兩倍資料,冗餘降低了效能,但提高了資料的安全性。

主鍵:主鍵是唯一的。一個數據表中只能包含一個主鍵。你可以使用主鍵來查詢資料。

外來鍵:外來鍵用於關聯兩個表。

複合鍵:複合鍵(組合鍵)將多個列作為一個索引鍵,一般用於複合索引。

索引:使用索引可快速訪問資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構。類似於書籍的目錄。

參照完整性: 參照的完整性要求關係中不允許引用不存在的實體。與實體完整性是關係模型必須滿足的完整性約束條件,目的是保證資料的一致性。

MySQL支援多種型別,大致可以分為三類:數值、日期/時間和字串(字元)型別。
注意mysql命令都是以分號";"結束。 一開始往資料庫插入中文時發現亂碼了,即使在建表時設定了字符集,百度後就找到mysql安裝目錄下的my.ini配置檔案檢視,發現裡面預設是 utf8編碼,但還是亂碼了,於是將其改成gbk試試發現居然可以解決亂碼問題了。。如下圖所示:

以下進入各個知識點的學習: 1、MySQL 建立資料表:需要表名、表字段名和定義每個表字段的資訊 通用語法:CREATE TABLE table_name (column_name column_type); 在命令視窗敲入選擇資料庫後再敲入以下例項程式碼建表: CREATE TABLE IF NOT EXISTS `runoob_tbl`(
   `runoob_id` INT UNSIGNED AUTO_INCREMENT,
   `runoob_title` VARCHAR(100) NOT NULL,
   `runoob_author` VARCHAR(40) NOT NULL,
   `submission_date` DATE,
   PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
如果你不想欄位為 NULL 可以設定欄位的屬性為 NOT NULL, 在操作資料庫時如果輸入該欄位的資料為NULL ,就會報錯。
AUTO_INCREMENT定義列為自增的屬性,一般用於主鍵,數值會自動加1。
PRIMARY KEY關鍵字用於定義列為主鍵。 您可以使用多列來定義主鍵,列間以逗號分隔。
ENGINE 設定儲存引擎,CHARSET 設定編碼。
建立成功後可通過命令:desc `runoob_tbl`;或者show columns from `runoob_tbl`;查看錶的結構。 2、MySQL刪除資料表 語法:DROP TABLE table_name; 3、MySQL插入資料(型別要對應匹配) 語法:INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );
如果需要插入全部欄位則可以省略為:INSERT INTO table_name VALUES ( value1, value2,...valueN );
4、MySQL查詢資料 語法:SELECT column_name,column_name FROM table_name [WHERE Clause] [OFFSET M ][LIMIT N]
查詢語句中你可以使用一個或者多個表,表之間使用逗號(,)分割,並使用WHERE語句來設定查詢條件。
SELECT 命令可以讀取一條或者多條記錄。
你可以使用星號(*)來代替其他欄位,SELECT語句會返回表的所有欄位資料
你可以使用 WHERE 語句來包含任何條件。
你可以通過OFFSET指定SELECT語句開始查詢的資料偏移量。預設情況下偏移量為0。
你可以使用 LIMIT 屬性來設定返回的記錄數。
5、MySQL WHERE子句 語法:SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
查詢語句中你可以使用一個或者多個表,表之間使用逗號, 分割,並使用WHERE語句來設定查詢條件。
你可以在 WHERE 子句中指定任何條件。
你可以使用 AND 或者 OR 指定一個或多個條件。
WHERE 子句也可以運用於 SQL 的 DELETE 或者 UPDATE 命令。
WHERE 子句類似於程式語言中的 if 條件,根據 MySQL 表中的欄位值來讀取指定的資料。
6、MySQL UPDATE查詢 語法:UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause] 你可以同時更新一個或多個欄位。
你可以在 WHERE 子句中指定任何條件。
你可以在一個單獨表中同時更新資料。
7、MySQL DELETE語句 語法:DELETE FROM table_name [WHERE Clause] 如果沒有指定 WHERE 子句,MySQL 表中的所有記錄將被刪除。
你可以在 WHERE 子句中指定任何條件
您可以在單個表中一次性刪除記錄。
8、MySQL LIKE子句 SQL LIKE 子句中使用百分號 %字元來表示任意字元,類似於UNIX或正則表示式中的星號 *。
如果沒有使用百分號 %, LIKE 子句與等號 = 的效果是一樣的。
語法:SELECT field1, field2,...fieldN FROM table_name WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue' 9、MySQL UNION操作符   MySQL UNION 操作符用於連線兩個以上的 SELECT 語句的結果組合到一個結果集合中。多個 SELECT 語句會刪除重複的資料。   語法:   SELECT expression1, expression2, ... expression_n FROM tables [WHERE conditions]
  UNION [ALL | DISTINCT]
  SELECT expression1, expression2, ... expression_n FROM tables [WHERE conditions];
  引數:   expression1, expression2, ... expression_n: 要檢索的列。
  tables: 要檢索的資料表。
  WHERE conditions: 可選, 檢索條件。
  DISTINCT: 可選,刪除結果集中重複的資料。預設情況下 UNION 操作符已經刪除了重複資料,所以 DISTINCT 修飾符對結果沒啥影響。
  ALL: 可選,返回所有結果集,包含重複資料。
10、MySQL 排序    語法:SELECT field1, field2,...fieldN from table_name1, table_name2... ORDER BY field1, [field2...] [ASC [DESC]]    你可以使用任何欄位來作為排序的條件,從而返回排序後的查詢結果。
   你可以設定多個欄位來排序。
   你可以使用 ASC 或 DESC 關鍵字來設定查詢結果是按升序或降序排列。 預設情況下,它是按升序排列。
   你可以新增 WHERE...LIKE 子句來設定條件。
11、MySQL 分組     GROUP BY 語句根據一個或多個列對結果集進行分組。在分組的列上我們可以使用 COUNT, SUM, AVG,等函式。
    GROUP BY語法:       SELECT column_name, function(column_name)
      FROM table_name
      WHERE column_name operator value
      GROUP BY column_name;
   示例及結果如下:       使用 WITH ROLLUP   WITH ROLLUP 可以實現在分組統計資料基礎上再進行相同的統計(SUM,AVG,COUNT…)。      其中記錄 NULL 表示所有人的登入次數。
  我們可以使用 coalesce 來設定一個可以取代 NULL 的名稱,coalesce 語法:
  select coalesce(a,b,c);
  引數說明:如果a==null,則選擇b;如果b==null,則選擇c;如果a!=null,則選擇a;如果a b c 都為null ,則返回為null(沒意義)。
  以下例項中如果名字為空我們使用總數代替:    12、MySQL 連線的使用    JOIN 按照功能大致分為如下三類:
     INNER JOIN(內連線,或等值連線):獲取兩個表中欄位匹配關係的記錄。
     LEFT JOIN(左連線):獲取左表所有記錄,即使右表沒有對應匹配的記錄。
     RIGHT JOIN(右連線): 與 LEFT JOIN 相反,用於獲取右表所有記錄,即使左表沒有對應匹配的記錄。 
    特點如下:        示例如下:             MySQL left join 與 join 有所不同。 MySQL LEFT JOIN 會讀取左邊資料表的全部資料,即便右邊表無對應資料。        MySQL RIGHT JOIN 會讀取右邊資料表的全部資料,即便左邊邊表無對應資料。       恰好上述例子比較特殊,假如左表不存在相應資料也會顯示為 NULL。 13、MySQL NULL 值處理   IS NULL: 當列的值是 NULL,此運算子返回 true。
  IS NOT NULL: 當列的值不為 NULL, 運算子返回 true。
  <=>: 比較操作符(不同於=運算子),當比較的的兩個值為 NULL 時返回 true。
  關於 NULL 的條件比較運算是比較特殊的。你不能使用 = NULL 或 != NULL 在列中查詢 NULL 值 。
  在 MySQL 中,NULL 值與任何其它值的比較(即使是 NULL)永遠返回 false,即 NULL = NULL 返回false 。
  MySQL 中處理 NULL 使用 IS NULL 和 IS NOT NULL 運算子。
   14、MySQL 正則表示式   MySQL 同樣也支援其他正則表示式的匹配, MySQL中使用 REGEXP 操作符來進行正則表示式匹配。
  如果您瞭解PHP或Perl,那麼操作起來就非常簡單,因為MySQL的正則表示式匹配與這些指令碼的類似。
  下表中的正則模式可應用於 REGEXP 操作符中。
        以下例子嘗試匹配手機號碼(首位非0,共11位):    15、MySQL 事務   MySQL 事務主要用於處理操作量大,複雜度高的資料。比如說,在人員管理系統中,你刪除一個人員,你即需要刪除人員的基本     資料,也要刪除和該人員相關的資訊,如信箱,文章等等,這樣,這些資料庫操作語句就構成一個事務!
在 MySQL 中只有使用了 Innodb 資料庫引擎的資料庫或表才支援事務
事務處理可以用來維護資料庫的完整性,保證成批的 SQL 語句要麼全部執行,要麼全部不執行。
事務用來管理 insert,update,delete 語句
一般來說,事務是必須滿足4個條件(ACID): Atomicity(原子性)、Consistency(穩定性)、Isolation(隔離性)、Durability(可靠性)
1、事務的原子性:一組事務,要麼成功;要麼撤回。
2、穩定性 :有非法資料(外來鍵約束之類),事務撤回。
3、隔離性:事務獨立執行。一個事務處理後的結果,影響了其他事務,那麼其他事務會撤回。事務的100%隔離,需要犧牲速度。
4、可靠性:軟、硬體崩潰後,InnoDB資料表驅動會利用日誌檔案重構修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit 選項 決定什麼時候吧事務儲存到日誌裡。
在 MySQL 命令列的預設設定下,事務都是自動提交的,即執行 SQL 語句後就會馬上執行 COMMIT 操作。因此要顯式地開啟一個事務務須使用命令 BEGIN 或 START TRANSACTION,或者執行命令 SET AUTOCOMMIT=0,用來禁止使用當前會話的自動提交。
事物控制語句:
BEGIN或START TRANSACTION;顯式地開啟一個事務;
COMMIT;也可以使用COMMIT WORK,不過二者是等價的。COMMIT會提交事務,並使已對資料庫進行的所有修改稱為永久性的;
ROLLBACK;有可以使用ROLLBACK WORK,不過二者是等價的。回滾會結束使用者的事務,並撤銷正在進行的所有未提交的修改;
SAVEPOINT identifier;SAVEPOINT允許在事務中建立一個儲存點,一個事務中可以有多個SAVEPOINT;
RELEASE SAVEPOINT identifier;刪除一個事務的儲存點,當沒有指定的儲存點時,執行該語句會丟擲一個異常;
ROLLBACK TO identifier;把事務回滾到標記點;
SET TRANSACTION;用來設定事務的隔離級別。InnoDB儲存引擎提供事務的隔離級別有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。
MYSQL 事務處理主要有兩種方法:
1、用 BEGIN, ROLLBACK, COMMIT來實現
BEGIN 開始一個事務
ROLLBACK 事務回滾
COMMIT 事務確認
2、直接用 SET 來改變 MySQL 的自動提交模式:
SET AUTOCOMMIT=0 禁止自動提交
SET AUTOCOMMIT=1 開啟自動提交


16、MySQL ALTER命令    當我們需要修改資料表名或者修改資料表字段時,就需要使用到MySQL ALTER命令。    刪除,新增或修改表字段   如下命令使用了 ALTER 命令及 DROP 子句來刪除以上建立表的 i 欄位:   ALTER TABLE testalter_tbl  DROP i;   如果資料表中只剩餘一個欄位則無法使用DROP來刪除欄位。
  MySQL 中使用 ADD 子句來向資料表中新增列,如下例項在表 testalter_tbl 中新增 i 欄位,並定義資料型別:ALTER TABLE   testalter_tbl ADD i INT;
  執行以上命令後,i 欄位會自動新增到資料表字段的末尾。
  如果你需要指定新增欄位的位置,可以使用MySQL提供的關鍵字 FIRST (設定位第一列), AFTER 欄位名(設定位於某個欄位之後)。   FIRST 和 AFTER 關鍵字只佔用於 ADD 子句,所以如果你想重置資料表字段的位置就需要先使用 DROP 刪除欄位然後使用 ADD 來新增欄位並設定位置。  修改欄位型別及名稱
   如果需要修改欄位型別及名稱, 你可以在ALTER命令中使用 MODIFY 或 CHANGE 子句 。
   例如,把欄位 c 的型別從 CHAR(1) 改為 CHAR(10),可以執行以下命令:
   ALTER TABLE testalter_tbl MODIFY c CHAR(10);
   使用 CHANGE 子句, 語法有很大的不同。 在 CHANGE 關鍵字之後,緊跟著的是你要修改的欄位名,然後指定新欄位名及型別。嘗試如下例項:
   ALTER TABLE testalter_tbl CHANGE i j BIGINT;
   ALTER TABLE testalter_tbl CHANGE j j INT;
 修改欄位預設值 ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
  也可以使用 ALTER 命令及 DROP子句來刪除欄位的預設值,如下例項:
   ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
 修改表名
   
ALTER TABLE testalter_tbl RENAME TO alter_tbl;
 修改儲存引擎:修改為myisam
   
alter table tableName engine=myisam;
 刪除外來鍵約束:keyName是外來鍵別名
   alter table tableName drop foreign key keyName;
17、MySQL 索引
索引分單列索引和組合索引。單列索引,即一個索引只包含單個列,一個表可以有多個單列索引,但這不是組合索引。組合索引,即一個索引包含多個列。
建立索引時,你需要確保該索引是應用在SQL 查詢語句的條件(一般作為 WHERE 子句的條件)。
實際上,索引也是一張表,該表儲存了主鍵與索引欄位,並指向實體表的記錄。
上面都在說使用索引的好處,但過多的使用索引將會造成濫用。因此索引也會有它的缺點:雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對錶進行INSERT、UPDATE和DELETE。因為更新表時,MySQL不僅要儲存資料,還要儲存一下索引檔案。
建立索引會佔用磁碟空間的索引檔案。

         18、MySQL 臨時表   MySQL 臨時表在我們需要儲存一些臨時資料時是非常有用的。臨時表只在當前連線可見,當關閉連線時,Mysql會自動刪除表並釋放所有空間。      重啟之後就沒了臨時表的資料了。    手動刪除MySQL 臨時表:    19、MySQL 複製表   如果我們需要完全的複製MySQL的資料表,包括表的結構,索引,預設值等。 如果僅僅使用CREATE TABLE ... SELECT 命令,    是無法實現的。
  本章節將為大家介紹如何完整的複製MySQL資料表,步驟如下:
  使用 SHOW CREATE TABLE 命令獲取建立資料表(CREATE TABLE) 語句,該語句包含了原資料表的結構,索引等。
  複製以下命令顯示的SQL語句,修改資料表名,並執行SQL語句,通過以上命令 將完全的複製資料表結構。
  如果你想複製表的內容,你就可以使用 INSERT INTO ... SELECT 語句來實現。
  步驟一:
    獲取資料表的完整結構。
    SHOW CREATE TABLE `tableName` \G;(格式化檢視建表`tableName`時的建立語句)
  步驟二:
    修改SQL語句的資料表名為新表名,並執行SQL語句。
  步驟三:
    執行完第二步驟後,你將在資料庫中建立新的克隆表 clone_tbl。 如果你想拷貝資料表的資料你可以使用 INSERT INTO `新表名` (欄位名...) SELECT 欄位名,.,.,. from `tableName`; 語句來實現。
  執行以上步驟後,你將完整的複製表,包括表結構及表資料。

相關推薦

MySQL 基本概念瞭解入門

       發現自己對 MySQL 的瞭解確實少得可憐,於是到菜鳥網站菜鳥教程進行最基礎的學習入門,一個個參考例子進行學習與實踐,個人覺得上面的例子很簡單,對於初學者來講還是可以的,當然頂多入個門吧

MySQL基本概念以及簡單操作

software 倉庫 必須 key 不能 即使 同時 databases ecif 一、MySQL   MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬於Oracle 旗下產品。MySQL 是最流行的關系型數據庫管理系統之一,在 WEB

分享知識-快樂自己:初始 Struts2 (基本概念 搭建第一個Demo

表單 控制器 title dtd eth -name 技術 mar 麻煩 1):struts2 的基本概念:   1-1):Struts2 是什麽?     1、Struts2是一個基於MVC設計模式的Web應用框架,它本質上相當於一個servlet,在MVC設計模式中,S

mysql基礎概念知識應用

mysql 中有兩種索引型別 MyISAM 和 InnoDB MyISAM 支援全文搜尋,不支援事務處理,不支援行鎖,應用於需要大量select 操作 InnoDB 支援事務處理和行鎖,應用於需要大量對資料表進行操作的場景 對篩選資料進行去重 select di

Kubernetes初步瞭解入門

(1)什麼是Kubernetes?Kubernetes是一個在叢集主機間進行自動化部署、擴充套件和容器操作的提供以容器為中心基礎設施的開源平臺。通過Kubernetes,你可以快速有效地響應使用者需求

orm的基本概念與mybatis入門

orm:簡單來說,orm就像是一個單調函式,實現程式語言的型別與關係型資料庫型別之間的相互轉換。接下來簡單介紹一下java中的orm框架——mybatis。mybatis具有四大核心元件1、SqlSessionFactoryBuilder:會根據xml配置或是java配置來生

MySQL基本概念--資料型別

1. mysql的資料型別       在mysql中有如下幾種資料型別:       (1)數值型       數值是諸如32 或153.4 這樣的值。mysql支援科學表示法,科學表示法由整數或浮點數後跟“e”或“e”、一個符號(“+”或“-”)和一個整數指數來表示。1.24e+12 和23.47e-1

spark基本概念入門

spark spark背景 什麼是spark Spark是一種快速、通用、可擴充套件的大資料分析引擎,2009年誕生於加州大學伯克利分校AMPLab,2010年開源,2013年6月成為Apache孵化專案,2014年2月成為Apache頂級專案。目前,Spark生態系統已經發展成為一個包含多個子專案的集

OracleRAC基本概念入門

1、什麼是cluster 一個cluster是由兩個或是多個獨立的、通過網路連線的servers組成的。幾個硬體供應商多年以來提供了Cluster效能的各種需求。一些Clusters僅僅為了提供高可用性的,在當前活動的node發生故障時轉移到次節點node。另一些是為了提供

Oracle RAC 基本概念入門

1、什麼是cluster    一個cluster是由兩個或是多個獨立的、通過網路連線的servers組成的。幾個硬體供應商多年以來提供了Cluster效能的各種需求。一些Clusters僅僅為了提供高可用性的,在當前活動的node發生故障時轉移到次節點node。另一些是為

MyBatis入門——瞭解基本概念

1. 瞭解MyBatis 1.1 MyBatis是什麼? 使用Java操作資料庫的話,JDK給我們提供了一層對各個資料庫的封裝,也就是JDBC,它遮蔽了資料庫之間的差異,使用JDBC可以統一操作。但是他長期以來被人詬病的就是重複程式碼太多。封裝引數需

SpringBoot基本概念快速入門(IOC/DI)

SpringBoot基本概念    之前版本缺點:繁多的配置/低下的開發效率/複雜的部署流程以及第三方技術整合難度大.    SpringBoot優點:快速構建專案對主流開發框架的無配置整合專案可以獨立執行(內嵌入Servlet容器)提供執行時的應用監控極大的提高了開發/部署

Linux 02 Linux基本概念操作

調用 manual 如何 滾動 示例 函數 script 部分 ctrl+ 基本echo "hello word" 輸出 hello wordtouch file 創建文件名為file 常用快捷鍵TAB:在忘記命令時,可以用來補全命令Ctrl+c:強制終止

MySQL基本知識練習(5)

ase part exist 四舍五入 tex sub pass center 不同的 1.求一個班級數學平均分。 (1). select sum(math) / count(math) as 數學平均分 from student; (2). select avg(

Elasticsearch基本概念核心配置文件詳解

last log4j 強烈 內存 文檔 size oca 機制 集群   Elasticsearch5.X,下列的是Elasticsearch2.X系類配置,其實很多配置都是相互兼容的 1. 配置文件 config/elasticsearch.yml 主配置文件

樹(基本概念存儲結構)

表示 com 鏈式 結構定義 comment pen next rac 存儲 樹的定義—-遞歸(兩者相聯系) 根節點:唯一 節點的度:節點擁有的子樹數。度為0—>稱為終端節點或葉節點 樹的度:樹內各節點的度的最大值 內部節點:除根節點外的節

netfilteriptables基本概念

接口 重要 問控制 mage 是否 服務器 ges 數據包 防火墻 網絡訪問控制 網絡訪問控制可以簡單理解為防火墻,常用的網絡訪問控制有:哪些IP可以訪問服務器, 可以使用哪些協議,哪些接口,是否需要對數據包進行修改等。 netfilter netfilter是通

DNS基本概念操作詳解----------------轉載

dns介紹 DNS基本概念及操作詳解目錄:1.DNS協議2.DNS查詢 2.1遞歸查詢 2.2跌代查詢 2.3反向查詢3.域維護 3.1全量AXFR傳輸 3.2增量IXFR傳輸 3.3通過NOTIFY 3.4動態更新4.DNS安全 在很多人看來,DNS只是為外部提供DNS解析服務(我以前也是這麽認為

Git基礎入門(八)Git分支的基本概念

git 版本控制 分支管理幾乎所有的版本控制系統都以某種形式支持分支。 使用分支意味著你可以把你的工作從開發主線上分離開來,以免影響開發主線。 在很多版本控制系統中,這是一個略微低效的過程——常常需要完全創建一個源代碼目錄的副本。對於大項目來說,這樣的過程會耗費很多時間。有人把Git的分支模型稱為它的`‘必殺

mysql優化-優化入門MySQL的優化介紹執行步驟

個人 步驟 應該 是不是 查詢優化 重點 開啟 使用 返回 優化到底優化什麽? 優化,一直是面試最常問的一個問題。因為從優化的角度,優化的思路,完全可以看出一個人的技術積累。那麽,關於系統優化,假設這麽個場景,用戶反映系統太卡(其實就是高並發),那麽我們怎麽優化?