6.1 数据类型

6.1.1 数值型

  • 整型 | 类型 | 字节 | | —- | —- | | tinyint | 1 | | smallint | 2 | | mediumint | 3 | | int、integer | 4 | | bigint | 8 |

    • 整型类型的默认为有符号,使用 unsigned 进行无符号约束
    • 插入值超出整型范围时,报出 out of range 异常,并插入整型范围的临界值
    • 长度表示显示的最大宽度,每种类型均有默认值,若数值长度小于字段要求长度,则使用 0 填充,需搭配 zerofill 使用
  • 定点型 | 类型 | 字节 | | —- | —- | | dec(M, D)、decimal(M, D) | M+2 |

    • M:整数部分与小数部分的位数和,默认为 10
    • D:小数点后保留两位,四舍五入,默认为 0
    • 整数部分长度为 M-D,超出则插入临界值
  • 浮点型 | 类型 | 字节 | | —- | —- | | float(M, D) | 4 | | double(M, D) | 8 |

6.1.2 字符型

  • 较短 | 类型 | 最大字符 | | —- | —- | | char(M) | M | | varchar(M) | M | | binary/varbinary | | | enum | | | set | |

    • M:插入字符长度
    • char 表示固定长度的字符,(M) 可省略,默认值为1
    • varchar 表示可变长度的字符,(M) 不可省略,无默认值
    • binaryvarbinary 保存较短的二进制字符
    • enum 只能插入枚举中的一个,不区分大小写
    • set 可以插入集合中的多个,不区分大小写
  • 较长 | 类型 | 字节 | | —- | —- | | text | | | blob | |

6.1.3 日期型

类型 字节 最小值 最大值
date 4 1000-01-01 9999-12-31
datetime 8 1000-01-01 00:00:00 9999-12-31 23:59:59
timestamp 4 19700101080001
time 3 -838:59:59 838:59:59
year 1 1901 2155
  • datetime 不受 MySQL 设置时区的影响
  • timestamp 受 MySQL 设置时区的影响

6.2 约束

6.2.1 种类

  • 六大约束
    • 非空约束:not null
    • 默认约束:default
    • 主键约束:primary key
    • 唯一约束:unique
    • 外键约束:foreign key
      • 与 key(primary key 或 unique)搭配
    • 检查约束:check,【MySQL 不支持】
  • 列级约束:六大约束均支持,但外键约束无效果
  • 表级约束:除非空约束和默认约束外
  • 标识列:auto_increment
    • 标识列只能与 key(primary key 或 unique)搭配
    • 一个表中只能有一个标识列
    • 标识列的类型只能是数值型

      6.2.2 语法

      ```sql / 约束 /

      1 创建表时添加约束

      1.1 列级约束

      create table 表名( 列名1 列类型1 列级约束1, 列名2 列类型2 列级约束2, … );

1.2 表级约束

create table 表名( 列名1 列类型1, 列名2 列类型2, … 【constraint 约束名】 表级约束(列名) );

2 修改表时添加约束

2.1 列级约束

alter table 表名 modify column 列名 列类型 列级约束;

2.2 表级约束

alter table 表名 add 【constraint 约束名】 表级约束(列名);

3 修改表时删除约束

  1. <a name="pStwX"></a>
  2. ### 6.2.3 使用
  3. ```sql
  4. # 1 【创建表时添加约束】
  5. # 1.1 【列级约束】
  6. create table stuinfo(
  7. id int primary key,
  8. stuname varchar(20) not null,
  9. gender char(1) check(gender='男' or gender='女'),
  10. seat int unique,
  11. age int default 18,
  12. majorid int references major(id)
  13. );
  14. # 1.2 【表级约束】
  15. create table stuinfo(
  16. id int,
  17. stuname varchar(20),
  18. gender char(1),
  19. seat int,
  20. age int,
  21. majorid int,
  22. constraint pk primary key(id),
  23. constraint uq unique(seat),
  24. constraint ck check(gender='男' or gender='女'),
  25. constraint fk_stuinfo_major foreign key(majorid) references major(id)
  26. );
  27. # 1.3 【通用】
  28. create table stuinfo(
  29. id int primary key,
  30. stuname varchar(20) not null,
  31. gender char(1),
  32. seat int unique,
  33. age int default 18,
  34. majorid int,
  35. constraint fk_stuinfo_major foreign key(majorid) references major(id)
  36. );
  37. # 【查看索引】
  38. show index from stuinfo
  39. # 2 【修改表时添加约束】
  40. # 2.1 【列级约束】
  41. alter table stuinfo modify column stuname varchar(20) not null;
  42. alter table stuinfo modify column age int default 18;
  43. alter table stuinfo modify column id int primary key;
  44. alter table stuinfo modify column seet int unique;
  45. alter table stuinfo modify column id int primary key auto_increment;
  46. # 2.2 【表级约束】
  47. alter table stuinfo add primary key(id);
  48. alter table stuinfo add unique(seat);
  49. alter table stuinfo add foreign key(majorid) reference major(id);
  50. # 3 【修改表时删除约束】
  51. # 3.1 【删除非空约束】
  52. alter table stuinfo modify column stuname varchar(20) null;
  53. # 3.2 【删除默认约束】
  54. alter table stuinfo modify column age int;
  55. # 3.3 【删除主键约束】
  56. alter table stuinfo drop primary key;
  57. # 3.4 【删除唯一约束】
  58. alter table stuinfo drop index seat;
  59. # 3.5 【删除外键约束】
  60. alter table stuinfo drop foreign key fk_stuinfo_major;
  61. # 3.5 【删除标识列】
  62. alter table stuinfo modify column id int;