mysql 基本使用方法

描述:mysql 是開源的關係型數據庫,學習它以前能夠先在本地安裝一個典型的mysql 數據庫,並將mysql 安裝目錄下的bin 目錄配置到系統環境變量的PATH中,這樣就能夠在任意路徑下登陸mysql客戶端,能夠百度獲取配置方式。mysql

mysql的默認端口是3306,mysql的超級用戶是root, mysql建立輸入庫是CREATE DATABASE, 修改數據庫是ALTER DATABASE,刪除數據庫 DROP DATABASE。web

從mysql 的bin 目錄下進入mysql的客戶端,輸入:mysql -hlocalhost -uroot -p 回車,再輸入密碼 回車,就能夠登陸mysql 客戶端,能夠對mysql 數據庫實行命令操做,輸入exit, quit, \q 三個中的任意一個命令,對mysql 客戶端退出操做。算法

mysql 語句規範:sql

1:關鍵字和函數名都要大寫;數據庫

2:數據庫名,表名,字段名要小寫;網絡

3:每條sql語句都要以分號結尾;併發

注意: 及時關鍵字和函數名寫成小寫,系統也是確認的,通常用來區別關鍵字,函數,數據庫名,表名,字段名,書寫的時候要嚴格遵照。函數

一些經常使用的命令:學習

SHOW DATABASES;     //查看數據庫列表ui

USE databaseName ;    //使用databaseName 數據庫

SHOW TABLES;   // 查看databaseName 數據庫中的表

CREATE DATABASE IF NOT EXISTS  databaseName;  //建立databaseName數據庫

ALTER DATABASE databaseName CHARACTER SET utf8;  //修改數據庫databaseName的字符編碼格式爲utf8

DROP DATABASE IF EXISTS databaseName;   //刪除數據庫databaseName

注意:數據庫的建立作if not exists, 刪除作if exists, 修改則沒有這個判斷存在的關鍵字。

 

數據類型

存儲數字:

    存放整數的類型有整型:TINYINT, SMALLINT, MEDIUMINT,  INT, BIGINT。

    存放小數的類型有浮點型:FLOAT, DOUBLE。

存儲日期時間:YEAR, TIME, DATE,  DATETIME, TIMESTAMP。

存儲字符型:CHAR, VARCHAR, TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT, ENUM, SET。

注意:存儲範圍越大,佔用的空間就越大,使用過程當中,根據使用場景,選擇最合理最合適的數據類型,而不是存儲範圍最大的數據類型。

 

數據表的操做

USE DATABASEName; //使用DATABASEName 數據庫

SELECT DATABASE(); //查看當前使用的數據庫名稱

建立數據庫語法:

CREATE TABLE [IF NOT EXISTS] TABLENAME (

  column_name data_type,

  ……

);

SHOW TABLES;  // 查看當前數據庫中是否有剛剛新建的表

SHOW TABLES FROM  otherDatabaseName;  // 查看其餘數據庫中的表 後面還能夠帶 LIKE, WHERE 模糊查詢或查詢條件 的通配符。

SHOW COLUMNS FROM tableName; // 查看錶中的列

記錄操做

  INSERT

    INSERT INTO tb1 [column_name, ……] VALUES(val, ……);  // 如何前面的列名省略,則全部字段所有賦值,若是隻給部分字段賦值,則必須制定列名

  SELECT

    SELECT expr, … FROM tableName;  //查詢表中的記錄,證實記錄是否存在

  NULL, NOT NULL 

    容許爲空或非空約束指定字段在數據錄入的時候是否爲空,兩者只能選其一做用一個字段。不爲空的字段在錄入數據的時候必須爲其賦值。

  AUTO_INCREMENT

    保證記錄的惟一性,字段值不會重複,自動編號,且必須與主鍵組合使用,默認狀況下起始值爲1, 每次的增量爲1。能夠是整數,或者浮點數,浮點數的小數位數必須是0,好比float(7, 0), double(7, 0)。

  PRIMARY_KEY

    主鍵約束,每張表只能存在一個主鍵,主鍵保證記錄的惟一性,主鍵自動爲NOT NULL 。

  注意:auto_increment 必須與主鍵 primary_key 一塊兒使用,但主鍵 primary_key 不必定要與iauto_increment 一塊兒使用。

  UNIQUE_KEY

    惟一約束,能夠保證記錄的惟一性,惟一約束的字段能夠爲空值(NULL),每一張數據表能夠存放多個惟一約束。

  DEFAULT

    默認約束,當插入記錄時,若是沒有明確爲字段賦值,則自動賦予默認值。

  FOREIGN_KEY

    外鍵約束保持數據的一致性與完整性,實現一對一或一對多的關係。

    要求: 1,父表和子表必須使用相同的存儲引擎,並且禁止使用臨時表。

        2, 數據表的存儲引擎只能是InnoDB。

        3,外鍵列和參照列必須具備類似的數據類型。其中數字的長度或是否有符號位必須相同,而字符的長度則能夠不一樣。

        4,外鍵列和參照列必須建立索引,若是參照列不存在索引的話,Mysql 將自動建立索引。

  約束: 1,約束保證數據的完整性和一致性。

      2,約束分爲表級約束和列級約束(約束如何是針對一個字段就是列級,若是是針對兩個及以上的則爲表級約束)。

      3,約束類型包括: NOT NULL(非空約束), PRIMARY KEY(主鍵約束), UNIQUE KEY(惟一約束), DEFAULT(默認約束), FOREIGN KEY(外鍵約束)

  外鍵約束的參照操做:

    1,CASSADE:從父表刪除或更新且自動刪除或更新子表中匹配的行。

    2,SET NULL:從父表刪除或更新行,並設置子表中的外鍵列爲NULL.若是使用該選項,必須保證子表列沒有指定NOT NULL。

    3,RESTRICT:拒絕對父表的刪除或更新操做。

    4,NO ACTION:標準SQL的關鍵字,在mysql中與RESTRICT相同。

修改數據表

  ALTER TABLE tableName ADD [COLUMN] column_name column_definition [FIRST|AFTER col_name];  // 修改數據表,新增字段,能夠一次加一列,也能夠加多列,加多列不能夠指定位置關係,只能在原來數據表的下方。

  ALTER TABLE tableName DROP column_name;// 刪除數據表中的字段

修改列定義

  ALTER TABLE tableName MODIFY  [COLUMN] column_name column_definition [FIRST|AFTER col_name];

修改列名稱

  ALTER TABLE tableName CHANGE  [COLUMN] column_name column_definition [FIRST|AFTER col_name];

修改數據表名

  ALTER TABLE tbl_name TO new_tb1_name; // 會對錶的視圖或存儲過程有影響。

  UPDATE

    UPDATE tableName set col_name = value, … WHERE expr…;

    UPDATE table_references SET col_names = {expre1|DEFAULT} ... [WHERE(where_condition)];   //多表更新

  DELETE

    DELETE FROM tableName WHERE expr...;

  SELECT

    select 子查詢,是指出如今其餘sql 語句內的select子句;使用比較運算符的子查詢,=, >, <, >=, <=, <>, !=, <=>, 另外使用ANY, SOME, ALL 關鍵字修飾的比較運算符,使用 [NOT] IN 的子查詢,使用 [NOT] EXISTS 的子查詢;

    INSERT [INTO] tableName [(col_name, ...)] SELECT  ...   將查詢結果寫入到數據表

    CREATE ... SELECT...;   //建立數據表的同事將查詢結果寫入到數據表      CREATE TABLE [IF NOT EXISTS] tbl_name [(create_definition, ...)] select_statement

  WHERE,  LIKE, GROUP BY, HAVING, ORDER BY[]

 

表的鏈接誒類型

  INNER JOIN, LEFT JOIN, RIGHT JOIN, 使用ON關鍵字來設定鏈接條件,也可使用WHERE 來代替,一般使用ON關鍵字來設定鏈接條件,使用WHERE關鍵字進行結果集記錄的過濾。

  內鏈接,顯示左表及右表符合連接條件的記錄,取交集。

  左鏈接,顯示左表的所有記錄及右表符合鏈接條件的記錄。

  右鏈接,顯示右表中的所有記錄及左表符合鏈接條件的記錄。

mysql數據庫函數分類

  1,字符函數

    CONCAT()   //字符鏈接

    CONCAT_WS()   //使用指定的分隔符進行字符鏈接

    FORMAT()  //數字格式化

    LOWER()  //轉換成小寫字母

    UPPER()  //轉換成大寫字母

    LEFT()  //獲取左側字符

    RIGHT()  //獲取右側字符

    LENGTH()  //獲取字符串長度

    LTRIM()  //刪除前導空格

    RTRIM() //刪除後續空格

    TRIM()  //刪除前導和後續空格

    SUBSTRING()  //字符串截取

    [NOT] LIKE  //模式匹配

    REPLACE()  //字符串替換    

  2,數值運算符與函數

    CEIL()  //進一取整

    DIV()  //整數除法

    FLOOR()  //舍一取整

    MOD()  //取餘數(取模)

    POWER()  //冪運算

    ROUND()  //四捨五入

    TRUNCATE()  //數字截取

  3,比較運算符與函數

    [NOT] BETWEN ... AND ...  //[不]在範圍以內

    [NOT] IN()   //[不]在列出值範圍內

    IS [NOT] NULL  //[不]爲空

  4,日期時間函數

    NOW()  //當前日期和時間

    CURDATE()  //當前日期

    CURTIME()  //當前時間

    DATE_ADD()  //日期變化

    DATEDIFF()  //日期差值

    DATE_FORMAT()  //日期格式化

  5,信息函數

    CONNECTION_ID()  //鏈接ID

    DATABASE()  //當前數據庫

    LAST_INSERT_ID()  //最後插入記錄的ID號

    USER()  //當前用戶

    VERSION()  //版本信息

  6,聚合函數

    AVG()  //平均值

    COUNT()  //計數

    MAX()  //最大值

    MIN()  //最小值

    SUM()  //求和

  7,加密函數

    MD5()  //信息摘要算法  web頁面應用

    PASSWORD() //密碼算法  mysql 用戶密碼修改

自定義函數

    CREATE FUNCTION function_name([params  params_type, ...]) RETURNS {STRING|INTEGER|REAL|DECIMAL} RETURN routine_body

    如:建立一個日期格式化的函數

      create function f1() returns varchar(30)

      return date_format(now(), '%Y年%m月%d日 %H點:%i分:%s秒');

    調用函數:select f1();

    如:建立一個求兩個參數平均值的函數

      create function f2(num1 smallint unsigned, num2 smallint unsigned)

      returns float(10, 2)

      return (num1+num2)/2;

    調用函數:select f2(7, 8);

    注意:參數和返回值。

     關於函數體:

      1,函數體由合法的SQL語句構成

      2,函數體能夠是簡單的SELECT或INSERT語句

      3,函數體若是爲複合結構則使用BEGIN...END語句

      4,複合機構能夠包含聲明,循環,控制結構;

存儲過程

  存儲過程是SQL語句和控制語句的預編譯集合,以一個名詞存儲並做爲一個單元處理。

   優勢:1,加強SQL語句的功能和靈活性;2,實現較快的執行速度;3,減小了網絡流量;

   CREATE  [definer = {user|CURRENT_USER}] 

   PROCEDURE proc_name ([proc_parameter [, ...]])

   [characteristic ...] routine_body

 

   proc_parameter: [ IN | OUT | INOUT ]  param_name type   注意:IN ,表示該參數的值必須在調用存儲過程時指定; OUT,表示該參數的值能夠被存儲過程改變,而且能夠返回;INOUT,表示該參數的調用時指定,而且能夠被改變和返回.

MySQL存儲引擎

  MySQL能夠將。數據以不一樣的技術存儲在文件(內存)中,這種技術就稱爲存儲引擎。每一種存儲引擎使用不一樣的存儲機制、索引技巧、鎖定水平,最終提供普遍且不一樣的功能。

   併發控制:

    - 當多個鏈接對記錄進行修改時保證數據的一致性和完整性。

   鎖:

    -共享鎖(讀鎖):在同一時間段內,多個用戶能夠讀取同一個資源,讀取過程當中數據不會發生任何變化。

    -排他鎖(寫鎖):在任什麼時候候只能有一個用戶寫入資源,當進行寫鎖時會阻塞其餘的讀鎖或者寫鎖操做。

   鎖顆粒:

    -表鎖:是一種開銷最小的鎖策略。對一張表進行加鎖處理。

    -行鎖:是一種開銷最大的鎖策略。可能對錶中的每一行記錄進行加鎖處理。

   事務處理:

    -事務用語保證數據庫的完整性;

    特性:原子性,一致性,隔離性,持久性。

   外鍵:

    -是保證數據一致性的策略。

   索引:

    -是對數據表中的一列或多謝的值進行排序的一種結構。

kMySQL的存儲引擎種類:

     -MyISAM:

     -InnoDB

     -Memory

     -CSV

     -Archive

    注意:不一樣的存儲引擎,對事務的支持,鎖的策略,外鍵,數據壓縮,存儲內存是不同的。

相關文章
相關標籤/搜索