一 整形

 只有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')

七 约束条件&not 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数据类型&约束条件的更多相关文章

  1. python开发基础之数据类型、字符编码、文件操作

    一.知识点 1.身份运算: 2.现在计算机系统通用的字符编码工作方式:在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码.用记事本编辑的时候,从文件 ...

  2. Python开发——2.基本数据类型之数字和字符串

    一.基本数据类型 基本数据类型包括:数字(int).字符串(str).列表(list).元祖(tuple).字典(dict).布尔值(bool). 查看输出数据的类型 a = "123&qu ...

  3. Python开发——3.基本数据类型之列表、元组和字典

    一.列表(list) 1.列表的格式 li = [11,22,"kobe",["lakers","ball",11],(11,22,),{& ...

  4. 【Python开发】查看数据类型

    import types aaa = 0 print type(aaa) if type(aaa) is types.IntType: print "the type of aaa is i ...

  5. MySQL基本数据类型与约束条件

    昨日内容回顾 数据存储的演变 # 方向: 朝着更加统一和方便管理 数据库的发展史 # 由本地保存逐步演变为线上保存 数据库的本质 # 本质上就是一款CS架构的软件 """ ...

  6. Python开发【第十九篇】:Python操作MySQL

    本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...

  7. 第一篇:Win10系统搭建Python+Django+Nginx+MySQL 开发环境详解(完美版)

    Win10+Python+Django+Nginx+MySQL 开发环境搭建详解 PaulTsao 说明:本文由作者原创,仅供内部参考学习与交流,转载引用请注明出处,用于商业目的请联系作者本人. Wi ...

  8. Python开发【第十一篇】:Python操作MySQL

    本篇对于Python操作MySQL主要使用两种方式: 1.原生模块pymsql. 2.ORM框架SQLAchemy. pymsql pymsql是Python中操作MySQL的模块,其使用方法和MyS ...

  9. python开发_python操作mysql数据库

    如果你还没有准备好开发环境,你不妨花上一小点时间去看看:python开发_mysqldb安装 本篇blog是有关python操作mysql数据的相关内容. 我做了一个demo: 先看运行效果: mys ...

  10. Python进阶----数据库引擎(InnoDB),表的创建,mysql的数据类型,mysql表的约束

    Python进阶----数据库引擎(InnoDB),表的创建,mysql的数据类型,mysql表的约束 一丶MySQL的存储引擎 什么是存储引擎:    MySQL中的数据用各种不同的技术存储在文件( ...

随机推荐

  1. IT技术栈、JAVA技术栈、游戏开发技术栈

    一.形成IT思想,把各种技术融会贯通,使用时按需对技术选型. 二.对于每个知识点,框架的掌握依次分为三层. 1.会使用 2.熟悉原理 3.了解源码 三.思维导图

  2. spring3: schema的aop与Aspectj的aop的区别

    schema的aop如下: 接口: package chapter6.service; public interface IHelloAroundService { public void sayAr ...

  3. c#实现验证某个IP地址是否能ping通

    using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Net ...

  4. C++(二十) — 指针常量和常量指针

    1.const 常量概念 对于 const 定义的常量,必须在定义时初始化,不能在程序执行运行过程中改变. 2.指针常量.常量指针 区别 (1)技巧:从右向左读,替代方法: p:换为  p is a: ...

  5. python中配置文件的使用

    一. 什么是配置文件?为什么要做配置文件? 将所有的代码和配置都变成模块化可配置化,这样就提高了代码的重用性,不再每次都去修改代码内部,这个就是我们逐步要做的事情,可配置化 二. python中的Co ...

  6. Mybatis输入和输出映射(parameterType和resultType的区别)

    parameterType                                                                             resultType ...

  7. idea结合git使用三

    1.将本地代码提交到码云上面的步骤 2.先提交到本地Git的仓库,通过commit files 3.然后vcs----->git---->push,将本地仓库代码,推送到码云公司项目mas ...

  8. js & jquery数组介绍

    (转自:http://www.jb51.net/article/30793.htm) 1.数组的创建 var arr=new Array(); 2.查找数组中的元素 for(var i=0;i< ...

  9. SSM三大框架整合(Spring+SpringMVC+MyBatis)

    一. 导包 18个必须的包 二.配置Spring MVC的web文件 <?xml version="1.0" encoding="UTF-8"?> ...

  10. Could not publish server configuration for Tomcat v6.0 Server at localhost.错误问题解决

    经常在使用tomcat服务器的时候 总会发生一些莫名其妙的错误. 就像下面这个错误: 在配置文件中存在多个/MyWeb的配置,导致不能发布服务. 错误信息: Could not publish ser ...