让我们先来简单的了解一下mysql的DDL操作。

  1. DDL的解释
    • 对数据库的常用操作
    • 对表结构的常用操作
    • 修改表结构
  2. 对数据库的常用操作
功能SQL
查看所有的数据库show databass;
创建数据库create database [if not existe] mydb1 [charset=utf8]
切换(选择要操作的)数据库 use mydb1;
删除数据库drop datebase [if existe] mydb1;
修改数据库编码alter database mydb1 character set utf8;
对数据库的常用操作
  1. 对表结构的常用操作
功能 SQL
创建表create table [if not exists] 表名(
字段名1 类型[(宽度)] [约束条件] [comment ‘字段说明’],
字段名2 类型[(宽度)] [约束条件] [comment ‘字段说明’],
……
)[表的一些设置];
查看当前数据库的所有表名称 show tables;
查看指定某个表的创建语句show 表名;
查看表结构desc 表名;
删除表drop table 表名;
对表结构的常用操作
  1. 修改表结构常用操作
功能SQL
修改表添加列alter table 表名 add 列名 类型(长度) [约束];
修改列名和类型alter table 表名 change 旧列名 新列名 类型(长度) 约束;
修改表删除列alter table 表名 drop 列名;
修改表名rename table 表名 to 新表名

可以看出,DDL不直接涉及对数据本身的操作,只是对表进行创建,对表的结构进行指定修改等,现在我们来列举一下mysql中常见的数据类型。(*号标记为常用)

  1. 数值类型
类型大小/bytes范围(有符号)范围(无符号)用途
*TINYINT1(-128,127)255小整数值
SMALLINT2(-32768,32767)65535大整数值
MEDIUMINT3(-8388608,8388607)16777215大整数值
*INT 或 INTEGER4(-2147483648,
2147483647)
4294967295大整数值
BIGINT8(-9223372036854775808,
9223372036854775807)
18446744073709551615极大整数值
FLOAT4(-3.402823466 E+38
3.402823466351 E+38)
单精度
浮点数值
*DOUBLE8(-1.7976931348623157 E+308
1.7976931348623157 E+308)
双精度
浮点数值
DECIMAL依赖M和D的值依赖M和D的值小数值
  1. 字符串类型
类型大小/bytes用途
CHAR0-255定长字符串
*VARCHAR0-65535变长字符串
TINYBLOB0-255不超过255个字符的二进制字符串
TINYTEXT0-255短文本字符串
BLOB0-65535二进制形式的长文本数据
TEXT0-65535长文本数据
MEDIUMBLOB0-16777215二进制形式的中等长度文本数据
MEDIUMTEXT0-16777215中等长度文本数据
LONGBLOB0-4294967295二进制形式的极大文本数据
LONGTEXT0-4294967295极大文本数据
  1. 日期类型
类型大小/bytes范围格式用途
*DATE31000-01-01
/9999-12-31
YYYY-MM-DD日期值
TIME3‘-838:59:59’
/’839:59:59′
HH:MM:SS时间值或持续时间
YEAR11901/2155YYYY年份值
*DATETIME81000-01-01 00:00:00
/9999-12-31 23:59:59
YYYY-MM-DD HH:MM:SS混合日期和时间值
*TIMESTAMP41970-01-01 00:00:00
/2038-1-19 11:14:07
(北京时间)
YYYYMMDD HHMMSS混合日期和时间值,时间戳

约束

在创建表的和添加列的时候,我们看到了’约束‘这一名词,那么约束是什么呢?我们应该怎样使用约束呢?

  • 概念
    • 约束英文:constraint
    • 约束实际上就是对表中数据的限制条件
  • 作用
    • 表在设计的时候加入约束的目的就是为了保证表中的记录完整性和有效性,比如用户表有些列的值(手机号)不能为空,有些列的值(身份证号)不能重复。
  • 分类
    • 主键约束(primary key)PK
    • 自增长约束(auto_increment)
    • 非空约束(not null)
    • 唯一性约束(unique)
    • 默认约束(default)
    • 零填充约束(zerofill)
    • 外键约束(foreign key)FK
  • 具体语法
    1. 主键约束
      • 概念
        1. MySQL主键约束是一个列或者多个列的组合,其值能唯一的标识表中的每一行,方便在RDBMS中尽快的找到某一行
        2. 主键约束相当于 唯一约束+非空约束 的组合,主键约束不允许重复,也不允许出现空值。
        3. 每个表最多只允许一个主键
        4. 主键约束的关键字是:primary key
        5. 当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。
      • 操作
        • 添加单列主键
          • 创建单列主键有三种方式,在定义字段的同时指定主键,定义字段之后指定主键,使用DML操作添加主键。
          • 方式一-语法(定义字段的同时指定主键)
            • create table 表名(… ,<字段名> <数据类型> primary key ,…);
          • 方式二-语法(定义字段之后指定主键)
            • create table 表名(… , [constraint <约束名>] primary key [字段名]);
          • 方式三-语法(使用DML操作添加主键)
            • alter table <表名> add primary key(字段列表);
        • 添加联合主键
          • 所谓联合主键,就是这个主键是由一张表中多个字段组成的。
          • 注意:
            1. 当主键是由多个字段组成时,不能直接在字段名后面声明主键约束。
            2. 一张表只能有一个主键,联合主键也是一个主键
          • 语法
            • create table 表名(... , primary key(字段1,字段2,...,字段n));
        • 删除主键约束
          • 一个表中不需要主键约束时,就需要从表中将其删除。
          • 语法
            • alter table <数据表名> drop primary key; -- 使用DML删除表的主键约束
    2. 自增长约束
      • 概念
        1. 在MySQL中,当主键定义为自增长后,这个主键的值就不需要用户输入数据了,而由数据库系统根据定义自动赋值。
        2. 每增加一条记录,主键会自动以相同的步长进行自增长
        3. 通过给字段添加 auto_increment 属性来实现主键自增长
      • 语法
        • create table (... ,<字段名> <数据类型> auto_increment ,...); -- 给一个字段自增长约束
        • create table (... ,<字段名> <数据类型> auto_increment ,...)auto_increment = 10; -- 给一个字段自增长约束,并设置初始值。
      • 特点
        1. 默认情况下,auto_increment的初始值是1,每新增一条记录,字段值自动加1.
        2. 一个表中只能有一个字段使用auto_increment约束,且该字段必须有唯一索引,避免序号重复(即为主键或主键中的一部分)。
        3. auto_increment约束的字段不许具有NOT NULL属性。
        4. auto_increment约束的字段只能是整数类型。
        5. auto_increment约束的字段的最大值受该字段的数据类型约束,如果达到上限,auto_increment就会失效。
        6. delete数据之后自增长从断点开始,truncate数据之后自增长从默认起始值开始
    3. 非空约束
      • 概念
        • MySQL非空约束(not null )指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。
      • 语法
        • 方式一(创建时添加)
          • <字段名> <数据类型> not null
        • 方式二(使用DML添加)
          • alter table 表名 modify 字段 类型 not null;
      • 删除非空约束
        • 语法
          • alter table 表名 modify 字段 类型;
    4. 唯一约束
      • 概念
        • 唯一约束(Unique Key)是指所有记录中字段的值不能出现重复。
      • 语法
        • 方式一(创建时添加)
          • <字段名> <数据类型> unique
        • 方式二(使用DML添加)
          • alter table 表名 add constraint 约束名 unique(列);
        • 删除约束
          • alter table 表名 drop index <唯一约束名>;
    5. 默认约束
      • 概念
        • MySQL默认值约束用来指定某列的默认值。
      • 语法
        • 方式一(创建时添加)
          • <字段名> <数据类型> default <默认值>
        • 方式二(使用DML添加)
          • alter table 表名 modify 列名 类型 default 默认值;
        • 删除约束
          • alter table 表名 modify 列名 类型 default NULL;
    6. 零填充约束
      • 概念
        1. 插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面补上相应的0
        2. zerofill默认为int(10)
        3. 当使用zerofill时,默认会自动加unsigned(无符号)属性。
      • 语法
        • 添加
          • <字段名> <数据类型> zerofill
        • 删除
          • alter table 表名 modify id int
    7. 外键约束
      • 概念
        1. MySQL外键约束是表的一个特殊字段,经常与主键约束一起使用。
          对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表,外键所在的表就是从表。
      • 语法
        • 创建时添加
          • constraint <外键名> foreign key 字段名 [, 字段名2, …] references <主表名> 主键列1 [,主键列2, …];
        • 创建表后添加
          • 前提:从表中外键列中的数据必须与主表中主键列中的数据一致或者是没有数据。
          • alter table <数据表名> add constraint <外键名> foreign key (<列名>) references <主表名 > (<列名>);
        • 删除
          • alter table <表名> drop foreign key <外键约束名>;

发表评论

您的电子邮箱地址不会被公开。