DDL數據定義語言


DDL數據定義語言

(一)概述

DDL(Data Definition Language):數據定義語言,用來定義數據庫對象,庫、表、列等;創建、刪除、修改 庫,表結構。主要分為操作數據庫的DDL和操作表的DDL。

 

(二)操作數據庫的DDL

這里所提到的數據庫不同於我們之前提到的MySQL數據庫、Oracle數據庫等。MySQL數據庫中的”數據庫”是指一個數據庫管理系統(DBMS),而這里所提到的數據庫是指用來組織和管理一些對象(表、視圖等)的結構,簡單可以理解問磁盤上的文件夾。

一個數據庫服務器包含多個庫。

一個數據庫包含多張表。

一張表包含多條記錄。

1、創建數據庫

(1)直接創建數據庫
  • 在創建數據庫時,如果沒有使用可選關鍵字創建,並且數據庫已經存在,則會報錯;如果使用了 if not exists 關鍵字創建,則不會報錯
  • CREATE DATABASE [IF NOT EXISTS] 數據庫名;
(2)指定字符集方式創建數據庫
  • 語法:
    CREATE DATABASE  數據庫名 CHARACTER SET 字符集;
  • 示例:
    CREATE DATABASE  db1 CHARACTER SET UTF8
(3)指定字符集和排序規則創建數據庫
  • 語法:
    CREATE DATABASE 數據庫名 CHARACTER SET 字符集 COLLATE 排序規則;
  • 示例:
     CREATE DATABASE db2 CHARACTER SET UTF8 COLLATE utf8_bin;
  • 排序規則說明

    針對不同字符集,MySQL指定了不同的排序規則(可以參考MySQL的幫助文檔)。

    例如:utf8字符集中指定的 utf8_general_ci utf8_bin,對數據庫中存儲數據庫的規則就有所不同。

          utf8_general_ci:ci是 case insensitive, 即 "大小寫不敏感", a 和 A 會在字符判斷中會被當做一樣的。

          utf8_bin:將字符串每個字符串用二進制數據編譯存儲,區分大小寫,而且可以存二進制的內容。

 

2、查看數據庫

  1. 查看所有數據庫
    • 語法
      SHOW DATABASES;
  2. 查看指定數據庫
    • 可以查看數據庫創建的時的語法(編碼、排序規則等)
    • 語法:
      SHOW CREATE DATABASE 數據庫名 ;

3、修改數據庫

  • 只能修改數據庫的字符集和排序規則,不能修改數據庫名字
  • 語法
    ALTER DATABASE 數據庫名 CHARACTER SET 字符集 [COLLATE 排序規則];
  • 演示:

 

4、刪除數據庫

  • 語法:
    DROP DATABASE 數據庫名;
  • 演示:

    

 

5、使用數據庫

  1. 查看正在使用的數據庫:
    SELECT DATABASE();
  2. 切換數據庫:
    USE 數據庫名;

    演示:

      

 

(三)操作表的DDL

  • 表是一種數據庫對象,表由若干個字段(列)組成。是我們在操作數據庫時使用最為頻繁的數據庫對象。

  • 創建表

    • 注意:在創建表之前,一定要先使用數據庫(也就是說,表一定要創建在某個數據庫中)
    • 語法:
      CREATE TABLE 表名 (字段名1 數據類型,字段名2 數據類型,…,字段名n 數據類型)
      建議寫成如下格式:
      CREATE TABLE 表名 (
      字段名1 數據類型, 
      字段名2 數據類型,
           ...,
          字段名n 數據類型
      );
    • 示例:

      

  •  數據類型

  (1)數值類型

    a、整數類型

類型名稱

字節

說明

tinyint

1

無符號:0~255          有符號:-128~127

smallint

2

無符號:0~65535        有符號:-32768~32767

mediumint

3

無符號:0~1677215      有符號:-8388608~8388607

intinteger

4

無符號:0~4294967295   有符號:-2147483648~2147483647

bigint

8

無符號:0~18446744073709551615

有符號:-9223372036854775808~9223372036854775807

                        在建表時默認都是有符號的。

                        如要使用無符號的,在建表語句中指定。例如:id int unsigned

 

    b、近似數類型

      在MySQL中,可以通過浮點數和定點數來表示近似值。

      浮點數

      • MySQL中的浮點數包括float和double兩種,定義格式為float(M,D)、double(M,D)。
      • M-表示所存儲的值共有M位(M的取值范圍是0~255)
      • D-表示小數點后有D位(D的取值范圍是0~30)
      • 例如:float(7,4)存儲的數據范圍時-999.9999~999.9999。

      定點數 :(涉及到計算的最好使用定點數,因為浮點數會有精度的損失)

      • decimal 是MySQL的定點數。相較與浮點數定點數表示的近似值更加精確。定義格式為decimal(M,D)
      • M-表示所存儲的值共有M位(M的默認取值是10,取值范圍是1~65)
      • D-表示小數點后有D位(D的默認取值是0,取值范圍是0~30)

 

  (2)字符串類型

    MySQL提供了多種針對字符串的存儲類型。如下表所示

字符串類型

取值范圍和存儲需求

char(M)

M為0~255之間的整數

varchar(M)

M為0~65535之間的整數

tinyblob

允許長度0~255字節

blob

允許長度0~65535字節

meduimblob

允許長度0~167772150字節

longblob

允許長度0~4294967295字節

tinytext

允許長度0~255字節

text

允許長度0~65535字節

mediumtext

允許長度0~167772150字節

longtext

允許長度0~4294967295字節

varbinary(M)

允許長度0~M個字節的變長字節字符串

binary(M)

允許長度0~M個字節的定長字節字符串

enum

允許的值選自一個允許值列表,這個列表最多能存儲的值數量為65535個

set

和enum類似,set類型是一個多選字符串數據類型

a、char和varchar

char和varchar兩種類型相似,都是MySQL數據庫中用來存儲較短字符串格式的類型。但這兩種類型的主要區別在於存儲方式不同,char類型的長度是固定的,而varchar類型的長度是可變的。例如,存儲字符串”abc”,char(5)表示存儲的字符將占5個字節(包括2個空字符),而varchar(5)只占用3個字節的長度,5只是最大值,當存儲的字符小於5個時,按實際長度存儲。同時在檢索時,char類型會刪除尾部的空格,而varchar類型會保留尾部的空格。因為長度的問題,所以導致兩種數據類型的數據尋址速度不同,如果字符在10個以內,推薦使用char。(但是在MySql3.10中測試,占的是字符的個數,而不是字節數,如:char(5)存儲的字母個數和漢字個數是一樣的,都是5個)

 

b、BLOB和TEXT

BLOB是一個二進制大對象,可以容納可變數量的數據。有4種BLOB類型:tinyblobblobmediumbloblongblob。它們只是可容納值的最大長度不同。

有4種TEXT類型:tinytext、text、mediumtextlongtext。這些對應4種BLOB類型,有相同的最大長度和存儲需求。

因為大文件中的字符可能存在非法,所以推薦使用BLOB,比如ascii字符集下存儲一張含有”0XFF”字節的圖片,入庫過濾。

      

 

  (3)日期和時間類型

    MySQL中有多種日期和時間類型的數據數據類型。如下表所示

類型

字節

最小值

最大值

date

4

1000-01-01

9999-12-31

datetime

8

1000-01-01 00:00:00

9999-12-31 23:59:59

timestamp

4

1970-01-01 00:00:01.000000

2038-01-19 03:14:07.999999'

time

3

-838:59:59

838:59:59

year

1

1901

2155

對於這些數據類型的選擇,有如下使用准則:

1、如果要表示年月日,通常使用date。

2、如果要表示年月日時分秒,通常使用datetime。

3、如果要表示時分秒,通常使用time。

4、如果要表示年,通常使用year。

5、如果要表示當前系統的時間,通常使用timestamp。

  timestamp和datetime

雖然timestamp類型和datetime類型一樣可以表示日期時間,但兩者存在差別。

1、timestamp類型存儲的時間與MySQL數據庫系統安裝時所選的時區有關,在不同時區下查看的同一批數據將會得出不同的結果。

 

  查看時區的SQL語句: show variables like ‘time_zone’; 默認與主機一致,顯示結果為SYSTEM。

   

  修改時區的SQL語句:set time_zone=’+9:00’(設置為東9區)

   

  1、兩者的取值范圍不同,datetime的取值范圍是1000-01-01 00:00:00到9999-12-31 23:59:59,timestamp的取值范圍是1970-01-01 00:00:01.000000到2038-01-19 03:14:07.999999'。

 最常用類型總結:整數 int 、 浮點數 double 、字符串 varchar、日期 date。

 

  創建表示例

需求:創建employee表,包含字段,編號(id  int)、姓名(emp_name varchar)、性別(gender enum(‘M’,’F’))、入職日期(hire_date date)、薪資(salary double)、簡歷(resume text)
create table employee(
   id int,
   emp_name varchar(100),
   gender enum(‘M’,’F’),
   hire_date date,
   salary double,
   resume text
)
  • 查看表

    查看所有表:

SHOW TABLES;

    查看表結構:

DESC 表名:
或
DESCRIBE 表名

 

  查看創表語句

  語法:

SHOW CREATE TABLE 表名;

  示例

 

  •  復制表結構:

    語法:

CREATE TABLE 新表名 LIKE 舊表名;

    示例:

     

 

 

  •  修改表
    • 添加新列:
      • 語法:
        ALTER TABLE 表名 ADD 列名 類型;
      • 示例:為學生表添加一個新字段remake,類型為varchar(20)

        

    • 修改列類型:
      • 語法:
        ALTER TABLE 表名 MODIFY 列名 新的類型
      • 示例:將student表中的remark字段的改成varchar(100):

         

    • 修改列名:
      • 語法:
        ALTER TABLE 表名 CHANGE 舊列名 新列名 類型
      • 示例:將s1表中的remark字段名改成intro,類型varchar(30)

        

        注意:修改列名的時候,也可以一起修改列類型的取值范圍,但是不能修改列類型(varchar-->int 是不可以的)。一般情況是不會這樣修改列類型的。

    •  刪除列:
      • 語法:
        ALTER TABLE 表名 DROP 列名;
      • 示例:刪除student表中的字段intro

        

 

    • 修改表名:
      • 語法:
        RENAME TABLE 表名 TO 新表名;
      • 示例:將學生表student改名成student2

        

    • 修改字符集
      • 語法:
        ALTER TABLE 表名 CHARACTER SET 字符集;
      • 示例:將sutden2表的編碼修改成gbk

        

 

         注意:即使修改了表的字符集,但是表中的列類型的字符集並不會被修改

    • 刪除表
      • 語法:
        DROP TABLE 表名;
      • 示例:刪除表student2

        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM