記一次MySql的基本操作 (one)

                                             加油,給自己。

MySql 現在應該是使用到比較流行的關係型數據庫,除去那些非關係型數據庫。所以掌握好MySql的知識是很有必要的。 這裏的安裝什麼的可以參考之前的博客,好像之前有特意寫到過MySql在Linux上的安裝。如果是win10上的話,那就是一步一步的next,做一個utf8的設置就可以了,可視化界面的安裝還是比較簡單的。

 

 1 : 基本操作

win 上 : 

 net start mysql   啓動MySql服務

mysql -h 地址 -P 端口 -u 用戶名 -p 密碼  (如果是win10上的話,就需要mysql/bin做一個環境變量的配置,有點類似於Java那樣)
SHOW VARIABLES   顯示系統變量信息

 

 2 : 數據庫的操作

   /* 數據庫操作 */ ------------------
-- 查看當前數據庫
    SELECT DATABASE();
-- 顯示當前時間、用戶名、數據庫版本
    SELECT now(), user(), version();
-- 創建庫
    CREATE DATABASE[ IF NOT EXISTS] 數據庫名 數據庫選項
    數據庫選項:
        CHARACTER SET charset_name
        COLLATE collation_name
-- 查看已有庫
    SHOW DATABASES[ LIKE 'PATTERN']
-- 查看當前庫信息
    SHOW CREATE DATABASE 數據庫名
-- 修改庫的選項信息
    ALTER DATABASE 庫名 選項信息
-- 刪除庫
    DROP DATABASE[ IF EXISTS] 數據庫名
        同時刪除該數據庫相關的目錄及其目錄內容

 

 3 : 表的操作

  -- 創建表
    CREATE [TEMPORARY] TABLE[ IF NOT EXISTS] [庫名.]表名 ( 表的結構定義 )[ 表選項]
        每個字段必須有數據類型
        最後一個字段後不能有逗號
        TEMPORARY 臨時表,會話結束時表自動消失
        對於字段的定義:
            字段名 數據類型 [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'string']
-- 表選項
    -- 字符集
        CHARSET = charset_name
        如果表沒有設定,則使用數據庫字符集
    -- 存儲引擎
        ENGINE = engine_name
        表在管理數據時採用的不同的數據結構,結構不同會導致處理方式、提供的特性操作等不同
        常見的引擎:InnoDB MyISAM Memory/Heap BDB Merge Example CSV MaxDB Archive
        不同的引擎在保存表的結構和數據時採用不同的方式
        MyISAM表文件含義:.frm表定義,.MYD表數據,.MYI表索引
        InnoDB表文件含義:.frm表定義,表空間數據和日誌文件
        SHOW ENGINES -- 顯示存儲引擎的狀態信息
        SHOW ENGINE 引擎名 {LOGS|STATUS} -- 顯示存儲引擎的日誌或狀態信息
    -- 自增起始數
        AUTO_INCREMENT = 行數
    -- 數據文件目錄
        DATA DIRECTORY = '目錄'
    -- 索引文件目錄
        INDEX DIRECTORY = '目錄'
    -- 表註釋
        COMMENT = 'string'
    -- 分區選項
        PARTITION BY ... (詳細見手冊)
-- 查看所有表
    SHOW TABLES[ LIKE 'pattern']
    SHOW TABLES FROM  庫名
-- 查看錶機構
    SHOW CREATE TABLE 表名 (信息更詳細)
    DESC 表名 / DESCRIBE 表名 / EXPLAIN 表名 / SHOW COLUMNS FROM 表名 [LIKE 'PATTERN']
    SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern']
-- 修改表
    -- 修改表本身的選項
        ALTER TABLE 表名 表的選項
        eg: ALTER TABLE 表名 ENGINE=MYISAM;
    -- 對錶進行重命名
        RENAME TABLE 原表名 TO 新表名
        RENAME TABLE 原表名 TO 庫名.表名 (可將表移動到另一個數據庫)
        -- RENAME可以交換兩個表名
    -- 修改表的字段機構(13.1.2. ALTER TABLE語法)
        ALTER TABLE 表名 操作名
        -- 操作名
            ADD[ COLUMN] 字段定義       -- 增加字段
                AFTER 字段名          -- 表示增加在該字段名後面
                FIRST               -- 表示增加在第一個
            ADD PRIMARY KEY(字段名)   -- 創建主鍵
            ADD UNIQUE [索引名] (字段名)-- 創建唯一索引
            ADD INDEX [索引名] (字段名) -- 創建普通索引
            DROP[ COLUMN] 字段名      -- 刪除字段
            MODIFY[ COLUMN] 字段名 字段屬性     -- 支持對字段屬性進行修改,不能修改字段名(所有原有屬性也需寫上)
            CHANGE[ COLUMN] 原字段名 新字段名 字段屬性      -- 支持對字段名修改
            DROP PRIMARY KEY    -- 刪除主鍵(刪除主鍵前需刪除其AUTO_INCREMENT屬性)
            DROP INDEX 索引名 -- 刪除索引
            DROP FOREIGN KEY 外鍵    -- 刪除外鍵
-- 刪除表
    DROP TABLE[ IF EXISTS] 表名 ...
-- 清空表數據
    TRUNCATE [TABLE] 表名
-- 複製表結構
    CREATE TABLE 表名 LIKE 要複製的表名
-- 複製表結構和數據
    CREATE TABLE 表名 [AS] SELECT * FROM 要複製的表名
-- 檢查表是否有錯誤
    CHECK TABLE tbl_name [, tbl_name] ... [option] ...
-- 優化表
    OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...
-- 修復表
    REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... [QUICK] [EXTENDED] [USE_FRM]
-- 分析表
    ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...

  4 : 傳說中的增刪改查哈哈哈

   /* 數據操作 */ ------------------
-- 增
    INSERT [INTO] 表名 [(字段列表)] VALUES (值列表)[, (值列表), ...]
        -- 如果要插入的值列表包含所有字段並且順序一致,則可以省略字段列表。
        -- 可同時插入多條數據記錄!
        REPLACE 與 INSERT 完全一樣,可互換。
    INSERT [INTO] 表名 SET 字段名=值[, 字段名=值, ...]
-- 查
    SELECT 字段列表 FROM 表名[ 其他子句]
        -- 可來自多個表的多個字段
        -- 其他子句可以不使用
        -- 字段列表可以用*代替,表示所有字段
-- 刪
    DELETE FROM 表名[ 刪除條件子句]
        沒有條件子句,則會刪除全部
-- 改
    UPDATE 表名 SET 字段名=新值[, 字段名=新值] [更新條件]

  

 5 :類型

 /* 數據類型(列類型) */ ------------------
1. 數值類型
-- a. 整型 ----------
    類型         字節     範圍(有符號位)
    tinyint     1字節    -128 ~ 127      無符號位:0 ~ 255
    smallint    2字節    -32768 ~ 32767
    mediumint   3字節    -8388608 ~ 8388607
    int         4字節
    bigint      8字節
    int(M)  M表示總位數
    - 默認存在符號位,unsigned 屬性修改
    - 顯示寬度,如果某個數不夠定義字段時設置的位數,則前面以0補填,zerofill 屬性修改
        例:int(5)   插入一個數'123',補填後爲'00123'
    - 在滿足要求的情況下,越小越好。
    - 1表示bool值真,0表示bool值假。MySQL沒有布爾類型,通過整型0和1表示。常用tinyint(1)表示布爾型。
-- b. 浮點型 ----------
    類型             字節     範圍
    float(單精度)     4字節
    double(雙精度)    8字節
    浮點型既支持符號位 unsigned 屬性,也支持顯示寬度 zerofill 屬性。
        不同於整型,前後均會補填0.
    定義浮點型時,需指定總位數和小數位數。
        float(M, D)     double(M, D)
        M表示總位數,D表示小數位數。
        M和D的大小會決定浮點數的範圍。不同於整型的固定範圍。
        M既表示總位數(不包括小數點和正負號),也表示顯示寬度(所有顯示符號均包括)。
        支持科學計數法表示。
        浮點數表示近似值。
-- c. 定點數 ----------
    decimal -- 可變長度
    decimal(M, D)   M也表示總位數,D表示小數位數。
    保存一個精確的數值,不會發生數據的改變,不同於浮點數的四捨五入。
    將浮點數轉換爲字符串來保存,每9位數字保存爲4個字節。
2. 字符串類型
-- a. char, varchar ----------
    char    定長字符串,速度快,但浪費空間
    varchar 變長字符串,速度慢,但節省空間
    M表示能存儲的最大長度,此長度是字符數,非字節數。
    不同的編碼,所佔用的空間不同。
    char,最多255個字符,與編碼無關。
    varchar,最多65535字符,與編碼有關。
    一條有效記錄最大不能超過65535個字節。
        utf8 最大爲21844個字符,gbk 最大爲32766個字符,latin1 最大爲65532個字符
    varchar 是變長的,需要利用存儲空間保存 varchar 的長度,如果數據小於255個字節,則採用一個字節來保存長度,反之需要兩個字節來保存。
    varchar 的最大有效長度由最大行大小和使用的字符集確定。
    最大有效長度是65532字節,因爲在varchar存字符串時,第一個字節是空的,不存在任何數據,然後還需兩個字節來存放字符串的長度,所以有效長度是64432-1-2=65532字節。
    例:若一個表定義爲 CREATE TABLE tb(c1 int, c2 char(30), c3 varchar(N)) charset=utf8; 問N的最大值是多少? 答:(65535-1-2-4-30*3)/3
-- b. blob, text ----------
    blob 二進制字符串(字節字符串)
        tinyblob, blob, mediumblob, longblob
    text 非二進制字符串(字符字符串)
        tinytext, text, mediumtext, longtext
    text 在定義時,不需要定義長度,也不會計算總長度。
    text 類型在定義時,不可給default值
-- c. binary, varbinary ----------
    類似於char和varchar,用於保存二進制字符串,也就是保存字節字符串而非字符字符串。
    char, varchar, text 對應 binary, varbinary, blob.
3. 日期時間類型
    一般用整型保存時間戳,因爲PHP可以很方便的將時間戳進行格式化。
    datetime    8字節    日期及時間     1000-01-01 00:00:00 到 9999-12-31 23:59:59
    date        3字節    日期         1000-01-01 到 9999-12-31
    timestamp   4字節    時間戳        19700101000000 到 2038-01-19 03:14:07
    time        3字節    時間         -838:59:59 到 838:59:59
    year        1字節    年份         1901 - 2155
datetime    YYYY-MM-DD hh:mm:ss
timestamp   YY-MM-DD hh:mm:ss
            YYYYMMDDhhmmss
            YYMMDDhhmmss
            YYYYMMDDhhmmss
            YYMMDDhhmmss
date        YYYY-MM-DD
            YY-MM-DD
            YYYYMMDD
            YYMMDD
            YYYYMMDD
            YYMMDD
time        hh:mm:ss
            hhmmss
            hhmmss
year        YYYY
            YY
            YYYY
            YY
4. 枚舉和集合
-- 枚舉(enum) ----------
enum(val1, val2, val3...)
    在已知的值中進行單選。最大數量爲65535.
    枚舉值在保存時,以2個字節的整型(smallint)保存。每個枚舉值,按保存的位置順序,從1開始逐一遞增。
    表現爲字符串類型,存儲卻是整型。
    NULL值的索引是NULL。
    空字符串錯誤值的索引值是0。
-- 集合(set) ----------
set(val1, val2, val3...)
    create table tab ( gender set('男', '女', '無') );
    insert into tab values ('男, 女');
    最多可以有64個不同的成員。以bigint存儲,共8個字節。採取位運算的形式。
    當創建表時,SET成員值的尾部空格將自動被刪除。

 

 6 : 字符編碼類型

  /* 字符集編碼 */ ------------------
-- MySQL、數據庫、表、字段均可設置編碼
-- 數據編碼與客戶端編碼不需一致
SHOW VARIABLES LIKE 'character_set_%'   -- 查看所有字符集編碼項
    character_set_client        客戶端向服務器發送數據時使用的編碼
    character_set_results       服務器端將結果返回給客戶端所使用的編碼
    character_set_connection    連接層編碼
SET 變量名 = 變量值
    SET character_set_client = gbk;
    SET character_set_results = gbk;
    SET character_set_connection = gbk;
SET NAMES GBK;  -- 相當於完成以上三個設置
-- 校對集
    校對集用以排序
    SHOW CHARACTER SET [LIKE 'pattern']/SHOW CHARSET [LIKE 'pattern']   查看所有字符集
    SHOW COLLATION [LIKE 'pattern']     查看所有校對集
    CHARSET 字符集編碼     設置字符集編碼
    COLLATE 校對集編碼     設置校對集編碼

 

 7  : 列約束

 /* 列屬性(列約束) */ ------------------
1. PRIMARY 主鍵
    - 能唯一標識記錄的字段,可以作爲主鍵。
    - 一個表只能有一個主鍵。
    - 主鍵具有唯一性。
    - 聲明字段時,用 primary key 標識。
        也可以在字段列表之後聲明
            例:create table tab ( id int, stu varchar(10), primary key (id));
    - 主鍵字段的值不能爲null。
    - 主鍵可以由多個字段共同組成。此時需要在字段列表後聲明的方法。
        例:create table tab ( id int, stu varchar(10), age int, primary key (stu, age));
2. UNIQUE 唯一索引(唯一約束)
    使得某字段的值也不能重複。
3. NULL 約束
    null不是數據類型,是列的一個屬性。
    表示當前列是否可以爲null,表示什麼都沒有。
    null, 允許爲空。默認。
    not null, 不允許爲空。
    insert into tab values (null, 'val');
        -- 此時表示將第一個字段的值設爲null, 取決於該字段是否允許爲null
4. DEFAULT 默認值屬性
    當前字段的默認值。
    insert into tab values (default, 'val');    -- 此時表示強制使用默認值。
    create table tab ( add_time timestamp default current_timestamp );
        -- 表示將當前時間的時間戳設爲默認值。
        current_date, current_time
5. AUTO_INCREMENT 自動增長約束
    自動增長必須爲索引(主鍵或unique)
    只能存在一個字段爲自動增長。
    默認爲1開始自動增長。可以通過表屬性 auto_increment = x進行設置,或 alter table tbl auto_increment = x;
6. COMMENT 註釋
    例:create table tab ( id int ) comment '註釋內容';
7. FOREIGN KEY 外鍵約束
    用於限制主表與從表數據完整性。
    alter table t1 add constraint `t1_t2_fk` foreign key (t1_id) references t2(id);
        -- 將表t1的t1_id外鍵關聯到表t2的id字段。
        -- 每個外鍵都有一個名字,可以通過 constraint 指定
    存在外鍵的表,稱之爲從表(子表),外鍵指向的表,稱之爲主表(父表)。
    作用:保持數據一致性,完整性,主要目的是控制存儲在外鍵表(從表)中的數據。
    MySQL中,可以對InnoDB引擎使用外鍵約束:
    語法:
    foreign key (外鍵字段) references 主表名 (關聯字段) [主表記錄刪除時的動作] [主表記錄更新時的動作]
    此時需要檢測一個從表的外鍵需要約束爲主表的已存在的值。外鍵在沒有關聯的情況下,可以設置爲null.前提是該外鍵列,沒有not null。
    可以不指定主表記錄更改或更新時的動作,那麼此時主表的操作被拒絕。
    如果指定了 on update 或 on delete:在刪除或更新時,有如下幾個操作可以選擇:
    1. cascade,級聯操作。主表數據被更新(主鍵值更新),從表也被更新(外鍵值更新)。主表記錄被刪除,從表相關記錄也被刪除。
    2. set null,設置爲null。主表數據被更新(主鍵值更新),從表的外鍵被設置爲null。主表記錄被刪除,從表相關記錄外鍵被設置成null。但注意,要求該外鍵列,沒有not null屬性約束。
    3. restrict,拒絕父表刪除和更新。
    注意,外鍵只被InnoDB存儲引擎所支持。其他引擎是不支持的。

 

  好的啦,今天的基礎部分就記錄到這裏啦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章