python开发mysql:mysql数据类型&约束条件
一 整形
只有Int类型跟存储没有关系,显示的是宽度,其他类型都是限制
整形类型;[(m)][unsigned][zerofill]
作用;存储年龄,等级,id,各种号码
m,代表显示宽度 默认11 其他数据类型标识的就是几个字节,限制几个字节
unsigned,代表 限制没有字符
zerofill,代表 宽度显示不够,用0补全 1 整数数字 默认有符号
tinyint(1个字节),int(4个字节),bigint(8个字节):注意一下,约束条件和范围
常用 int,bigint 其中int最为常用
因为有符号的原因,占用了一个bit位,所以在范围上,有无符号有差别的
1.1 tinyint(1个字节) 2**8
create table t1(id tinyint);
alter table t1 modify id tinyint unsigned; 改成无符号,如果有数据 先要清空
小整数,数据类型用于保存一些范围的整数数值范围
有符号,-128 到 127
无符号,0 到 255
1.2 int(4个字节) 2**32
create table t1(id int);
整数,数据类型用于保存一些范围的整数数值范围:
有符号,-2147483648 ~ 2147483647
无符号,0 ~ 4294967295
1.3 bigint(8个字节) 2**64
create table t1(id bigint);
大整数,数据类型用于保存一些范围的整数数值范围:
有符号,-9223372036854775808 ~ 9223372036854775807
无符号,0 ~ 18446744073709551615 1.2 宽度 不指定宽度,默认会有int 11,默认合理合法,11位包含了2**32有无符号都包括了
alter table t1 modify id int(3); 修改宽度,是修改显示的宽度
alter table t1 modify id int(8) zerofill; 显示宽度不够,用0补全,在前面补全
如果没有zerofill这个限制,select * from t1;查看没什么效果 ** 注意,修改有无符号,或者补全的时候,都是需要将表里数据清空
整数在约束上加上zerofill会自动添加无符号,unsigned
二 浮点数 默认有符号
浮点数 默认有符号
decimal[(m[,d])] [unsigned] [zerofill]
准确的小数值,m是数字总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。
特别的;对于精确数值计算时需要用此类型
decaimal能够存储精确值的原因在于其内部按照字符串存储。 FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] 4字节
单精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。 DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] 8字节
双精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。 2.1 示例
create table t1(salary float(5,2));
insert into t1 values (3.4343);
inster into t1 values (1111.22); 超出,报错
5是宽度限制,2表示小数点位数,所以整数最多3位 ** 注意,浮点数在约束上加上zerofill会自动添加无符号,unsigned 3 位类型 BIT 存储二进制,默认只能存储一位,也就是能存储0,1
BIT(M)可以用来存放多位二进制数,M范围从1~64,如果不写默认为1位。
注意:对于位字段需要使用函数读取
bin()显示为二进制
hex()显示为十六进制
3 .1 示例
create table t1(name bit);
insert into t1 values(0),(1);
插入其他的就会报错了,或者你开始创建表的时候给默认宽度
create table t1(name bit(4)); 代表四个比特位
select * from t1; 查看不到因为是二进制
select bin(x) from t5; 这样查看
seleect hex(x) from t5; 十进制
三 位类型 BIT 存储二进制,默认只能存储一位,也就是能存储0,1
位类型 BIT 存储二进制,默认只能存储一位,也就是能存储0,1
BIT(M)可以用来存放多位二进制数,M范围从1~64,如果不写默认为1位。
注意:对于位字段需要使用函数读取
bin()显示为二进制
hex()显示为十六进制
3 .1 示例
create table t1(name bit);
insert into t1 values(0),(1);
插入其他的就会报错了,或者你开始创建表的时候给默认宽度
create table t1(name bit(4)); 代表四个比特位
select * from t1; 查看不到因为是二进制
select bin(x) from t5; 这样查看
seleect hex(x) from t5; 十进制 3.2 位数1 就是 0 2**0
位数2 就是 0 2**1+2**0 以此类推,最多64位,记住二进制的运算
通过bin(x)查询的结果就是二进制,
比如位数1 插入值是0 or 1结果就是 0 or 1
位数2 插入值是0 or 1 or 2 or 3 结果就是 0 or 1 or 10 or 11
四 char与varchar测试
char 定长(不够凑够固定长度,浪费空间,存取效率快)
varchar 变长(精准,计算出待放的数据长度,节省空间,效率低)
而且存储的时候,还需要存储头,用来取值的时候知道多少位 2.1 示例
create table t1(name char(4)); 表示四个字符,并不是显示字符,显示字符只有数字int是显示宽度
insert into t1 values('alexsb') 存储不下来,太长了
insert into t1 values('埃里克斯') 2.2 二者区别
create table t1(x char(5),y varchar(5));
insert into t1 values('abcdef','abcddd'); 前后都会报错,都不能超过五个
区别在于,char 不够五个,用空格补全,varchar 有几个就是几个,但是都不能超五个
通过select * from t1;看不出来,需要通过内置函数来查看
查看字符长度,char_lenth
select char_length(x),char_length(y) from t1; char_length :查看字符的长度,好像还是没有区别
看到可能还是3个字符,因为char的流氓性,所以需要更改下表限制
SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH'; 看到char是定义时候的长度
在通过select char_length(x),char_length(y) from t1;查看
insert into t7 values('你好啊','好你妹'); #char_length :查看字符的长度 5 3
insert into t7 values('你好啊','好你妹'); #length:查看字节的长度 11 9 utf8中文 一个字符等于3个字节,英文数字就是一个字符就是一个字节 2.3 空格
#注意两点:如果查找条件正好满足限定字符,也是可以查到空格的,前后都可以,但是如果超这个限制,那么只有在后面的空格可以找到
insert into t7 values('abc ','abc '); #空格算字符,查看字符长度就是 5 4 注意开始前提是给5个限制
select * from t7 where y='abc '; #去掉末尾的空格然后去比较
select * from t7 where y=' abc'; #前面是空格就不行了找不到 2.4 其他字符串,无非是存储过长超过255的时候,cahr,varchar只支持255个字符,大文件存储就没必要存储在数据库里面
效率低,而且大,数据库存储名字,路径就好了
五 日期
#注册时间
datetime 2017-09-06 10:39:49
#出生年月日,开学时间
date:2017-09-06
#聊天记录,上课时间
time:10:39:49
#出生年
year:2017 3.1 示例
create table student(
id int,
name char(5),
born_date date,
born_year year,
reg_time datetime,
class_time time
);
插入时间
insert into student values(1,'alex',now(),now(),now(),now()); now当前时间
insert into student values(1,'alex','2017-09-06','','2017-09-06 10:39:00','08:30:00'); 3.2 插入时间的其他插入写法,存储在数据库都是统一的格式,插入写法不一样而已
insert into student values(1,'alex','2017-09-06',2017,'2017-09-06 10:39:00','08:30:00');
insert into student values(1,'alex','2017/09/06',2017,'2017-09-06 10:39:00','08:30:00');
insert into student values(1,'alex','',2017,'','');
六 枚举&集合
enum 枚举 规定一个范围,可有多个值,但是为该字段插入值时,只能取规定范围中的其中一个
set 规定一个范围,可有多个值,但是为该字段传值时,能取规定范围中的多个值 4.1 示例
create table student(
id int primary key auto_increment,
name char(5),
sex enum('male','female'), 枚举
hobbies set('music','read','study','coding') set
);
insert into student(name,sex,hobbies) values('egon','None','ddd')
查看的时候,就会看到不符合的都是空的,没有找到的也是空
insert into student(name,sex,hobbies) values('egon','male','music,read')
七 约束条件¬ null&default
5.1 not null 与 default 5.2 not null 示例
create table student(
id int primary key auto_increment, 主键递增
name char(5),
sex enum('male','female') not null
);
insert into student(name,sex) values('alex',NULL) 插入成功,性别为空
需要限制,不能为空
sex enum('male','female') not null not null就是约束条件
insert into student(name,sex) values('alex',null) 报错,因为不能空了 5.3 default 示例
create table student(
id int primary key auto_increment, 主键递增
name char(5),
sex enum('male','female') , 默认值就是左边第一个
age int
);
insert into student(name) values('alex'); 查看的效果就是除了名字后面都是NULL
sex enum('male','female') not null; 有默认参数,默认时第一个参数,还是从左边开始
sex enum('male','female') not null default 'female'; 修改默认值
insert into t1(name) values('alex'); 就会看到,sex这块默认是female
age int not null 加上这个,不为空,默认值是0
age int not null default 30 不为空,默认值30
八 unique 唯一
6.1 示例
#单列唯一
create table teacher(
id int not null unique, 有值且唯一,这样写相当于主键
name char(10)
);
insert into teacher values(1,'egon');
insert into teacher values(1,'alex');
插入报错,因为ID是唯一 6.2 #多列唯一
#255.255.255.255 IP地址最大的状态
create table services(
id int primary key auto_increment,
name char(10),
host char(15),
port int,
constraint host_port unique(host,port)
);
constraint 约束的意思,host_port 别名 unique(host,port) 表示这2个字段加起来都是唯一的,联合唯一
insert into services values('ftp','192.168.20.17',8080);
insert into services values('httpd','192.168.20.17',8081); 6.3 primary key 唯一
create table t8(x int,y int,primary key(x,y));
查看显示2个主键,其实是一个,是x,y和起来的主键
insert into t1 values(1,2);
insert into t1 valyes(1,3) 都不会报错,除非是插入后,在插入相同的就会报错了,x,y主键是合起来的
九 auto_increment_offset:偏移量
7.1 示例
create table dep(
id int primary key auto_increment,
name char(10)
);
insert into dep(name) values('IT'),('HR'),('SALE'),('Boss');
#修改默认值,从10开始记录ID
create table dep1(
id int primary key auto_increment,
name char(10)
)auto_increment=10; 修改默认从10开始,就是ID从10开始
insert into dep1(name) values('IT'),('HR'),('SALE'),('Boss'); 7.2 #auto_increment_increment:步长
create table dep2(
id int primary key auto_increment,
name char(10)
);
set session auto_increment_increment=2; #会话级,只对当前会话有效,退出终端就断了
set global auto_increment_increment=2; #全局,对所有的会话都有效
insert into dep1(name) values('IT'),('HR'),('SALE'),('Boss'); 7.3 #auto_increment_offset和auto_increment_increment组合使用
注意:如果auto_increment_offset的偏移量值大于auto_increment_increment的步长值,则auto_increment_offset的值会被忽略
set session auto_increment_offset=2; 就是从2这个位置开始,第二数据就是5
set global auto_increment_increment=3;
show variables like '%auto_in%'; 查看偏移量和步长 create table dep3(
id int primary key auto_increment,
name char(10)
);
insert into dep3(name) values('IT'),('HR'),('SALE'),('Boss');
十 foreign key 员工信息表
8.1 示例 部门信息
#先建被关联的表,并且被关联的字段必须唯一
create table dep(
id int primary key auto_increment, 不为空,唯一,主键
department varchar(50),
comment varchar(100)
); #在创建关联的表 员工信息
create table emp_info(
id int primary key auto_increment,
name varchar(20),
dep_id int,
constraint(约束) fk_depid_id foreign key(dep_id) references dep(id) 让员工关联部门
on delete cascade 不需要先删除/修改被关联的表内容,后面没有逗号 和上面是一行
on update cascade
);
foreign key(dep_id) references dep(id) 创建关联,dep_id自己的字段,references引用关联,dep表的字段
constraint fk_depid_id 起个别名,跟unique一样 8.2 #插入数据
#先给被关联的表插入数据
insert into dep values
(1,'欧德博爱技术有限事业部','说的好'),
(2,'艾利克斯人力资源部','招不到人'),
(3,'销售部','卖不出东西'); #再给关联的表插入数据
insert into emp_info values
(1,'egon',1),
(2,'alex1',2),
(3,'alex2',2),
(4,'alex3',2),
(5,'李坦克',3),
(6,'刘飞机',3),
(7,'张火箭',3),
(8,'林子弹',3),
(9,'加特林',3); 8.3 #删除操作
delete update
delete from dep where id=2; 先删除被关联表
delete from emp_info where dap_id=2; 才能删除关联表
update user set uid=10 where uid=2; 修改关联表,关联表有修改,但是被关联表没有被修改
on delete cascade
on update cascade
被关联的表删除或是修改,关联的表也会随之删除或是修改,这才合理 drop batle t1;删除表的时候,应该先删除被关联表,在删除关联表
python开发mysql:mysql数据类型&约束条件的更多相关文章
- python开发基础之数据类型、字符编码、文件操作
一.知识点 1.身份运算: 2.现在计算机系统通用的字符编码工作方式:在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码.用记事本编辑的时候,从文件 ...
- Python开发——2.基本数据类型之数字和字符串
一.基本数据类型 基本数据类型包括:数字(int).字符串(str).列表(list).元祖(tuple).字典(dict).布尔值(bool). 查看输出数据的类型 a = "123&qu ...
- Python开发——3.基本数据类型之列表、元组和字典
一.列表(list) 1.列表的格式 li = [11,22,"kobe",["lakers","ball",11],(11,22,),{& ...
- 【Python开发】查看数据类型
import types aaa = 0 print type(aaa) if type(aaa) is types.IntType: print "the type of aaa is i ...
- MySQL基本数据类型与约束条件
昨日内容回顾 数据存储的演变 # 方向: 朝着更加统一和方便管理 数据库的发展史 # 由本地保存逐步演变为线上保存 数据库的本质 # 本质上就是一款CS架构的软件 """ ...
- Python开发【第十九篇】:Python操作MySQL
本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...
- 第一篇:Win10系统搭建Python+Django+Nginx+MySQL 开发环境详解(完美版)
Win10+Python+Django+Nginx+MySQL 开发环境搭建详解 PaulTsao 说明:本文由作者原创,仅供内部参考学习与交流,转载引用请注明出处,用于商业目的请联系作者本人. Wi ...
- Python开发【第十一篇】:Python操作MySQL
本篇对于Python操作MySQL主要使用两种方式: 1.原生模块pymsql. 2.ORM框架SQLAchemy. pymsql pymsql是Python中操作MySQL的模块,其使用方法和MyS ...
- python开发_python操作mysql数据库
如果你还没有准备好开发环境,你不妨花上一小点时间去看看:python开发_mysqldb安装 本篇blog是有关python操作mysql数据的相关内容. 我做了一个demo: 先看运行效果: mys ...
- Python进阶----数据库引擎(InnoDB),表的创建,mysql的数据类型,mysql表的约束
Python进阶----数据库引擎(InnoDB),表的创建,mysql的数据类型,mysql表的约束 一丶MySQL的存储引擎 什么是存储引擎: MySQL中的数据用各种不同的技术存储在文件( ...
随机推荐
- TypeScript 教程&手册
参考:https://www.w3cschool.cn/typescript/ https://www.gitbook.com/book/zhongsp/typescript-handbook/det ...
- mysql学习笔记(Centos下rpm编译配置+远程访问)
新工作以来,博主感觉天天都很忙,博客已经好久没有写了 从昨天开始弄centos服务器中搭建mysql5.6,由于yum最新版本只有5.1的所以折腾到现在 首先看看是否已安装过其他版本的mysql [r ...
- python中sorted()函数的用法
一. 定义 sorted()函数对所有可迭代的对象进行排序操作 二. 语法 sorted(iterable [, key[, reverse]]]) iterable:可迭代对象 key:主要是用来进 ...
- memcache笔记
服务端: 通过printf配合nc向memcached中写入数据[root@yz6245 ~]# printf "set key1 0 0 6\r\noldboy\r\n" |nc ...
- discuz! 设置私密论坛版块的方法
Discuz!的强大功能不用细说, 话说对于有一部分需要设置具有一定访问权限的用户才能浏览的版块内容的话. 可能很多朋友不太清楚, 为了解决这个问题, 第一步以管理员的身份登陆, 然后 论坛-> ...
- JavaScript高级程序设计读后感(一)
一.什么是JavaScript? 本质? 历史? 表单验证发展成为一门语言 局限性?
- linux文件组、权限等
文件所有者.所在组合其他组 --改变用户所在组 组和在oa系统中的组差不多,用户代表的好像是个体,组有点像角色的意思.不过权限的话并不是个体从组中获得,组仅仅是一个机制,进行部分文件控制与共享 ...
- Apache Tomcat Server Options 选项说明
Apache Tomcat Server Options 选项说明 p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neu ...
- 在C / C ++中清除输入缓冲区
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解 ...
- Wordpress在主题或者插件中自定义存储附件的方法
1.前端使用form表单 //单文件上传,我的业务需求中限制了必须上传图片 <input type="file" name="singlename" ac ...