当前位置:Gxlcms > 数据库问题 > 【java】java学习之路-03-MySQL(二)

【java】java学习之路-03-MySQL(二)

时间:2021-07-01 10:21:17 帮助过:19人阅读

MySQL数据库 day02

Tip:在Windows命令行中中文输入报错问题:

MySQL数据库需要知道客户端使用什么编码,来进行正确的编码转换。
set names gbk;
告诉服务器,自己是gbk编码。(window客户端是gbk编码,Linux客户端是utf8编码)

一、数据类型
unsigned 标记,添加 unsigned 表示无符号。
zerofill 标记,例如:int(4) zerofill; 显示数据不足4位会补0,超出4个正常使用。

1、数字
a.tinyint 1个字节
b.smalint 2个字节
c.int 4个字节
int(3) 小括号内的数字,只会影响查询显示格式,而不会影响数字范围

d.bigint 8个字节
e.float 4个字节
f.double 8个字节
double(6,2) 不会影响范围,只会影响显示

g.decimal/numeric 定点浮点数,可以做精确运算,一般表示“钱”
decimal(6,2) 表示整数4位,小数2位,总共6位。
整数超出范围,可能会报错;小数超出范围,会四舍五入


2、字符串
a.char(20) 定长字符串
超出长度可能会出错,也可能会截断(要根据数据库设置决定)
如果长度不足,会补空格
最长255
定长的字符串效率更高

b.varchar(20) 变长字符串
最大长度是255内,前面需要一个字节来表示长度
最大长度超过255,前面需要两个字节来表示长度
最长65535个字节
一般用 varchar 保存255内的字符串

c.text
65535字节;
只占用表总字节量的10个字节

d.blob
超大对象数据
要使用流来读写blob字段数据
通常不用blob保存文本

3、日期时间
a.datetime 年月日时分秒
b.date 年月日
c.time 时分秒
d.timestamp
时间戳,一般不用
年月日时分秒
最大只到2038年
修改一行数据时,第一个timestamp字段会自动更新为系统当前时间
不能取null值,填入null值,会自动填入系统当前时间

二、约束:

对一个字段的取值进行限制

1、主键约束
唯一标识一行数据
唯一、不重复
非空,不能取null值
自动生成索引
一般不使用业务数据作为主键,而是使用无意的是数据

(1)添加主键
a.在新建表时添加
方法一:
create table tb1(
id int primary key,
...
);
方法二:
create table tb1(
id int,
...
primary key(id)
);
方法三:双主键(组合主键),必须使用这种格式添加
create table tb1(
name...
ip...
...
primary key(name,ip)
);

b.修改表时添加:
alter table tb1 add primary key(id);

(2)查看主键
a. desc tb1;
b. show create table tb1\G;

(3)删除主键
a. alter table tb1 drop primary key;
删除后查看: desc tb1;
show create table tb1;

(4)自增主键:auto_increment

a.建表时添加自增主键
id int primary key auto_increment;

b.修改时将主键设置为自增(id已经是主键)
alter table tb1
modify id int auto_increment;

c.取消自增(不会删除主键约束)
alter table tb1
modify id int;

d.自增主键填入null值,自动填入自增值

f.查看自增值的下一个值:
show create table tb2\G;
....
auto_increment:xx

g.可以手动插入一个指定的值,如果这个值是表中的最大值的,下一个自增值会自动从这个最大值增长。使用自增主键,不用管这个值是否连续。自增主键不能退回。

2、外键约束:限制一个字段的取值,只能取另一个主键的值
(1)创建外键
a.建表时创建外键
create table tb2(
...
x_id ...
...
foreign key(x_id) references tb1(id)
);
b.修改表时创建外键
alter table tb3
add foreign key(x_id) references tb1(id);

(2)查看外键
show create table tb3;

(3)删除外键:
首先需要查看外键约束的名字
alter table tb2
drop foreign key 约束名;

(4)外键也会自动创建索引,删除外键,不会自动删除外键的索引,如果想删除外键的索引:
alter table tb2
drop index 索引名;



3、非空约束
(1)添加非空约束
a.创建表时添加
creat table tb2(
...
name varchar(20) not null,
);
b.修改表时添加:
alter table tb2
modify name varchar(20) not null;

(2)取消非空约束
alter table tb2
modify name varchar(20);

alter table tb2
modify name varchar(20) null;

4、唯一约束(unique):字段取值不能重复,允许重复的null值
(1)添加唯一约束
a.建表时添加
create table tb2(
username varchar(32) unique not null,
email varchar(128) unique
addr varchar(255),
tel varchar(20),
unique(addr,tel)
);
b.修改表时添加
alter table tb2
modify email varchar(128) unique;

alter table tb2
add unique(addr,tel);

(2)查看唯一约束
a.方法一:
desc tb2
show create table tb2

b.查看系统库中的约束
use information_schema --系统库,库信息
select * from table_constraints
where table_name = ‘xxx‘;

(3)取消唯一约束
alter table tb2
drop index 索引名;

(4)检查约束
通过设置字段取值条件,来限制它的取值比如,性别、年龄范围等
MySQL支持检查约束的语法,但没有实现约束,MySQL不会检查约束条件

create table xuesheng (
gender...
age...
check(gender=‘男‘ or gender=‘女‘),
check(age>8 and age<60)
);
5、默认值(default)
age int default 0
在表结构中保存字段的注释信息

三、在表结构中保存字段的注释信息(comment)
create table tb2(
id int comment ‘主键id‘,
name varchar(20) comment ‘姓名‘
);
show create table tb2\G 可以看到注释

四、表和表之间的关系
1、一对一关系
具有唯一约束的外键
既是主键也是外键的字段

2、一对多关系
在多方表中添加外键

3、多对多关系
需要一张中间表,添加两个外键字段,分别引用两张表的主键

【java】java学习之路-03-MySQL(二)

标签:效率   l数据库   学习   form   text   use   超过   ddr   esc   

人气教程排行