一 整形

  1. 只有Int类型跟存储没有关系,显示的是宽度,其他类型都是限制
  2. 整形类型;[(m)][unsigned][zerofill]
  3. 作用;存储年龄,等级,id,各种号码
  4. m,代表显示宽度 默认11 其他数据类型标识的就是几个字节,限制几个字节
  5. unsigned,代表 限制没有字符
  6. zerofill,代表 宽度显示不够,用0补全
  7.  
  8. 1 整数数字 默认有符号
  9. tinyint1个字节),int4个字节),bigint8个字节):注意一下,约束条件和范围
  10. 常用 int,bigint 其中int最为常用
  11. 因为有符号的原因,占用了一个bit位,所以在范围上,有无符号有差别的
  12. 1.1 tinyint1个字节) 2**8
  13. create table t1(id tinyint);
  14. alter table t1 modify id tinyint unsigned; 改成无符号,如果有数据 先要清空
  15. 小整数,数据类型用于保存一些范围的整数数值范围
  16. 有符号,-128 127
  17. 无符号,0 255
  18. 1.2 int4个字节) 2**32
  19. create table t1(id int);
  20. 整数,数据类型用于保存一些范围的整数数值范围:
  21. 有符号,-2147483648 2147483647
  22. 无符号,0 4294967295
  23. 1.3 bigint8个字节) 2**64
  24. create table t1(id bigint);
  25. 大整数,数据类型用于保存一些范围的整数数值范围:
  26. 有符号,-9223372036854775808 9223372036854775807
  27. 无符号,0 18446744073709551615
  28.  
  29. 1.2 宽度 不指定宽度,默认会有int 11,默认合理合法,11位包含了2**32有无符号都包括了
  30. alter table t1 modify id int(3); 修改宽度,是修改显示的宽度
  31. alter table t1 modify id int(8) zerofill; 显示宽度不够,用0补全,在前面补全
  32. 如果没有zerofill这个限制,select * from t1;查看没什么效果
  33.  
  34. ** 注意,修改有无符号,或者补全的时候,都是需要将表里数据清空
  35. 整数在约束上加上zerofill会自动添加无符号,unsigned

二 浮点数 默认有符号

  1. 浮点数 默认有符号
  2. decimal[(m[,d])] [unsigned] [zerofill]
  3. 准确的小数值,m是数字总个数(负号不算),d是小数点后个数。 m最大值为65d最大值为30
  4. 特别的;对于精确数值计算时需要用此类型
  5. decaimal能够存储精确值的原因在于其内部按照字符串存储。
  6.  
  7. FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] 4字节
  8. 单精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。
  9.  
  10. DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] 8字节
  11. 双精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。
  12.  
  13. 2.1 示例
  14. create table t1(salary float(5,2));
  15. insert into t1 values (3.4343);
  16. inster into t1 values (1111.22); 超出,报错
  17. 5是宽度限制,2表示小数点位数,所以整数最多3
  18.  
  19. ** 注意,浮点数在约束上加上zerofill会自动添加无符号,unsigned
  20.  
  21. 3 位类型 BIT 存储二进制,默认只能存储一位,也就是能存储01
  22. BIT(M)可以用来存放多位二进制数,M范围从1~64,如果不写默认为1位。
  23.   注意:对于位字段需要使用函数读取
  24.      bin()显示为二进制
  25.      hex()显示为十六进制
  26. 3 .1 示例
  27. create table t1(name bit);
  28. insert into t1 values(0),(1);
  29. 插入其他的就会报错了,或者你开始创建表的时候给默认宽度
  30. create table t1(name bit(4)); 代表四个比特位
  31. select * from t1; 查看不到因为是二进制
  32. select bin(x) from t5; 这样查看
  33. seleect hex(x) from t5; 十进制

三 位类型 BIT 存储二进制,默认只能存储一位,也就是能存储0,1

  1. 位类型 BIT 存储二进制,默认只能存储一位,也就是能存储01
  2. BIT(M)可以用来存放多位二进制数,M范围从1~64,如果不写默认为1位。
  3.   注意:对于位字段需要使用函数读取
  4.      bin()显示为二进制
  5.      hex()显示为十六进制
  6. 3 .1 示例
  7. create table t1(name bit);
  8. insert into t1 values(0),(1);
  9. 插入其他的就会报错了,或者你开始创建表的时候给默认宽度
  10. create table t1(name bit(4)); 代表四个比特位
  11. select * from t1; 查看不到因为是二进制
  12. select bin(x) from t5; 这样查看
  13. seleect hex(x) from t5; 十进制
  14.  
  15. 3.2 位数1 就是 0 2**0
  16. 位数2 就是 0 2**1+2**0 以此类推,最多64位,记住二进制的运算
  17. 通过bin(x)查询的结果就是二进制,
  18. 比如位数1 插入值是0 or 1结果就是 0 or 1
  19. 位数2 插入值是0 or 1 or 2 or 3 结果就是 0 or 1 or 10 or 11

四 char与varchar测试

  1. char 定长(不够凑够固定长度,浪费空间,存取效率快)
  2. varchar 变长(精准,计算出待放的数据长度,节省空间,效率低)
  3. 而且存储的时候,还需要存储头,用来取值的时候知道多少位
  4.  
  5. 2.1 示例
  6. create table t1(name char(4)); 表示四个字符,并不是显示字符,显示字符只有数字int是显示宽度
  7. insert into t1 values('alexsb') 存储不下来,太长了
  8. insert into t1 values('埃里克斯')
  9.  
  10. 2.2 二者区别
  11. create table t1(x char(5),y varchar(5));
  12. insert into t1 values('abcdef','abcddd'); 前后都会报错,都不能超过五个
  13. 区别在于,char 不够五个,用空格补全,varchar 有几个就是几个,但是都不能超五个
  14. 通过select * from t1;看不出来,需要通过内置函数来查看
  15. 查看字符长度,char_lenth
  16. select char_length(x),char_length(y) from t1; char_length :查看字符的长度,好像还是没有区别
  17. 看到可能还是3个字符,因为char的流氓性,所以需要更改下表限制
  18. SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH'; 看到char是定义时候的长度
  19. 在通过select char_length(x),char_length(y) from t1;查看
  20. insert into t7 values('你好啊','好你妹'); #char_length :查看字符的长度 5 3
  21. insert into t7 values('你好啊','好你妹'); #length:查看字节的长度 11 9 utf8中文 一个字符等于3个字节,英文数字就是一个字符就是一个字节
  22.  
  23. 2.3 空格
  24. #注意两点:如果查找条件正好满足限定字符,也是可以查到空格的,前后都可以,但是如果超这个限制,那么只有在后面的空格可以找到
  25. insert into t7 values('abc ','abc '); #空格算字符,查看字符长度就是 5 4 注意开始前提是给5个限制
  26. select * from t7 where y='abc '; #去掉末尾的空格然后去比较
  27. select * from t7 where y=' abc'; #前面是空格就不行了找不到
  28.  
  29. 2.4 其他字符串,无非是存储过长超过255的时候,cahr,varchar只支持255个字符,大文件存储就没必要存储在数据库里面
  30. 效率低,而且大,数据库存储名字,路径就好了

五 日期

  1. #注册时间
  2. datetime 2017-09-06 10:39:49
  3. #出生年月日,开学时间
  4. date:2017-09-06
  5. #聊天记录,上课时间
  6. time:10:39:49
  7. #出生年
  8. year:2017
  9.  
  10. 3.1 示例
  11. create table student(
  12. id int,
  13. name char(5),
  14. born_date date,
  15. born_year year,
  16. reg_time datetime,
  17. class_time time
  18. );
  19. 插入时间
  20. insert into student values(1,'alex',now(),now(),now(),now()); now当前时间
  21. insert into student values(1,'alex','2017-09-06','','2017-09-06 10:39:00','08:30:00');
  22.  
  23. 3.2 插入时间的其他插入写法,存储在数据库都是统一的格式,插入写法不一样而已
  24. insert into student values(1,'alex','2017-09-06',2017,'2017-09-06 10:39:00','08:30:00');
  25. insert into student values(1,'alex','2017/09/06',2017,'2017-09-06 10:39:00','08:30:00');
  26. insert into student values(1,'alex','',2017,'','');

六 枚举&集合

  1. enum 枚举 规定一个范围,可有多个值,但是为该字段插入值时,只能取规定范围中的其中一个
  2. set 规定一个范围,可有多个值,但是为该字段传值时,能取规定范围中的多个值
  3.  
  4. 4.1 示例
  5. create table student(
  6. id int primary key auto_increment,
  7. name char(5),
  8. sex enum('male','female'), 枚举
  9. hobbies set('music','read','study','coding') set
  10. );
  11. insert into student(name,sex,hobbies) values('egon','None','ddd')
  12. 查看的时候,就会看到不符合的都是空的,没有找到的也是空
  13. insert into student(name,sex,hobbies) values('egon','male','music,read')

七 约束条件&not null&default

  1. 5.1 not null default
  2.  
  3. 5.2 not null 示例
  4. create table student(
  5. id int primary key auto_increment, 主键递增
  6. name char(5),
  7. sex enum('male','female') not null
  8. );
  9. insert into student(name,sex) values('alex',NULL) 插入成功,性别为空
  10. 需要限制,不能为空
  11. sex enum('male','female') not null not null就是约束条件
  12. insert into student(name,sex) values('alex',null) 报错,因为不能空了
  13.  
  14. 5.3 default 示例
  15. create table student(
  16. id int primary key auto_increment, 主键递增
  17. name char(5),
  18. sex enum('male','female') , 默认值就是左边第一个
  19. age int
  20. );
  21. insert into student(name) values('alex'); 查看的效果就是除了名字后面都是NULL
  22. sex enum('male','female') not null 有默认参数,默认时第一个参数,还是从左边开始
  23. sex enum('male','female') not null default 'female' 修改默认值
  24. insert into t1(name) values('alex'); 就会看到,sex这块默认是female
  25. age int not null 加上这个,不为空,默认值是0
  26. age int not null default 30 不为空,默认值30

八 unique 唯一

  1. 6.1 示例
  2. #单列唯一
  3. create table teacher(
  4. id int not null unique, 有值且唯一,这样写相当于主键
  5. name char(10)
  6. );
  7. insert into teacher values(1,'egon');
  8. insert into teacher values(1,'alex');
  9. 插入报错,因为ID是唯一
  10.  
  11. 6.2 #多列唯一
  12. #255.255.255.255 IP地址最大的状态
  13. create table services(
  14. id int primary key auto_increment,
  15. name char(10),
  16. host char(15),
  17. port int,
  18. constraint host_port unique(host,port)
  19. );
  20. constraint 约束的意思,host_port 别名 unique(host,port) 表示这2个字段加起来都是唯一的,联合唯一
  21. insert into services values('ftp','192.168.20.17',8080);
  22. insert into services values('httpd','192.168.20.17',8081);
  23.  
  24. 6.3 primary key 唯一
  25. create table t8(x int,y int,primary key(x,y));
  26. 查看显示2个主键,其实是一个,是x,y和起来的主键
  27. insert into t1 values(1,2);
  28. insert into t1 valyes(1,3) 都不会报错,除非是插入后,在插入相同的就会报错了,x,y主键是合起来的

九 auto_increment_offset:偏移量

  1. 7.1 示例
  2. create table dep(
  3. id int primary key auto_increment,
  4. name char(10)
  5. );
  6. insert into dep(name) values('IT'),('HR'),('SALE'),('Boss');
  7. #修改默认值,从10开始记录ID
  8. create table dep1(
  9. id int primary key auto_increment,
  10. name char(10)
  11. )auto_increment=10; 修改默认从10开始,就是ID10开始
  12. insert into dep1(name) values('IT'),('HR'),('SALE'),('Boss');
  13.  
  14. 7.2 #auto_increment_increment:步长
  15. create table dep2(
  16. id int primary key auto_increment,
  17. name char(10)
  18. );
  19. set session auto_increment_increment=2; #会话级,只对当前会话有效,退出终端就断了
  20. set global auto_increment_increment=2; #全局,对所有的会话都有效
  21. insert into dep1(name) values('IT'),('HR'),('SALE'),('Boss');
  22.  
  23. 7.3 #auto_increment_offset和auto_increment_increment组合使用
  24. 注意:如果auto_increment_offset的偏移量值大于auto_increment_increment的步长值,则auto_increment_offset的值会被忽略
  25. set session auto_increment_offset=2; 就是从2这个位置开始,第二数据就是5
  26. set global auto_increment_increment=3;
  27. show variables like '%auto_in%'; 查看偏移量和步长
  28.  
  29. create table dep3(
  30. id int primary key auto_increment,
  31. name char(10)
  32. );
  33. insert into dep3(name) values('IT'),('HR'),('SALE'),('Boss');

十 foreign key 员工信息表

  1. 8.1 示例 部门信息
  2. #先建被关联的表,并且被关联的字段必须唯一
  3. create table dep(
  4. id int primary key auto_increment, 不为空,唯一,主键
  5. department varchar(50),
  6. comment varchar(100)
  7. );
  8.  
  9. #在创建关联的表 员工信息
  10. create table emp_info(
  11. id int primary key auto_increment,
  12. name varchar(20),
  13. dep_id int,
  14. constraint(约束) fk_depid_id foreign key(dep_id) references dep(id) 让员工关联部门
  15. on delete cascade 不需要先删除/修改被关联的表内容,后面没有逗号 和上面是一行
  16. on update cascade
  17. );
  18. foreign key(dep_id) references dep(id) 创建关联,dep_id自己的字段,references引用关联,dep表的字段
  19. constraint fk_depid_id 起个别名,跟unique一样
  20.  
  21. 8.2 #插入数据
  22. #先给被关联的表插入数据
  23. insert into dep values
  24. (1,'欧德博爱技术有限事业部','说的好'),
  25. (2,'艾利克斯人力资源部','招不到人'),
  26. (3,'销售部','卖不出东西');
  27.  
  28. #再给关联的表插入数据
  29. insert into emp_info values
  30. (1,'egon',1),
  31. (2,'alex1',2),
  32. (3,'alex2',2),
  33. (4,'alex3',2),
  34. (5,'李坦克',3),
  35. (6,'刘飞机',3),
  36. (7,'张火箭',3),
  37. (8,'林子弹',3),
  38. (9,'加特林',3);
  39.  
  40. 8.3 #删除操作
  41. delete update
  42. delete from dep where id=2 先删除被关联表
  43. delete from emp_info where dap_id=2 才能删除关联表
  44. update user set uid=10 where uid=2; 修改关联表,关联表有修改,但是被关联表没有被修改
  45. on delete cascade
  46. on update cascade
  47. 被关联的表删除或是修改,关联的表也会随之删除或是修改,这才合理
  48.  
  49. 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. D3.js学习笔记(一)——DOM上的数据绑定

    开始学习D3.js,网上没有找到很满意的中文教程,但是发现了一个很好的英文教程,讲解的非常详细.从一个初始简单的HTML网页开始,逐步加入D3.js的应用,几乎是逐句讲解.学习的时候,就顺便翻译成中文 ...

  2. java Graphics2d消除锯齿,使字体平滑显示

    Java 2D API 提供的文本处理功能进行美化.Java 2D API 的文本功能包括: 使用抗锯齿处理和微调(hinting)以达到更好的输出质量 可以使用系统安装的所有字体 可以将对图形对象的 ...

  3. linux sed使用(转)

    sed入门详解教程 sed 是一个比较古老的,功能十分强大的用于文本处理的流编辑器,加上正则表达式的支持,可以进行大量的复杂的文本编辑操作.sed 本身是一个非常复杂的工具,有专门的书籍讲解 sed ...

  4. docker安装脚本

    此docker安装脚本为官方提供的,可以从网上下载,此处直接把脚本内容贴上. #!/bin/sh set -e # This script is meant for quick & easy ...

  5. docker mysql 8.0

    Pull library/mysql $ docker pull mysql Load image $ docker load -i mysql.tar Save image $ docker sav ...

  6. IOS-SQLite3的封装

    IWStudent.h // // IWStudent.h // 02-SQLite的封装 // // Created by apple on 14-5-22. // Copyright (c) 20 ...

  7. 使用ZooKeeper实现Java跨JVM的分布式锁(读写锁)

    一.使用ZooKeeper实现Java跨JVM的分布式锁 二.使用ZooKeeper实现Java跨JVM的分布式锁(优化构思) 三.使用ZooKeeper实现Java跨JVM的分布式锁(读写锁) 读写 ...

  8. 理解 Promise 过程

    /** new Promise(fn1).then(function(val){ console.log(val); }) 主要是把 then 的函数抽取出来 , 利用闭包存放在 callback中, ...

  9. win7 无法链接到手机热点

    作为一个对电脑不太懂的小白来说,链接个热点都是问题,来看看我怎么解决的吧. 之前连上过这个手机的热点,隔了有段时间了,今天连不上了,这是啥问题? 另外一台没连过这个手机热点的电脑是可以链接成功了,纳尼 ...

  10. DataBase project physical design

    DataBase physical design //Table: /*student*/ create table student( id int not null primary key, /*学 ...