MySQL_基礎_DDL數據定義語言

庫的管理

庫的切換
USE 庫名;

庫的查看
SHOW DATABASES;

庫的表查看
SHOW TABLES;

庫的建立
CREATE DATABASE [IF NOT EXISTS] 庫名 [CHARACTER SET 字符集];

庫的修改
修改庫名
關閉Mysql服務器 -> 到data目錄下手動修改庫名 -> 重啓Mysql服務器便可

修改庫的字符集
ALTER DATABASE 庫名 CHARACTER SET 字符集;

庫的刪除
DROP DATABASE [IF EXISTS] 庫名;

 

表的管理

表的結構查看
DESC 表名;

表的建立
CREATE TABLE 表名(
    列名 列的類型 [(長度)] [約束],
    列名 列的類型 [(長度)] [約束],
    ...
    列名 列的類型 [(長度)] [約束]
);

表的修改
修改表名
ALTER TABLE 舊錶名 RENAME TO 新表名;

添加列
ALTER TABLE 表名 ADD COLUMN 列名 數據類型 [FIRST | AFTER 字段名]; 

修改列名
ALTER TABLE 表名 CHANGE COLUMN 舊列名 新列名 數據類型;

修改列類型或約束
ALTER TABLE 表名 MODIFY COLUMN 列名 新類型 [新約束];

刪除列
ALTER TABLE 表名 DROP COLUMN 列名;

表的刪除
DROP TABLE [IF EXISTS] 表名;

表的複製
複製表結構
CREATE TABLE 複製表名 LIKE 表名;

複製表結構+數據
CREATE TABLE 複製表名 SELECT * FROM 表名;

複製表部分結構
CREATE TABLE 複製表名 SELECT 列1[,列2..] FROM 表名 WHERE 0;

 

數據類型

分類
    數值型:
        整型:TINYINT、SMALLINT、MEDIUMINT、INT/Integer、BIGINT
        小數:
            定點數:DECIMAL(M, D)
            浮點數:FLOAT(M, D)、DOUBLE(M, D)
    字符型:
        字符串:CHAR、VARCHAR
        文本:TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT
        二進制:TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB
    日期型:
        YEAR、TIME、Date、DATETIME、TIMESTAMP


數值型
    整型
        類型            字節      範圍(有符號)           範圍(無符號)      用途
        TINYINT         1        -2^7 ~ 2^7-1         0 ~ 2^8-1         微小整數
        SMALLINT        2        -2^15 ~ 2^15-1       0 ~ 2^16-1        小整數
        MEDIUMINT       3        -2^23 ~ 2^23-1       0 ~ 2^24-1        中整數    
        INT(Integer)    4        -2^31 ~ 2^31-1       0 ~ 2^32-1        大整數
        BIGINT          8        -2^63 ~ 2^63-1       0 ~ 2^64-1        極大整數
    
        1、默認有符號,經過UNSIGNED關鍵字設置無符號
        2、數值超出範圍,會報out of range異常警告,而且插入臨界值
        3、若是不設置長度,會有默認的長度 
        4、長度表明顯示的最大寬度,若是不夠則左邊用0填充,但必須搭配ZEROFILL纔會顯示,並默認變爲無符號整型

    小數型
        類型            字節                範圍                                                 用途
        FLOAT(M, D)     4                  ±1.75494351E-38~ ±3.402823466E+38                   單精度浮點數(8位精度)            
        DOUBLE(M, D)    8                  ±2.2250738585072014E-308~ ±1.7976931348623157E+308  雙精度浮點數(16位精度)
        DECIMAL(M, D)   M>D爲M+2,不然D+2   依賴於M和D的值                                       定點數

        1、M:整數部位+小數部位,D:小數部位
        2、若是超過範圍,會報out of range異常警告,而且插入臨界值
        3、M和D均可以省略,若是是定點數,M默認爲10,D默認爲0
        4、若是精確度要求較高,則優先考慮使用定點數

字符型
    類型            字節                用途
    CHAR            0 ~ 2^8-1          固定長度字符串
    VARCHAR         0 ~ 2^16-1         可變長度字符串
    TINYBLOB        0 ~ 2^8-1          微小的二進制形式文本數據
    TINYTEXT        0 ~ 2^8-1          微小的文本數據
    BLOB            0 ~ 2^16-1         小的二進制形式文本數據
    TEXT            0 ~ 2^16-1         小的文本數據
    MEDIUMBLOB      0 ~ 2^24-1         中等的二進制形式文本數據
    MEDIUMTEXT      0 ~ 2^24-1         中等的文本數據
    LONGBLOB        0 ~ 2^32-1         極大的二進制形式文本數據
    LONGTEXT        0 ~ 2^32-1         極大的文本數據

日期型
    類型        字節    範圍                                       格式                   用途
    DATE        3      1000-01-01/9999-12-31                     YYYY-MM-DD              日期值
    TIME        3      '-838:59:59'/'838:59:59'                  hh:mm:ss                時間值
    YEAR        1      1901/2155                                 YYYY                    年份值
    DATETIME    8      1000-01-01 00:00:00/9999-12-31 23:59:59   YYYY-MM-DD hh:mm:ss     日期和時間值
    TIMESTAMP   4      1970-01-01 00:00:00/2038-1-19 11:14:07    YYYYMMDD hh:mm:ss       時間戳值(結束時間是第 2147483647 秒)

    1、TIMESTAMP是UTC時間戳,與時區相關。
    2、DATETIME的存儲格式是一個YYYYMMDDHHmmSS的整數,與時區無關。
    3、DATETIME的存儲範圍大於TIMESTAMP。
    4、TIMESTAMP的列能夠自動更新。
    5、除非有特殊需求,不然建議使用TIMESTAMP。

ENUM、SET、BIT 1、ENUM列容許在列中存儲一組定義值中的單個值。
    2、SET列容許在列中存儲一組定義值中的一個或多個值。
    3、BIT在InnoDB中實際上是一個最小的整數類型。而MySQL在檢索BIT的時候會將其當作字符串,而不是整數,這可能會致使一些奇怪的行爲。
    4、不建議使用這三個類型:用整數代替。

 

約束

語法:
    1、建立表時添加約束
    CREATE TABLE 表名(
        字段名 字段類型 列級約束,
        字段名 字段類型,
        
        [CONSTRAINT 約束名] 約束類型(字段名) [外鍵的引用]
    );

    2、修改表時添加約束
    ALTER TABLE 表名 MODIFY COLUMN 字段名 字段類型 新約束;                       # 列級約束 ALTER TABLE 表名 ADD [CONSTRAINT 約束名] 約束類型(字段名) [外鍵的引用];        # 表級約束 3、查看約束
    DESC 表名;
    SHOW INDEX FROM 表名;

含義:
    一種限制,用於限制表中的數據,爲了保證表中的數據的準確和可靠性

分類:
    主鍵約束(PRIMARY KEY):惟一性,非空性。
    惟一約束(UNIQUE):惟一性,能夠空,但只能有一個。
    檢查約束(CHECK):對該列數據的範圍、格式的限制。[MySQL中不支持]
    非空約束(NOT NULL):所約束的列不能爲NULL值。
    外鍵約束(FOREIGN KEY):須要創建兩表間的關係並引用主表的列。
    默認約束(DEFAULT):該數據的默認值。
    
約束支持:
    列級約束:主鍵、惟1、檢查、非空、默認
    表級約束:主鍵、惟1、檢查、外鍵

案例:
    1、建立表時添加約束
    CREATE TABLE IF NOT EXISTS stuinfo(
        id INT PRIMARY KEY,                                                      # 主鍵
        stuname VARCHAR(20) NOT NULL,                                            # 非空
        gender CHAR(1) CHECK(gender='' OR gender =''),                     # 檢查
        age INT DEFAULT 18,                                                      # 默認
        seat INT UNIQUE,                                                         # 惟一
        majorid INT,    
        CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)    # 外鍵
    );

    2、修改表時添加約束
    案例1:添加主鍵
    ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;       # 列級約束 ALTER TABLE stuinfo ADD PRIMARY KEY(id);                    # 表級約束

    案例2:添加外鍵
    ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id); 

    3、修改表時刪除約束
    案例1:刪除默認約束
    ALTER TABLE stuinfo MODIFY COLUMN age INT ;

    案例2:刪除主鍵
    ALTER TABLE stuinfo DROP PRIMARY KEY;

    案例3:刪除惟一
    ALTER TABLE stuinfo DROP INDEX seat;

    案例4:刪除外鍵
    ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;

 

標識列

含義:
能夠不用手動的插入值,系統提供默認的序列值 特色:
1、標識列必須和key搭配 2、一個表只能有一個標識列 3、標識列的類型只能是數值型 4、標識列能夠經過 SET auto_increment_increment=3;設置步長 案例: 1、建立表時添加標識列,並設置起始值 CREATE TABLE IF NOT EXISTS stuinfo( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20) NOT NULL ) AUTO_INCREMENT = 1000; 2、修改表時添加標識列 ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY AUTO_INCREMENT; 3、修改表時刪除標識列 ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY; 4、修改標識列起始值 ALTER TABLE stuinfo AUTO_INCREMENT = 2000;
相關文章
相關標籤/搜索