Mysql02数据类型,五大约束

版权声明:转载请注明出处https://blog.csdn.net/tomhavenocat https://blog.csdn.net/TomHaveNoCat/article/details/83274239

中文问题
 Mysql数据库需要知道客户端使用什么编码,
来进行正确的编码转换

 set names gbk;
告诉服务器,自己是gbk编码
 Set names utf8;
告诉服务器 自己是utf-8 编码

数据类型

 

**数字**

  **unsigned标记**
添加 unsigned表示无符号,只有正数
  zerofill标记
 
**int(4)  zerofill**
显示时,不足4位会补0
0001
0012
0123
超过4位按照实际走 1234567
 
**tinyint**
                            1字节
 **smallint**
                            2字节
 **int**
                            4字节
                            int(3)
                            小括号数字,只影响查询显示格式,
                            而不影响数字范围
                               3
              12
             123
         3345663
 **bigint**
                            8字节
 **float**
                            4字节
 **double**
                            8字节
**decimal/numeric**
                            定点浮点数,可以做精确运算
                            decimal(6,2)
                            整数4为,小数2位,总共6位
                            整数超出范围,可能会报错
                            小数超出范围,会四舍五入
      字符串
 **char(20)**
  定长字符串,
  超出长度,可能会出错,也可能会截断
  如果长度不足,会补空格
  最长 255
  效率更高
**varchar(20)**
  变长字符串
  最大长度是255内,前面需要一个字节来表示长度
  最大长度超过255,前面需要两个字节来表示长度
  最长65535字节
  一般用varchar保存255内的字符串
 **text**
  65535字节
  只占用表总字节量的10个字节
 **blob**
  超大对象数据
  要使用流来读写blob字段数据
  通常不用blob保存文本
      

## 日期时间

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

约束

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

主键约束

 唯一标识一行数据
例如:
id 学号 姓名 性别
1 1002345 xx xx
2 345342
3 4564745
4 743553242
5 36345
6 4356456

Id 身份证号 姓名 性别
1 4534534 xx xx

id 手机号 套餐 金额
用户id+时间+随机数字… 345345 Xx xxx

 唯一,不重复
 非空,不能取null
 自动生成索引
 一般不使用业务数据作为主键
而是使用无意义数据
添加主键
 在新建表时添加
create table tb2(
id int primary key,

);

create table tb2(
id int,
…,
primary key(id)
);

create table tb2(
name…,
ip…,
…,
primary key(name, ip) – 双主键(组合主键)
);
 在修改表时添加
alter table tb2
add primary key(id);
查看主键
desc tb2;

                        show  create  table  tb2\G
       删除主键
                        alter  table  tb2
                        drop  primary  key;
       自增主键

 auto_increment
 建表时添加自增主键:
id int primary key auto_increment
 修改表将主键设置为自增(id已经是主键):
alter table tb2
modify id int auto_increment;
 取消自增(不会删除主键约束)
alter table tb2
modify id int;
 自增主键填入 null 值时,自动填入自增值
 查看自增值的下一个值
show create table tb2\G

auto_increment: 54345
 可以手动插入一个指定的值,如果这个值是表中的最大值,下一个自增值会自动从这个最大值增长
 使用自增主键,不用管这个值是否连续
 自增主键不能回退
 查询刚插入的数据生成的主键值

使用函数: last_insert_id()
select last_insert_id();

 Insert … values(…),(…),(…) ;
Select last_insert_id(); 得到第一条数据的 id
 last_insert_id() 只获取当前数据库连接所插入的 id 值
 使用示例:
Insert into xuesheng(name)
values(‘aaa’);

insert into lianxi(xs_id, tel)
values(last_insert_id(),‘236236643’);

外键约束

               限制一个字段的取值,只能取另一个主键的值

 创建外键
 建表时创建外键
create table tb3(

x_id …

foreign key(x_id) references tb2(id)
);
 修改表时创建外键(添加外键)
alter table tb3
add foreign key(x_id) referneces tb2(id);
 查看外键
show create table tb3;
 删除外键
 首先需要查看外键约束的名字
 alter table tb2
drop foreign key 约束名
 外键也会自动创建索引,删除外键,不会自动删除外键的索引,如果想删除外键的索引:
alter table tb2
drop index 索引名

非空约束

 添加非空约束
直接后面加not null
创建时添加
Create table tb2(

name varchar(20) not null,

);
修改时添加
Alter table tb2
Modify name varchar(20) not null;
 查看非空约束
Desc tb2;
Show create table tb2\G
 取消非空约束
Alter table tb2
Modify name varchar(20);

Alter table tb2
Modify name varchar(20) null;

唯一约束

 字段取值不能重复,允许重复的 null 值
 会生成索引

 添加唯一约束
 建表时添加
Create table tb2(
Username varchar(32) unique not null,
Email varchar(128) unique,
Addr varchar(255),
Tel varchar(20),
unique(addr, tel) – 字段组合不重复
);
 修改表时添加
Alter table tb2
Modify email varchar(128) unique;

Alter table tb2
Add unique(addr, tel);
 查看唯一约束
Desc tb2;
Show create table tb2;
– 查看系统库中的约束表
use information_schema; – 系统库,库信息
select * from table_constraints
where table_name=‘xuesheng’;
 取消唯一约束
alter table tb2
drop index 索引名;
检查约束
 通过设置字段取值条件,来限制它的取值
比如性别,年龄范围
 Mysql支持检查约束的语法,但没有实现这个约束,mysql不会检查约束条件

Create table xuesheng(
Gender…
Age…
Check(gender=’男’ or gender=’女’),
Check(age>8 and age<60)
);
默认值
age int default 0
comment注释信息
Create table tb2(
Id int comment ‘主键id’,
Name varchar(20) comment ‘姓名’
);

Show create table tb2\G 可以看到注释

表之间的关系

  一对一

 具有唯一约束的外键
 既是主键也是外键的字段

  一对多

 在多方表添加外键

  多对多

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

猜你喜欢

转载自blog.csdn.net/TomHaveNoCat/article/details/83274239