热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysqlchar约束_MySQL字符类型与约束条件

创建表完整的语法:createtable表名(字段名1类型[(宽度)约束条件],字段名2类型[(宽度)约束条件],字段名3类型[(宽度)约束条件]);注意事项

创建表完整的语法:

create table 表名(

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

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

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

);

注意事项:

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

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

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

宽度:对存储数据的限制。

例如:新建一个表,create table t1(name char);   char类型默认的宽度为1,此时向表格插入数据,Insert into t1 values('jason');  此时会有两种可能!

严格模式  (STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION)

非严格模式

报错,因为插入的数据宽度超过了默认宽度1

插入成功,但插入数据的结果只有 j ,只显示一位。

在MySQL中有很多中的模式(mode),例如存储数据时,可选择严格模式和非严格模式,选择两种模式存储数据的效果区别如上图;怎样查询此时MySQL使用什么模式:show variables like '%mode%'; 百分号是任意匹配的意思。

此时在严格模式下,我们想要成功将数据插入,就只能选择更改数据的宽度;alter table t1 motify name char(15); 再次插入之前的数据;Insert into t1 values('jason');插入成功。

设置严格模式

set session:当前窗口下有效

set global:全局有效,终生受用!

set global sql_mode = "STRICT_TRANS_TABLES";

# 设置完成后需要退出客户端,重新登录客户端即可,不需要重启服务端

初识约束条件:

null 与 nut null

create table t1(id int,name char not null);  #  name 数据类型为 char 并且约束条件为 不能为空null;

insert into t1 values(1,'j');  # 正常存储

insert into t1 values(2,null);  # 报错

总结:数据类型与约束条件之间的关系,字段类型限制的是存储数据的类型,约束条件是基于字段类型之上的附加的额外限制。

1 数据类型

整型与浮点型

ae65154b80dfcc5691ce011a0a5eea41.png

如上图向 t1 插入数据的操作,char 与 varchar 数据类型 在默认模式下,select * from t1; 是看不出差别的,必须使用语句:select char_length(name) from t1; 的方式才能准求查出插入数据的长度;

另外也可以选择修改模式来查看:set global sql-mode='strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH';

char vs varchar

char

varchar

优点:存取速度快,简单粗暴。

缺点:浪费空间

优点:节省空间

缺点:需要自动为数据制作报头,所以存取速度较慢。

枚举与集合

日期类型

枚举(enum):多选一

集合(set):多选多,虽然是多选多但是你可以只选一个

date 年月日

time 时分秒

datetime 年月日时分秒

year 年

create table t15(

id int,

birth date,

class_time time,

reg_time datetime,

yy year

);

insert into t15 values(1,"2000-01-21","11:11:11","2019-01-21 11:11:11","2019");

create table t16(

id int,

name char(6),

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

);

insert into t16 values(1,'egon','xxx');

create table t17(

id int,

name char(6),

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

hobby set('read','DJ','DBJ','run')

);

insert into t17 values(1,'tank','male',"read,DBJ,DJ");

2 约束条件

PRIMARY KEY (PK)    标识该字段为该表的主键,可以唯一的标识记录

FOREIGN KEY (FK)    标识该字段为该表的外键

NOT NULL    标识该字段不能为空

UNIQUE KEY (UK)    标识该字段的值是唯一的

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

DEFAULT    为该字段设置默认值

UNSIGNED 无符号

ZEROFILL 使用0填充

not null+default

create table user(

id int,

name char(16)

);

insert into user values(1,null) #可以修改

alter table user modify name char(16) notnull;

insert into user(name,id) values(null,2); #报错 插入数据可以在表名后面指定插入数据对应的字段

create table student(

id int,

name char(16) notnull,

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

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

unique

#单列唯一

create table user1(

id int unique,

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)

)

insert into server values(1,'127.0.0.1',8080);

insert into server values(2,'127.0.0.1',8080); #报错

insert into server values(1,'127.0.0.1',8081);

primary key+auto_increment

#单从约束角度来说primary key就等价于not null unique

create table t11(id int primary key);

desc t11;

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

insert into t11 values(1),(2);#除了约束之外,它还是innodb引擎组织数据的依据,提升查询效率

"""强调:

1.一张表中必须有且只有一个主键,如果你没有设置主键,那么会从上到下搜索直到遇到一个非空且唯一的字段自动将其设置为主键"""create table t12(

id int,

name char(16),

age intnotnull unique,

addr char(16) notnull unique

)engine=innodb;

desc t12;"""2.如果表里面没有指定任何的可以设置为主键的字段,那么innodb会采用自己默认的一个隐藏字段作为主键,隐藏意味着你在查询的时候无法根据这个主键字段加速查询了

索引:类似于书的目录,没有主键就相当于一页一页翻着查

3.一张表中通常都应该有一个id字段,并且通常将改id字段作成主键"""

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

create table t18(

ip char(16),

port int,

primary key(ip,port)

);

desc t18;#主键id作为数据的编号,每次最好能自动递增

create table t13(

id int primary key auto_increment,

name char(16)

);

insert into t13('jason'),('jason'),('jason'); #id字段自动从1开始递增#注意:auto_increment通常都是加在主键上,并且只能给设置为key的字段加

auto_increment:自增

create table t27(

id int primary key auto_increment,

name char(16)

);#联合主键

create table t28(

ip char(16),

port int,

primary key(ip,port)

);

desc t28;



推荐阅读
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了如何使用iptables添加非对称的NAT规则段,以实现内网穿透和端口转发的功能。通过查阅相关文章,得出了解决方案,即当匹配的端口在映射端口的区间内时,可以成功进行端口转发。详细的操作步骤和命令示例也在文章中给出。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
author-avatar
思念如此难受_351
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有