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中的数据用各种不同的技术存储在文件( ...
随机推荐
- C# 捕获数据库自定义异常
在 SQL Server 的存储过程中根据业务逻辑的要求,有时需要抛出自定义异常,由C#程序俘获之并进行相应的处理.SQL Server 抛出自定义异常和简单,像这样就可以了:RAISERROR('R ...
- python学习笔记(arange函数与linspace函数)
上一篇提及到matplotlib模块.其中会涉及到numpy模块科学计数 这里总结两个数组生成函数 arange 与 linspace: #!/usr/bin/env python # -*- cod ...
- MFC--自定义CMFCTabCtrl的实现
在MFC实现桌面程序时,可能会用到TabView效果,我实现的是最基本的效果,如下图: 下面介绍详细的实现过程,如果需要效果更好看些,自行美化. 1. 创建自定义MFCTabCtrl类MyMFCTa ...
- spring mvc:复选框(多选)
以user为例,user下有 username用户,password密码, address地址, receivePaper是否订阅, favotireFramework兴趣爱好, user.java ...
- android6.0、7.0、8.0新特性总结之开发应用时加以考虑的一些主要变更。
android6.0 参考一:简书Android 6.0 新特性详解 参考二:关于Android6.0以上系统的权限问题 参考三:值得你关注的Android6.0上的重要变化(一) 参考四:值得你关注 ...
- Cassandra key说明——Cassandra 整体数据可以理解成一个巨大的嵌套的Map Map<RowKey, SortedMap<ColumnKey, ColumnValue>>
Cassandra之中一共包含下面5种Key: Primary Key Partition Key Composite Key Compound Key Clustering Key 首先,Prima ...
- 010——VUE中使用lodash库减少watch对后台请求的压力
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- (转)程序员应该知道的10个eclipse调试技巧
调试不仅可以查找到应用程序缺陷所在,还可以解决缺陷.对于Java程序员来说,他们不仅要学会如何在Eclipse里面开发像样的程序,更需要学会如何调试程序.本文介绍了Java程序员必知的10个调试技巧, ...
- react: typescript-webpack项目基本配置
1.webpack.config.js basic const webpack = require('webpack'); const autoprefixer = require('autopref ...
- Qt之图形(QPainterPath)
简述 QPainterPath 类(绘图路径)提供了一个容器,用于绘图操作,可以创建和重用图形形状. 绘图路径是由许多图形化的构建块组成的对象,例如:矩形.椭圆.直线和曲线.构建块可以加入在封闭的子路 ...