天天看点

mysql学习笔记(2):数据类型和约束,以及清空表(truncate)和自增(auto_increment)1.数据类型2.约束3.truncate 清空表(重要)4.auto_increment

文章目录

  • 1.数据类型
  • 2.约束
    • 2.1主键约束
      • 2.1.1方式一
      • 2.1.2方式二
      • 2.1.3方式三
    • 2.2唯一约束(了解)
      • 2.2.1方式一
      • 2.2.2方式二
      • 2.2.3方式三
    • 2.3非空约束
  • 3.truncate 清空表(重要)
    • 3.1delete from 表名
    • 3.2 truncate 表名
  • 4.auto_increment

1.数据类型

分别列举java中的基本数据类型和mysql中,常用的数据类型用 ∙ \bullet ∙标记
java sql
byte tinyint
short smallint
int int( ∙ \bullet ∙)
long bigint
char/String

varchar ∙ \bullet ∙(可变长度字符,varchar(20) 存放abc 仅占3个)

char(固定字符长度,存放abc占20个)

boolean tingint/int 代替
flota/double

float/double

注意:double(5,2):小数长度为5,小数占2位 最大值:999.99

java.sql.Date date 日期
java.sql.Time time 时间
java.sql.Timestamp

timestamp ∙ \bullet ∙

时间戳 若给定值为null,数据库会把当前的系统时间存放到数据库中

datetime ∙ \bullet ∙ 日期+时间
java.sql.Clob(长文本) text
java.sql.Blob(二进制) blob

2.约束

  • 作用:为了保证数据的有效性和完整性
  • mysql常用约束:
    • 主键约束:

      primary key

    • 唯一约束:

      unique

    • 非空约束:

      not null

    • 外键约束:

      foreign key

2.1主键约束

  • 被修饰的字段唯一非空。
  • 一张表只能有一个主键,但这个主键可以修饰多个字段。

2.1.1方式一

  • 建表的同时添加约束
  • 格式:

    字段名称 字段类型 primary key;

2.1.2方式二

  • 建表的同时在约束区域添加约束
  • 所有字段声明完了以后就是约束区域
  • 格式:

    primary key(字段1,字段2);

create table pk01(
id int,
name varchar(20),

primary key(id)
);
insert into pk01 values(1,'tony');--成功
insert into pk01 values(1,'tony');--失败 Duplicate entry '1' for key 'PRIMARY'
insert into pko1 values(null, 'cat'); --失败 Column 'id' cannot be null

           
mysql学习笔记(2):数据类型和约束,以及清空表(truncate)和自增(auto_increment)1.数据类型2.约束3.truncate 清空表(重要)4.auto_increment
  • 一张表主键只能设置一次,下面尝试多次设置
create table pk02(
id int primary key,
name varchar(20),
primary key (id)
);
           
mysql学习笔记(2):数据类型和约束,以及清空表(truncate)和自增(auto_increment)1.数据类型2.约束3.truncate 清空表(重要)4.auto_increment

2.1.3方式三

  • 建表之后,通过修改表结构来添加
create table pk02(
id int,
name varchar(20)
);
desc pk02;
           
mysql学习笔记(2):数据类型和约束,以及清空表(truncate)和自增(auto_increment)1.数据类型2.约束3.truncate 清空表(重要)4.auto_increment
alter table pk02 add primary key(字段名1,2,...)
alter table pk02 add primary key(id,name);
           
mysql学习笔记(2):数据类型和约束,以及清空表(truncate)和自增(auto_increment)1.数据类型2.约束3.truncate 清空表(重要)4.auto_increment
  • 多个字段都作为主键的情况下(联合主键),只有当每个主键字段都相同时,这两条记录才被认为是相同的
insert into pk02 values(1,'tony');--成功
insert into pk02 values(1,'cat');--成功
insert into pk02 values(1, 'cat'); --失败
           
mysql学习笔记(2):数据类型和约束,以及清空表(truncate)和自增(auto_increment)1.数据类型2.约束3.truncate 清空表(重要)4.auto_increment

2.2唯一约束(了解)

  • 被修饰过的字段唯一,但是对null不起作用
  • 三种方式和主键约束完全一致,只是关键字的改变

2.2.1方式一

  • 建表的同时添加约束
  • 格式:

    字段名称 字段类型 unique

create table un(
id int unique,
name varchar(20) unique
);
           
mysql学习笔记(2):数据类型和约束,以及清空表(truncate)和自增(auto_increment)1.数据类型2.约束3.truncate 清空表(重要)4.auto_increment
insert into un value(10,'tony');
insert into un value(10,'jcak');--错误 Duplicate entry '10' for key 'id'
insert into un value(null,'tom');--成功
insert into un value(null,'alice');
           
mysql学习笔记(2):数据类型和约束,以及清空表(truncate)和自增(auto_increment)1.数据类型2.约束3.truncate 清空表(重要)4.auto_increment

2.2.2方式二

  • 建表的同时在约束区域添加约束
  • 所有的字段声明完成之后,就是约束区域了
  • unique(字段1,字段值2…)

2.2.3方式三

  • 建表之后,通过修改表结构添加约束
alter table 表名 add unique(字段1,字段2);-- 添加的联合唯一
alter table 表名 add unique(字段1);-- 给一个添加唯一
alter table 表名 add unique(字段2);-- 给另一个添加唯一
create table un01(
				id int,
				username varchar(20)); 
alter table un01 add unique(id,username);
insert into un01 values(1,'tom');-- 成功
insert into un01 values(1,'jack');-- 成功
insert into un01 values(1,'tom');-- 失败  Duplicate entry '1-tom' for key 'id'
           

2.3非空约束

  • 被修饰过的字段非空
  • 只有一种方式
create table nn(
	id int not null,
	name varchar(20) not null
);
insert into nn values(null, 'tony');
           
mysql学习笔记(2):数据类型和约束,以及清空表(truncate)和自增(auto_increment)1.数据类型2.约束3.truncate 清空表(重要)4.auto_increment

3.truncate 清空表(重要)

  • truncate 表名

    :清空整张表,包括一些全局的变量(auto_increment),然后会建立一张新表;属于DDL语句。
  • delete from 表名

    :情况的仅仅是表中所有的记录,而表还是原来的表;属于DML语句。
  • 下面用例子说明二者的区别

3.1delete from 表名

  • 先查看表中已有数据,注意最后一条数据的id
mysql学习笔记(2):数据类型和约束,以及清空表(truncate)和自增(auto_increment)1.数据类型2.约束3.truncate 清空表(重要)4.auto_increment
  • delete from user 删除表中所有记录,并查看表后插入一条新的数据,id为null
    mysql学习笔记(2):数据类型和约束,以及清空表(truncate)和自增(auto_increment)1.数据类型2.约束3.truncate 清空表(重要)4.auto_increment
  • 发现delete from 后插入一条新数据的id是3,这是为何呢?查看建表语句
    • show create table user;

      mysql学习笔记(2):数据类型和约束,以及清空表(truncate)和自增(auto_increment)1.数据类型2.约束3.truncate 清空表(重要)4.auto_increment
  • 注意到下方有个自增的描述,这表明下一条记录的默认id=4

3.2 truncate 表名

  • truncate user;

    然后再插入一条记录
    mysql学习笔记(2):数据类型和约束,以及清空表(truncate)和自增(auto_increment)1.数据类型2.约束3.truncate 清空表(重要)4.auto_increment
  • 发现这样的方式,id=1
  • 查看建表语句
    mysql学习笔记(2):数据类型和约束,以及清空表(truncate)和自增(auto_increment)1.数据类型2.约束3.truncate 清空表(重要)4.auto_increment
  • 发现这个字段发生了改变,说明truncate 在删除表的时候,这样的变量也是被删除的。

4.auto_increment

  • 两点要求同时满足:
    • 1.被修饰的字段类型要支持自增,一般为int
    • 2.被修饰的字段必须是一个key, 一般是primary key
create table ai01(
		id varchar(10) auto_increment
	);-- 错误 Incorrect column specifier for column 'id'
	
	create table ai01(
		id int auto_increment
	);-- 错误 Incorrect table definition; there can be only one auto column and it must be defined as a key
           
mysql学习笔记(2):数据类型和约束,以及清空表(truncate)和自增(auto_increment)1.数据类型2.约束3.truncate 清空表(重要)4.auto_increment