mysql约束条件整型_MySQL >>> 表的操作

表的操作

创建表的完整语法:

create table 表名(

字段名1 字段类型[(宽度) 约束条件],

字段名1 字段类型[(宽度) 约束条件],

字段名1 字段类型[(宽度) 约束条件]

);

注:1. 同一张表中,字段名不能相同

2. 宽度和约束条件是可选的,字段名和字段类型是必须的

3. 最后一个字段后面不能加逗号

#######################################

补充:

宽度是对存储数据库的限制;如

create table t1(name char);   # char 后面不写宽度默认为 1

insert into t1 values(‘jason‘);

select * from t1;

结果如下:

e25ea66c505bd9fa27d71d1d9638c14c.png

在没有 严格模式的情况下,数据的确能够存放进去,但是只会存进去一个 j

而最新的数据库版本直接报错:Data too long for column ‘name‘ at row 1

字段类型与约束条件:

字段类型约束的存储数据的类型

约束条件是基于字段类型之上的额外约束

###########################################

1. 数据(字段)类型

建表的时候,字段都有对应的数据类型;如下图:

dfffd993ba66d6d4cc542e41e69082b9.png

上图只是整型与浮点型,实际上还有其他的数据类型;接下来一一展示;

1.1 整型

整型可分为tinyint 、smallint 、mediumint 、int、bigint    默认都是带正负号

我们可以使用整型来存储年龄、等级、ID等各种数字相关的

ps:对于整型来说,数据类型后的宽度 并不是存储限制,而是显示限制;

所以在创建表时,如果字段采用的是整型类型,完全无需指定显示宽度;

默认就是展示最大宽度,足够显示完整当初存放的数据

如:int(8):数字不够 8 位默认用空格填充,够8位或者8位以上,有多少位显示多少位;但是也不能超出 int 最大范围

ddbc4c52f824c552d504cacfdf61c3c3.png

1.2 浮点型

浮点型可分为 float 、double 、decimal

我们可以使用浮点型来表示 身高、体重、薪资等

float(255,30)           总共255位小数位占30位精度上一般够用了

double(255,30)       总共255位小数位占30位

decimal(65,30)        总共65位小数位占30位

精确度: float < double < decimal

通常情况下会将数字在数据库存储上变成 字符串来方便存储,不需要考虑精确度带来的问题

1.3 字符类型

字符类型主要有char(定长) 、varchar(变长)

用来表示 姓名、地址 等描述性信息

create table 表1(name char(4))    # 超出四个字符报错,不够四个字符空格补全

create table 表2(name varchar(4))   # 超出四个字符报错,不够四个有几个就存几个

#########################################

在查看存储的数据的时候我们无法确定是否是由空格补齐,因为在显示的时候 mysql 会自动将末尾的空格取掉

如果不想让 mysql 帮你做自动去除末尾空格的操作,需要再添加一个模式:

set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";

退出客户端重新登陆

###########################################

char 与 varchar 的区别:*************

name char(5)     django中如果你想用char需要你自己定义

缺点:浪费空间

优点:存取速度都快

格式:egon alex lxx  jxx  txx      # 5个位一组存储

name varchar(5)     django默认只有varchar类型

缺点:存取速度慢     相较 char 而言

优点:节省空间

格式:1bytes+egon 1bytes+alex 1bytes+lxx  1bytes+jxx  1bytes+txx   # 1个报头再加上实际数据

1.4 时间类型

主要有一下四种:

datatime:年月日 时分秒

data:年月日

time:时分秒

year:年

如创建表 及 插入数据的时候:

create table student(

id int,

name char(16),

born_year year,

birth date,

study_time time,

reg_time datetime

);

insert into student values(1,‘egon‘,‘2019‘,‘2019-05-09‘,‘11:11:00‘,‘2019-11-11 11:11:11‘);

1.5 枚举与集合类型

关键字:

枚举 enum:多选一

集合 set:多选多

用法:

枚举:create table user(

id int,

name char(16),

gender enum(‘male‘,‘female‘,‘others‘)

);

insert into user values(1,‘jason‘,‘xxx‘)           # 报错  必须为限制内容中的其中一个

insert into user values(2,‘egon‘,‘female‘)      # 正确!

集合: create table teacher(

id int,

name char(16),

gender enum(‘male‘,‘female‘,‘others‘),

hobby set(‘read‘,‘sleep‘,‘sanna‘,‘dbj‘)

);

insert into teacher values(1,‘egon‘,‘male‘,‘read,sleep,dbj‘)   # 集合也可以只存一个

2. 约束条件

2.1  not null

标识该字段不能为空

如:create table t1(id int, name char(4) not null);

insert into t1 values(1, null);   # 会报错,表示不能插入为空

2.2 unsigned

无负号,用在整型数据类型

如:create table t1(x tinyint);

insert into t1 values(128),(-129);

可以插入负数,但是超出范围只会显示范围内最大数值

2f882870881223fdaac80543e8bf2319.png

create table t2(x tinyint unsigned);

insert into t2 values(-1),(256);

负数不能插入,直接从0开始;并且超出的数值只会存储为该整型上限

9ef18f26ef533319bb5bd0c8d1bd985e.png

2.3  zerofill

使用 0 填充

应用:create table t4(x int(8));

insert into t4 values(4294967296123);

aba1c8fafe17578f5feda29fcf32712e.png

create table t5(x int(8) unsigned zerofill);

insert into t5 values(4294967296123);

显示时,不够8位用0填充,如果超出8位则正常显示

9d6fe5d2e0e22299249cabb5c2799672.png

create table t6(x int(8) unsigned zerofill);

insert into t6 values(333);

显示时,不够8位用0填充,如果超出8位则正常显示

6244bd644ab1dff36cf3e06d7cc35b5f.png

2.4 default

默认值

应用:create table student(

id int,

name char(16) not null,

gender enum(‘male‘,‘female‘,‘others‘) default ‘male‘

);

insert into student(id,name) values(1,‘jason‘);   # 成功

62e5a0b70f7eaff9fd712bbaf3747a1a.png

2.5 unique (key)  key可不写

标识该字段的值是唯一的

单列唯一:create table user1(

id int unique,    # 限制 id 是唯一的,不能重复

name char(16)

);

insert into user1 values(1,‘jason‘),(1,‘egon‘)  # 报错

insert into user1 values(1,‘jason‘),(2,‘egon‘)  # 成功

联合唯一:create table server(

id int,

ip char(16),

port int,

unique(ip,port)   # 限制ip + port 组合在一起时唯一的

);

insert into server values(1,‘127.0.0.1‘,8080);  # 第一次正常插入数据

insert into server values(2,‘127.0.0.1‘,8080);  # 报错 ip + port 与第一条数据重复

insert into server values(1,‘127.0.0.1‘,8081);  # 正常插入数据

2.6 primary key

标识该字段为该表的主键,可以 唯一的标识记录

单从约束角度来说primary key 就等价于 not null unique   # 非空 且不能重复

用法:create table t11(id int primary key);

desc t11;

d33a032bae996160ccde604227686960.png

insert into t11 values(1),(1);  # 报错

insert into t11 values(1),(2);

########################################

Innodb存储引擎在建表的时候,要求表必须有且只有一个主键

1. 当你没有设置主键的时候,会自上往下寻找非空且唯一的约束字段自动将其升级为主键字段

2. 当你的表中没有任何约束字段的时候, Innodb会使用内部隐藏一个主键字段;但无法利用该主键字段加快查询

通常情况下 每张表都必须有一个能够唯一标识数据的编号字段

id 这个id字段一般也是主键字段

#########################################

联合主键:多个字段联合起来作为表的一个主键,本质还是一个主键

如:create table t18(

ip char(16),

port int,

primary key(ip,port)

);

desc t18;

7e80183e8770af2be9485ad39c109a48.png

2.7 auto_increment

标识该字段的值自动增长(整数类型,而且为主键)

应用:主键 id 作为数据的编号,每次最好能自动递增

create table t13(

id int primary key auto_increment,

name char(16)

);

insert into t13(name) values(‘jason‘),(‘jason‘),(‘jason‘);

id字段自动从1开始递增

de1d4f87c713e3fd989bf672c7c15418.png

注意:auto_increment 通常都是加在主键上,并且只能给设置为 key 的字段加

通常都是跟primary key联合使用   create table t30(id int auto_increment);

主键设置成自增之后 id永远是增加 不会因为你数据的删除而重置

如果你想重置id,只能将表清空     --->  truncate 表名

原文:https://www.cnblogs.com/pupy/p/11379872.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值