Bootstrap

数据表的创建和六大约束

2.数据表的创建和六大约束

1.如何创建数据表

  • 脚本创建
    • 切换到对应的数据库的连接及对应的数据库;

    • create tabe 表名(字段名1 数据类型,字段名2 数据类型,字段名3 数据类型...);

    • comment:注释的意思,作用在建表的时候给字段和表取一个注释说明;

    • character set utf8:是设置编码。

  • 手动创建

    • 在对应的数据库的 表 图标上鼠标右键 --> 新建表

  • 删除表

    • drop table 表名

  • 修改表

    • 脚本修改表结构主要是通过 alter关键字实现。可以给表增加字段,还可以修改已有的字段,包括修改字段名称、修改字段类型、删除字段等等。此外,还可以进行一系列高级操作,例如修改数据表的字符集、设置主键、设置索引、修改字段默认值、设置自增长等。

    • 增加表字段:alter table 表名 add 字段名 字段类型;

    • 删除表字段:Alter table 表名 drop 字段名;

    • 修改字段名:alter table 表名 change 原字段名 新字段名 字段类型 字段属性(就算是仅修改字段名,那么字段的原始类型,原属性也要重新书写,不然就变为删除。属性指的是约束);

    • 修改字段类型:alter table 表名 modify 字段名 字段类型;

    • 修改表名:alter table 表名 rename to 新表名


2.数据类型

  • MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型,除此之外还有其它类型。

2.1字符类型
  • char :固定长度,例如:性别

  • varchar:可变长度,例如:地址

  • text:备注,说明之类

  • blob:二进制,可以存储图片或者声音文件。但在实际中一般不会直接把图片存储到数据库里面,因为数据库扛不起那么打的内存压力,会用专用的图片存储服务器存储图片

2.2 数值类型
  • int :整型,对应Java里面的int/Integer

  • bigint:长整型,对应java里面的BigInteger/Long

  • float:小数,一般用来存储分数相关的,不会用来存储货币相关的

  • decimal:小数,一般用来存储与货币相关的数据,对应的java类型:java.math.BigDecimal;

    • 例如:decimal(5,2):表示整数位最多3位数,小数位2位数,小数位多出的位数进行四舍五入,但是四舍五入后整数位不能超过3位数,如:999.999就不能存储,因为小数位的9四舍五入后整数位会变成1000,超过了3位数。


2.3 日期类型
  • date:年月日,对应Java里面的:yyyy-MM-dd格式

  • time:时分秒,对应java里面的:HH:mm:ss格式

  • datetime:年月日时分秒,对应yyyy-MM-dd HH:mm:ss格式

  • timestamp:时间戳从1970-1-1开始计算到现在的总毫秒数,就是java里面的格林尼治时间


3.标识列

  • 作用:实现字段的自动增长,可以不用手动插入值。

  • 特点

    • 一个表中最多只能有一个标识列;

    • 标识列的类型必须是数值类型(int/float/double),一般 int类型用的比较多

    • 标识列必须是一个key/键,比如:主键、唯一约束等。一般用于主键比较多;

    • 案例1,创建表时设置 book_id字段为标识列:

      create table tb_book(
          book_id int auto_increment primary key,
          book_name varchar(10)
      )
    • 案例2,表创建成功后,设置 book_id字段为表示列:alter table tb_book modify column book_id int primary key auto_increment;


4.六大约束(脚本及手动创建)

1.主键约束

  • 作用:主键是能确定一条记录的唯一标识,主键字段必须唯一,必须非空,一个表中只能有一个主键,但是一个主键可以由多个字段组长。

  • 如:一条记录包括身份正号,姓名,年龄,学校,国籍,性别等。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。

  • 案例:bookId int auto_increment primary key

  • 注:一个主键由多个列组成:

    • 虽然现实主键1、主键2,其实是由两个列组成的一个主键。在设置的时候主键1必须是一个key,主键2无所谓。


2.默认值约束

  • 作用:字段设置默认值,可以不用手动插入值。

  • 性别案例:sex char(2) default '男'

  • 日期案例

    • adddate timestamp default current_timestampcurrent_timestamp 是当前系统时间的意思。

    • adddate timestamp default now();now()是获取当前系统时间。

  • 默认值约束最典型的就是性别和日期两个情况。


3.非空约束

  • 作用:字段的值不能为空。

  • bookId int not null auto_increment primary key;


4.唯一约束

  • bookId int not null auto_increment primary key;

  • sname varchar(20) comment'姓名',id varchar(18) not null comment '身份证',sex char(2) default '男',unique(sname,id);意思是身份证和姓名加起来是唯一的,这种约束叫组合约束。

  • sname varchar(20) unique comment'姓名',id varchar(18) not null comment '身份证',sex char(2) default '男';意思是姓名是为唯一的。


5.检查约束

  • 作用:通过表达式约束字段的值。

    create table tb_student(     sid int not null auto_ncrement primary key,     sname varchar(10),     sex char(2),     check(sex='男' or sex='女'))


6.主外键约束

  • 作用:在 MySQL 中,外键(Foreign Key)是一种用于建立表与表之间关联关系的约束。通过外键,可以在一个表中引用另一个表的主键或唯一键,从而实现数据的关联和一致性。

  • 至少涉及到两张表:主表和从表。以及两个键:主键和外键。

  • 主外键的主键不一定是主表上的主键,但它必须是主表上唯一且非空的列。

  • 在 MySQL 中,主外键的主键和外键的数据类型并不一定要求完全一致,但它们之间需要满足一定的数据类型兼容性。通常情况下,为了确保数据的一致性和有效性,主键和外键的数据类型应该尽可能保持一致。这样可以避免数据类型转换和不匹配带来的问题。当主表的主键列的数据类型为某一类型时,建议从表中引用主键的外键列的数据类型与之相同。MySQL 在某些情况下允许主键和外键的数据类型之间存在一定的兼容性。例如,可以将主表的主键列定义为整数类型(如 INT),而在从表中的外键列使用兼容的数值类型(如 BIGINT)。MySQL 在执行引用完整性检查时,会自动进行数据类型转换,但这可能会导致一些性能上的损失。

    create table tb_score(
    sid int not null auto_ncrement primary key comment '外键,关联tb_studnet表上的sid键',
    score float default 0 comment '成绩',
    foreign key(sid) references tb_student(sid)
    ) comment '成绩表'
    create table tb_student(
    sid int not null auto_increment primary key,
    sname varchar(10),
    sex char(2)
    )

5.MySQL数据导出导入、转储SQL文件

;