文章目录
- 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
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxSP9cnYoxWbiZGbXlla5YEZoplMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2IDO1QjMxATMzIzNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
- 一张表主键只能设置一次,下面尝试多次设置
create table pk02(
id int primary key,
name varchar(20),
primary key (id)
);
2.1.3方式三
- 建表之后,通过修改表结构来添加
create table pk02(
id int,
name varchar(20)
);
desc pk02;
alter table pk02 add primary key(字段名1,2,...)
alter table pk02 add primary key(id,name);
- 多个字段都作为主键的情况下(联合主键),只有当每个主键字段都相同时,这两条记录才被认为是相同的
insert into pk02 values(1,'tony');--成功
insert into pk02 values(1,'cat');--成功
insert into pk02 values(1, 'cat'); --失败
2.2唯一约束(了解)
- 被修饰过的字段唯一,但是对null不起作用
- 三种方式和主键约束完全一致,只是关键字的改变
2.2.1方式一
- 建表的同时添加约束
- 格式:
字段名称 字段类型 unique
create table un(
id int unique,
name varchar(20) unique
);
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');
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');
3.truncate 清空表(重要)
-
:清空整张表,包括一些全局的变量(auto_increment),然后会建立一张新表;属于DDL语句。truncate 表名
-
:情况的仅仅是表中所有的记录,而表还是原来的表;属于DML语句。delete from 表名
- 下面用例子说明二者的区别
3.1delete from 表名
- 先查看表中已有数据,注意最后一条数据的id
- 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