博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【java】java学习之路-04-MySQL(二)
阅读量:6031 次
发布时间:2019-06-20

本文共 3274 字,大约阅读时间需要 10 分钟。

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、多对多关系

需要一张中间表,添加两个外键字段,分别引用两张表的主键

转载于:https://www.cnblogs.com/guzidi/p/7811977.html

你可能感兴趣的文章
ASP.NET 中设置路径的三种方式
查看>>
EBS使用 Distributed AD在多个节点并行adpatch
查看>>
windows添加和删除服务
查看>>
关于云栖,有点无语的几个地方,管理能不能管?
查看>>
Windows线程的同步与互斥
查看>>
C#进阶系列——MEF实现设计上的“松耦合”(四):构造函数注入
查看>>
AngularJs ng-change事件/指令(转)
查看>>
linux系统下安装两个或多个tomcat
查看>>
ProtoBuffer 简单例子
查看>>
iOS多线程开发系列之(一)NSThread
查看>>
微信小程序初体验(上)- 腾讯ISUX社交用户体验设计成员出品
查看>>
SAP WM Physical Inventory Method ST & PZ
查看>>
一次快速的数据迁移感悟
查看>>
MySQL修改提示符
查看>>
《ELK Stack权威指南(第2版)》一3.6 Java日志
查看>>
C++流的streambuf详解及TCP流的实现
查看>>
《量化金融R语言初级教程》一2.5 协方差矩阵中的噪声
查看>>
mysql到elasticsearch数据迁移踩坑实践-Ali0th
查看>>
Python轻量级数据分析库DaPy
查看>>
beetl 和 shrio 结合
查看>>