Mysql 學習整理

1 建立數據庫數據庫

1.1數據庫基本結構數據結構

  數據庫:數據庫是表的集合,帶有相關的數據。 app

  表:一個表是多個字段的集合。函數

  字段:一個字段是一列數據,由字段名和記錄組成測試

1.2建立數據庫大數據

  create database 數據庫名稱;ui

    例:建立名爲test的測試數據庫blog

      create database test;排序

1.3查看建立好的數據庫:圖片

  show create database 數據庫名稱; 

    例: 查看建立好的test數據庫

      show create database test;
1.4查看全部數據庫列表:show databases;


1.5 使用數據庫:

  use 數據庫名稱;

    例: 使用建立好的test數據庫

      use test;
1.6 刪除數據庫:

  drop database 數據庫名稱;

     例: 刪除建立好的test數據庫

       drop database test;

2   建立數據表

  – 數據庫是由多個數據表構成的

  – 每張數據表存儲多個字段

  – 每一個字段由不一樣的字段名及記錄構成,每一個字段有本身的數據結構及約束條件

2.1 建立數據表:

  create table 表名(…);

  – 例:用SQL語句建立如下員工信息表

  1. 使用test數據庫: use test;  

  2. 建立員工信息表:

    create table emp(

      depid char(3),

      depname varchar(20),

      peoplecount int   

      );

  3. 查看錶是否建立成功: show tables;

  4. 刪除數據表: drop table emp;

 3 數據類型

  3.1數值類型: 

    – INT:有符號的和無符號的。有符號大小-2147483648~2147483647,無符號大 0~4294967295。寬度最多爲11個數字- int(11)

    – TINYINT:有符號的和無符號的。有符號大小-128~127,無符號大小爲0~255。寬 度最多爲4個數字- tinyint(4)

    – SMALLINT:有符號的和無符號的。有符號大小-32768~32767,無符號大小爲 0~65535。寬度最多爲6個數字- smallint(6)

    – MEDIUMINT:有符號的和無符號的。有符號大小-8388608~8388607,無符號大 小爲0~16777215。寬度最多爲9個數字- mediumint(9)

    – BIGINT:有符號的和無符號的。寬度最多爲20個數字- bigint(20)

    – FLOAT(M,D):只能爲有符號的。默認爲(10,2)

    – DOUBLE(M,D):只能爲有符號的。默認爲(16,4)

    – DECIMAL(M,D):只能爲有符號的。

  3.2日期和時間類型 :

    – DATE:YYYY-MM-DD格式,在1000-01-01和9999-12-31之間。例如: 1973-12-30

    – DATETIME:YYYY-MM-DD HH:MM:SS格式,位於1000-01-01 00:00:00 和9999-12-31 23:59:59之間。例如:1973-12-30 15:30:00
    – TIMESTAMP:稱爲時間戳,在1970-01-01 00:00:00和2037-12-31 23:59:59之間。

        例如,1973年12月30日下午15:30,則在數據庫中存儲 爲:19731230153000
    – TIME: 以HH:MM:SS格式, -838:59:59~838:59:59
    – YEAR(2|4): 以2位或4位格式存儲年份值。若是是2位,1970~2069;如 果是4位,1901~2155。默認長度爲4

  3.3 字符串類型 :

    – CHAR(M):固定長度字符串,長度爲1-255。若是內容小於指定長度, 右邊填充空格。若是不指定長度,默認爲1
    – VARCHAR(M): 可變長度字符串,長度爲1-255。定義該類型時必須 指定長度
    – BLOB 或TEXT:最大長度65535。存儲二進制大數據,如圖片。不能 指定長度。二者區別:BLOB 大小寫敏感
    – TINYBLOB 和TINYTEXT:最大長度255。不能指定長度。
    – MEDIUMBLOB 或MEDIUMTEXT:最大長度16777215 字符
    – LONGBLOB 或LONGTEXT:最大長度4294967295 字符
    – ENUM:枚舉。例如:ENUM(‘A’,’B’,’C’)。NULL 值也可

4 約束條件

  – 約束是在表上強制執行的數據檢驗規則
  – 用來保證建立的表的數據完整和正確
  – MySQL數據庫經常使用約束條件

約束條件  說明 語法
PRIMARY KEY 主鍵約束 字段名 數據類型 PRIMARY KEY
NOT NULL 非空約束 字段名 數據類型 NOT NULL
UNIQUE 惟一約束 字段名 數據類型 UNIQUE
AUTO_INCREMENT 自增字段 字段名 數據類型 AUTO_INCREMENT
DEFAULT 默認值  字段名 數據類型 DEFAULT 默認值

4.1 主鍵約束:

    保證表中每行記錄都不重複 主鍵,又稱爲」主碼」,是數據表中一列或多列的組合。

    鍵約束要求主鍵列的數據必須是 惟一的,而且不容許爲空。

    使用主鍵,可以唯一地標識表中的一條記錄,而且能夠結合外鍵 來 定義不一樣數據表之間的關係,還能夠加快數據庫查詢的速度。

    主鍵分爲兩種類型:

      -- 單字段主鍵:

        create table emp(
          depid char(3) primary key,

          depname varchar(20),

          peoplecount int

          );
      -- 多字段聯合主鍵:

        create table emp(

          depid char(3),

          depname varchar(20),

          peoplecount int,

          primary key(depname,depid)

          );

4.2非空約束

   指的是字段的值不能爲空:

    – 語法:字段名 字段類型 not null
      create table emp(
        depid char(3) primary key,

        depname varchar(20) not null,

        peoplecount int
        );

4.3惟一性約束

    要求該列的值必須是惟一的:
    – 容許爲空,但只能出現一個空值;

    – 一個表中能夠有多個字段聲明爲惟一的;

    – 惟一約束確保數據表的一列或幾列不出現重複值;

    – 語法:字段名 數據類型 unique
      create table emp(
        depid char(3) primary key,

        depname varchar(20) not null,

        peoplecount int unique
        );

4.4默認約束

  指定某個字段的默認值:
  – 若是新插入一條記錄時沒有爲默認約束字段賦值,那麼系統就會自動爲 這個字段賦值爲默認約束設定的值

  – 語法: 字段名 數據類型 default 默認值
    create table emp(
      depid char(3) primary key,

      depname varchar(20) not null default '-',

      peoplecount int unique
      );

4.5自增字段

  一個表只能有一個自增字段,自增字段必須爲主鍵的一部分。默認狀況下 從1開始自增
  例: 建立含各類約束條件的數據表
    CREATE TABLE example(

      id INT PRIMARY KEY AUTO_INCREMENT, -- 建立整數型自增主鍵

      name VARCHAR(4) NOT NULL, -- 建立非空字符串字段

      math INT DEFAULT 0, -- 建立默認值爲0的整數型字段

      minmax FLOAT UNIQUE – 建立惟一約束小數型字段

       );

5 導入數據

  5.1 用insert into語句爲表插入數據

  語法: insert into 表名(字段1,字段2,…) values ……

    -- 插入數據

      insert into fruits(f_id,s_id,f_name,f_price)

      values('a1',101,'apple',5.2),

          ('b1',101,'blackberry',10.2),

          ('bs1',102,'orange',11.2),

          ('bs2',105,'melon',8.2),

          ('t1',102,'banana',10.3),

          ('t2',102,'grape',5.3);

5.2 導入外部數據

   導入外部文本文件:
    -- 爲Monthly_Indicator表導入外部txt文件

      load data local infile '文件路徑.txt’                  -- 路徑不能有中文,複製的路徑的的"\"應改成"\\"或''/''

      into table Monthly_Indicator                           -- 導入表..中

      fields terminated by '\t'            -- 字段間的分隔符: '\t'用空格分隔的   , '\,'用逗號分隔的

      ignore 1 lines;               -- 忽略第一行。若是源表中第一行爲表頭行,則忽略第一行

5.3 檢查表數據

  對導入表中的數據通常從導入內容、導入數據總行數以及表結構三方面進行檢查

    -- 檢查導入內容                                       Select * from Monthly_Indicator;
    -- 檢查導入數據總行數                            Select count(*) from Monthly_Indicator;
    -- 檢查表結構                                          Desc Monthly_Indicator;

6 修改數據表      alter table...

  修改表指的是修改數據庫中已經存在的數據表的結構:

    – MySQL使用alter table語句修改數據表結構,

                    包括: 修改表名,修改字段數據類型或 字段名,增長和刪除字段,修改字段的排列位置等
    – 例:將數據表emp更名爲empdep                                                                                        alter table emp rename empdep;
    – 例:將數據表empdep中depname字段的數據類型由varchar(20)修改爲varchar(30)           alter table empdep modify depname varchar(30);
    – 例:將數據表empdep中depname字段的字段名改成dep                                                     alter table empdep change depname dep varchar(30);

    – 例:將數據表empdep中dep字段的字段名改回爲depname,並將該字段數 據類型該回爲varchar(20)

                                            alter table empdep change dep depname varchar(20);
    – 例:爲數據表empdep添加新字段maname,新字段數據類型爲varchar(10), 約束條件爲非空

                                            alter table empdep add maname varchar(10) not null;
    – 例:將數據表empdep中maname字段的排列順序改成第一位              alter table empdep modify maname varchar(10) first;
    – 例:將數據表emp中maname字段的排列順序改到depid字段以後                                  alter table empdep modify maname varchar(10) after depid;
    – 例:刪除maname字段                              alter table empdep drop maname;

7 修改記錄

    update…set:爲字段賦值,語法爲update 表名 set 字段名 = 值;

        例: 使用concat函數在f_name字段值前添加'fruit_’信息

            update fruits set f_name = concat('fruit_',f_name);

    delete: 刪除數據表中的數據,

    語法爲DELETE FROM 表名 [WHERE Clause], 若是省略where的話則刪除表中全部數據記錄

      例: 刪除f_id爲'b5'的數據記錄

          delete from fruits where f_id = 'b5';

8 SELECT語句

  8.1SELECT語句的操做符

    - 算術操做符 +(加號)、-(減號)、*(乘號)和 /(除號)。
    - 比較操做符 =(等於)、>(大於)、<(小於)、<=(小於等於)、>=(大於等於)、!= 或<> (不等於)、!>(不大於)和 !<(不小於),共9種操做符。
    - 邏輯操做符

  8.2 聚合類函數

  

 

 

 

  8.3SQL的數據查詢功能

  SELECT語句的語法

    SELECT〈目標列組〉

       FROM〈數據源〉

      [WHERE〈元組選擇條件〉]

      [GROUP BY〈分列組〉[HAVING 〈組選擇條件〉]]

       [ORDER BY〈排序列1〉〈排序要求1〉 [,…n]];
    -- 對大氣質量表進行有選擇的查詢

      select city_name, avg(pm25), avg(pm10) from Monthly_Indicator

        where pm25 > 50

        group by city_name, month_key having city_name <> '北京’

        order by avg(pm25) desc;

  8.4 聯接查詢

    聯接查詢,是將兩個或多個表橫向聯接,再進行查詢,通常爲1表出維度,多表出值

    按聯接方向可分爲: 左聯接,右聯接,內聯接

    8.4.1 內鏈接: 按照鏈接條件合併兩個表,返回知足條件的行。

        SELECT <select_list> FROM A INNER

        JOIN B ON A.Key = B.Key;

    8.4.2左鏈接: 結果中除了包括知足鏈接條件的行外,還包括左表的全部行

        SELECT <select_list> FROM A

        LEFT JOIN B ON A.Key = B.Key;

    8.4.3 右鏈接: 結果中除了包括知足鏈接條件的行外,還包括右表的全部行

        SELECT <select_list> FROM A

        RIGHT JOIN B ON A.Key = B.Key;

  8.5 表格合併與聯合查詢

    表格合併可理解爲在前表基礎上增長記錄,即若是字段名相同,把後表的記錄增長到前表記錄中,若是字段名不一樣,則自動增長字段名,若是前表中無後表的字段名,再自動爲空值。

  union: 用於合併兩個或多個 SELECT 語句的結果集,並消去表中任何重複行。

    例: 用union合併t1與t2表

      select t1.*  from t1

      union

      select t2.* from t2;

  union all:用於合併兩個或多個 SELECT 語句的結果集,保留重複行。

    例: 用union all合併t1與t2表

      select t1.* from t1

      union all

      select t2.* from t2;

  8.6查詢操做符列表  

 

 

       distinct操做符

        distinct: 用來消除重複記錄。

          例: 查詢fruits表中全部不重複的s_id

            select distinct s_id from fruits;

  8.7 子查詢

    子查詢:寫在()中,把內層查詢結果當作外層查詢參照的數據表來用
      例: 用in操做符與子查詢語句來查詢全部f_id對應的f_price在10元到20元之間的水果記錄

        select * from fruits where f_id in

        (select f_id from fruits where f_price between 10 and 20);
      例: 用any操做符與子查詢語句來查詢全部f_id對應的f_price在10元到20元之間的水果記錄

        select * from fruits where f_id = any

        (select f_id from fruits where f_price between 10 and 20);
      例: 用all操做符與子查詢語句來查詢全部f_price大於20元的水果記錄

        select * from fruits where f_price > all

        (select f_price from fruits where f_price < =20);
      例: 用exists操做符與子查詢語句來查詢是否存在f_price大於30元的水果記錄

        select * from fruits where exists

        (select * from fruits where f_price > 30);  

  8.8 as重命名與limit限制查詢結果行數

    as:能夠將表名從新命名爲別的名稱使用,只在查詢中有效
      例: 用as將fruits表名重命名爲f後使用

        select f.* from fruits as f;
    limit:查詢後只顯示limit指定數字的行數結果
      例: 顯示f_price金額最大的前三名水果記錄

        select * from fruits

        order by f_price desc

        limit 3;

9 經常使用函數

  9.1經常使用的數學函數:主要用於處理數字值

 

 

   9.2經常使用的字符串函數:主要用於處理字符串值 

 

 

   9.3日期及時間函數:用來處理日期時間型數據 

 

 

   9.4其餘函數:除上述函數以外的一些經常使用函數

  

 

 

     ※GROUP_CONCAT()函數:常與關鍵字 GROUP BY 一塊兒使用,可以將分組後指定的字段值都顯示出來。 

        例: 使用group_concat函數查詢不一樣s_id下對應的全部f_name信息
        SELECT s_id, GROUP_CONCAT(f_name) FROM fruits

        GROUP BY s_id;

    CAST函數語法規則是:Cast(字段名 as 轉換的類型 ),其中類型能夠爲:

      CHAR[(N)] 字符型

      DATE 日期型

      DATETIME 日期和時間型

      DECIMAL 小數型

      SIGNED 整數型

      TIME 時間型
    將fruits表的f_price 轉換爲 1位小數

      select cast(f_price as decimal(10,1)) as f_price from fruits;

相關文章
相關標籤/搜索