MySQL深刻淺出(一):SQL基礎、數據類型、運算符

1、SQL基礎

    安裝MySQL時系統自動建立的數據庫,其各自功能以下:html

  • information_schemm:主要存儲了系統中的一些數庫對象信息,好比用戶表信息列信息。權限信息,字符集信息、分區信息等
  • cluster存儲了系統的集羣信息
  • mysql存儲了系統的用戶權限信息
  • test系統自動建立的測試數搖庫,任何用戶均可以使用

1.1 SQL分類

  1. DDL( Data Definition Langnages)語句:數據定義語言,這些語句定義了不一樣的數據段、數據庫,表、列、索引等數據庫對象。經常使用的語句關鍵字主要包括 create、drop、alter
  2. DML( Data Manipulation Language)語句:數據操縱語句,用於添加,刪除,更新和查詢數據庫記錄,並檢查數據完整性。經常使用的語句關鍵字主要包括insert、delete、update和 select
  3. DCL( Data Control Languane)語句:數據控制語句,這些語句定義了數據庫、表、字段、用戶的訪問權限和安全級別。主要的語句關鍵字包括grant、revoke

1.2 DDL語句

1.2.1 數據庫操做

mysql -uroot -p
create database dbname; 
use dbname; //選擇數據庫
show tables; //查看數據庫中建立的全部表
drop database dbname;

1.2.2 表操做

CREATE  TABLE `user`(
  `id` tinyint(1) unsigned NOT NULL auto_increment comment '主鍵',
  `name` VARCHAR(20) NOT NULL DEFAULT '',
  `image` VARCHAR(20) NOT NULL DEFAULT '',
  `type` tinyint(1) unsigned NOT NULL DEFAULT 0,
  `create_time` int(10) unsigned NOT NULL DEFAULT 0,
  `update_time` int(10) unsigned NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`)
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT charset=utf8 comment '用戶信息表';
desc table_name;//查看錶定義
show full columns from user;//查詢一張表的詳細信息(包括字段註釋,字段名稱,類型等)
drop table table_name;//刪除表
alter table table_name modify col_definition; // 修改表類型
alter table table_name change old_col_name col_definition; // 字段更名
alter table table_name add col_definition; // 增長表字段
alter table table_name add/modify/change ... [first|after col_name];//修改字段排列順序
alter table table_name drop col_name; //刪除表字段
alter table table_name rename new_table_name; //更改表名

1.3 DML語句

insert into table_name(field1,field2,...,fieldn) values(value1,value2,...,valuen)[,(value1,value2,...,valuen)]; // (批量)插入記錄

insert into table_name set col1_name=value1,...;

update table_name set field1=value1,field2=value2....[where condition]; // 更新記錄

delete from table_name [where condition]; // 刪除記錄

select ... [limit offset_start,row_count]; 
//offset_start:起始偏移量(默認爲0),row_count:顯示的行數。分頁顯示:limit + order by

    聚合函數:mysql

select [field1,field2...] fun_name 
from table_name 
[where where_condition] 
[group by field1,...] 
[with rollup] 
[having where_condition]
  • fun_name表示要作的聚合操做,經常使用的有sum(求和)、count(*)(記錄數)、max(field)、
  • min(field)
  • group by關鍵字表示要進行分類聚合的字段
  • with rollup是可選語法,代表是否對分類聚合後的結果再彙總
  • having關鍵字表示對分類後的結果再進行條件的過濾

    注意:having是對聚合後的結果進行條件過濾,where是在聚合前就對記錄進行過濾sql

    clipboard.png

    clipboard.png

    clipboard.png

    Mysql Join語法解析與性能分析數據庫

1.4 查詢元數據信息

    MySQL5.0以後,提供了一個新的數據庫information_schema,用來記錄MySQL中的元數據信息。元數據指的是好比表名、列名、列類型、索引名等表的各類屬性名稱。它是一個虛擬數據庫,庫裏show tables顯示的各類‘表’也不是實際存在的物理表,而所有是視圖。
    下面列出一些比較經常使用的視圖:segmentfault

  • SCHEMATA:該表提供了當前 mysql實例中全部數據庫的信息, show databases的結果取之此表
  • TABLES:該表提供了關於數據庫中的的信息(包括視圖),詳細表述了某個表屬於哪一個schema、表類型、表引擎、建立時間等信息, show tables from schemaname的結果取之此表
  • COLUMNS:該表提供了表中的信息,詳細表述了某張表的全部列以及每一個列的信息, show columns from schemaname.tablename的結果取之此表
  • STATISTICS:該表提供了關於表索引的信息, show index from schemaname.tablename的結果取之此表

    場景示例:安全

  • 一、刪除數據庫下全部前綴爲tmp的表
select concat('drop table 數據庫名.', table_name,';') from information_schema.tables where table_schema='數據庫名' and table_name like 'tmp%';
  • 二、將數據庫下全部存儲引擎爲myisam的表改成innodb
select concat('alter table 數據庫名.', table_name, ' engine=innodb;') from information_schema.tables where table_schema='數據庫名' and engine='MyISAM';
  • 三、批量清空數據表
select concat('truncate table ',table_name,';') from information_schema.tables where table_schema='數據庫名';

2、數據類型

2.1 數值類型

    數值數據類型能夠大體劃分爲兩個類別,一個是整數,另外一個是小數
  clipboard.png函數

2.1.1 整數

    MySQL容許咱們指定數值字段中的值是否有正負之分(unsigned)或者用零填補(zerofill)和auto_increment屬性。性能

    MySQL 以一個可選的顯示寬度指示器的形式對 SQL 標準進行擴展(如 INT(6),6便是其寬度指示器,該寬度指示器並不會影響int列存儲字段的大小,也就是說,超過6位它不會自動截取,依然會存儲,只有超過它自己的存儲範圍纔會截取;此處寬度指示器的做用在於該字段是否有zerofill,若是有未滿6位的部分就會用0來填充)
    Tips:若是一個列指定爲zerofill,則MySQL自動爲該列添加unsigned屬性。測試

    auto_increment屬性:優化

  • 只用於整數類型
  • 一個表最多隻能有一個auto_increment
  • 該列應該定義爲not null,而且定義爲primary keyunique

2.1.2 小數

    小數類型能夠大體劃分爲兩個類別,一個是浮點數,另外一個是定點數

  1. 浮點數:float(單精度),double(雙精度)
  2. 定點數:decimal,在MySQL內部以字符串形式存放,比浮點數更精確,適合表示貨幣等高精度的數據

    float/double/decimal(M,D)M標度(整數位+小數位),D精度

    Tips:小數會自動四捨五入

2.2 日期時間類型

    clipboard.png

    TIMESTAMP的一個重要特色就是和時區相關,通常業務也能夠用int比較好,節約空間,存時間戳便可。

2.3 字符串類型

字符串類型

一個英文字符,佔用一個字節

漢字:

字符類型若爲 gbk,每一個字符最多佔 2個字節;
字符類型若爲 utf8,每一個字符最多佔 3個字節。
  • CHAR 和 VARCHAR 類型

    CHAR 類型用於定長字符串,而且必須在圓括號內用一個大小修飾符來定義。這個大小修飾符的範圍從 0-255。比指定長度大的值將被截短,而比指定長度小的值將會用空格做填補。

    CHAR 類型的一個變體是 VARCHAR 類型。它是一種可變長度的字符串類型,而且也必須帶有一個範圍指示器。

    CHAR 和 VARCHGAR 不一樣之處在於 MYSQL 數據庫處理這個指示器的方式:CHAR 把這個大小視爲值的大小,不長度不足的狀況下就用空格補足。而 VARCHAR 類型把它視爲最大值而且只使用存儲字符串實際須要的長度(增長一個額外字節來存儲字符串自己的長度)來存儲值。因此短於指示器長度的 VARCHAR 類型不會被空格填補,但長於指示器的值仍然會被截短。

3、運算符與經常使用函數

3.1 運算符

    clipboard.png

3.2 (流程)函數

    流程函數

    clipboard.png

select database()/version()/user(); // 查看當前數據庫/版本/用戶

下一篇:MySQL深刻淺出(二):索引的設計原則、SQL優化、MySQL日誌、備份與恢復

相關文章
相關標籤/搜索