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、创建表时添加约束
    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;

 

posted @ 2018-07-18 13:42  Catnip  阅读(417)  评论(0编辑  收藏  举报