MySQL 数据类型简介 创建数据表及其字段约束

数据类型介绍

MySQL 数据类型分类

  • 整型
  • 浮点型
  • 字符类型(char与varchar)
  • 日期类型
  • 枚举与集合

具体数据类型见这篇博客

MySQL表操作中的约束

  • primary key 主键约束 非空+唯一
  • unique key 唯一约束
  • not null 非空约束
  • foreign key 外键约束

创建表的的语法

CREATE TABLE[IF NOT EXISTS] tbl_name(字段名称字段类型[完整性约束条件])ENGINE=引擎名称 CHARSET='编码方式”

⚠️注意:

  1. 在同一张表中,字段名不能相同
  2. 宽度和约束条件可选,字段名和类型是必须的
  3. 最后一个字段后不能加逗号!

整型

  • 分类:TINYINT SMALLINT MEDIUMINT INT BIGINT
  • 作用:存储年龄,等级,id,各种号码等
create table t1(id tinyint); # 创建 tinyint类型 tinyint 范围-128-128
create table t2(x tinyint unsigned); # 创建无符号整数

强调

对于整型来说,数据类型后的宽度并不是存储限制,而是显示限制,所以在创建表时,如果字段采用的是整型类型,完全无需指定显示宽度, 默认的显示宽度,足够显示完整当初存放的数据

浮点型

  • 分类:FLOAT DOUBLE decimal
  • 应用场景:身高,体重,薪资

字段限制特点(5,3)前一位表示所有的位数,后一位表示小数个数

字符类型

  • 分类 char(定长) varchar(变长)
  • 作用:姓名,地址,描述类信息
create table t10(name char(4))  # 超出四个字符报错,不够四个字符空格补全
create table t11(name varchar(4))  # 超出四个字符报错,不够四个有几个就存几个

时间类型

  • 分类

    • date:2019-05-01

    • time:11:11:11

    • Datetime: 2019-01-02 11:11:11

    • Year:2019

create table student(id int,name char(16),born_year year,birth date,study_time time,reg_time datetime
);

枚举与集合类型

  • 分类
    • 枚举enum 多选一
    • 集合set 多选多

枚举

create table user(id int,name char(16),gender enum('male','female','others')
);

插入下面数据时第一句就会报错因为XXX不在创建的枚举类型中

insert into user values(1,'小明','xxx')  # 报错
insert into user values(2,'二明','female')  # 正确!

集合

create table teacher(id int,name char(16),gender enum('male','female','others'),hobby set('read','sleep','run','singing')
);

插入的时候只要是插入的数据在集合中就可以,值可以没有(MySQL80),可以是一个,也可以全都是。

insert into teacher values(1,'小明','male','read,sleep') 

约束条件

  • PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录
  • FOREIGN KEY (FK) 标识该字段为该表的外键
  • NOT NULL 标识该字段不能为空
  • UNIQUE KEY (UK) 标识该字段的值是唯一的
  • AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键)
  • DEFAULT 为该字段设置默认值
  • UNSIGNED 无符号
  • ZEROFILL 使用0填充

not null+default

有时候插入数据的时候,要限制不为空,但是这个时候没有插入值,我们可以设置默认值,让默认值去填充没有插入的数据

create table student2(id int,name char(16) not null,gender enum('male','female','others') default 'male'
);

当设置字段的默认值的时候,不写数据也不会出错

insert into student2(id,name) values(1,'小明') 
mysql> select * from student2;
+------+--------+--------+
| id   | name   | gender |
+------+--------+--------+
|    1 | 小明   | male   |
+------+--------+--------+

unique

单列唯一


create table user1(id int unique, name char(16)
);
insert into user1 values(1,'小明'),(1,'小蓝')  # 报错
insert into user1 values(1,'小明'),(2,'小蓝')  # 成功

联合唯一

将多个字段设置为唯一,只有当多个字段的值出现重复时才会出现错误。

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,指定not null 和unique两个字段的时候也会将字段设置为主键。

除了约束之外,它还是innodb引擎组织数据的依据,提升查询效率。

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

如果表里面没有指定任何的可以设置为主键的字段,那么innodb会采用自己默认的一个隐藏字段作为主键,隐藏意味着你在查询的时候无法根据这个主键字段加速查询了
索引:类似于书的目录,没有主键就相当于一页一页翻着查

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

主键

create table t12(id int primary key,name char(16),age int not null unique,addr char(16) not null unique
)engine=innodb;
desc t12;-- 将ID字段设置为主键
mysql> desc t12;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id    | int(11)  | NO   | PRI | NULL    |       |
| name  | char(16) | YES  |     | NULL    |       |
| age   | int(11)  | NO   | UNI | NULL    |       |
| addr  | char(16) | NO   | UNI | NULL    |       |
+-------+----------+------+-----+---------+-------+

联合主键

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

create table t18(ip char(16),port int,primary key(ip,port)
);mysql> desc t18;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| ip    | char(16) | NO   | PRI | NULL    |       |
| port  | int(11)  | NO   | PRI | NULL    |       |
+-------+----------+------+-----+---------+-------+

转载于:https://www.cnblogs.com/ruhai/p/10882946.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362708.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

elementUI的container布局设置全屏宽度

进用element UI的 container 布局,发现不能全屏铺满 添加了一行代码: .el-container{height:100%;padding:0;margin:0;width:100%;}发现高度占满全屏,但是宽度还没有 继续给 html,body加了 width:100%;还是没有任何…

【转】首次敏捷项目开发实践

首次采用敏捷方式进行开发,我想把我们的做法与大家分享下,同时希望大家指出我们的不足和需要改进的地方,让我们的项目进行的更顺利,目前项目已过三分之一,客户比较满意,还算顺利。项目简介:一个…

CSS border-radius边框圆角

在CSS3中提供了对边框进行圆角设定的支持,可对边框1~4个角进行圆角样式设置。 目录 1. 介绍 2. value值的格式和类型 3. border-radius 1~4个参数说明 4. 在线示例 1. 介绍 1.1 圆角属性 CSS3提供了5种圆角属性 border-radius :同时设置4个边框的…

element实现动态路由+面包屑

要掌握:localStorage,组件封装 ​​​​ emm,第一次上传视频转gif的图片,效果不咋好。。。 视频转gif 的软件连接 http://www.zxt2007.com/downloads.html 找到一个可以截取部分视频制作gif图的软件https://soft.onlinedo.cn/gif…

Matlab——矩阵运算 矩阵基本变换操作

矩阵运算 加 - 减 .* 乘 ./ 左除 .\ 右除 .^ 次方 . 转置 除了加减符号,其余的运算符必须加“.” >> a 1:5a 1 2 3 4 5>> a-2 %减法ans -1 0 1 2 3 >> 2.*a-1 %乘法 减法ans 1 3 5 7 9 >&g…

Oracle最新的Java 8更新破坏了您的工具-它是如何发生的?

如果您最近一直在关注Java世界的消息,那么您可能听说过Oracle发布的最新Java 8构建,Java 8u11(和Java 7u65)引入了错误并破坏了一些流行的第三方工具,例如ZeroTurnaround的JRebel,Javassist,Goo…

为什么选择Dojo - 记Dojo中文博客正式开张

公告栏里写到:Dojo的高门槛一旦跨过,必将别无所求。含义有二:第一,Dojo难学;第二,Dojo很强大。 这也揭示了本博客的目标:帮助大家用好Dojo这个优秀的Ajax框架。 在回答为什么选择Dojo之前&#…

ExtJS 4.2 第一个程序

本篇介绍如何创建一个ExtJS应用程序。并通过创建目录、导入文件、编写代码及分析代码等步骤来解释第一个ExtJS程序。 目录 1. 创建程序 1.1 创建目录建议 1.2 实际目录 1.3 index.html 1.4 运行图 2. 代码分析 2.1 Ext.onReady() 2.2 Ext.create() 1. 创建程序 1.1 创建目录…

ZooKeeper,策展人以及微服务负载平衡的工作方式

Zookeeper如何确保每位工人都能愉快地从工作委托经理那里得到一些工作。 Apache ZooKeeper是注册,管理和发现在不同计算机上运行的服务的工具。 当我们必须处理具有许多节点的分布式系统时,它是技术堆栈中必不可少的成员,这些节点需要知道其…

elementUI清空弹框中的表单数据

点击此处直达应用场景示例 官网&#xff1a;https://element.eleme.cn/#/zh-CN/component/form 补充&#xff1a;改变表头颜色&#xff1a; <el-table :data"tableData" border style"width: 100%" :header-cell-style"{background:#d3dce6,col…

(一)PHP基础知识考察点

1&#xff0c;PHP引用变量的考察点&#xff1a; 概念&#xff1a;引用就是用不同的名字访问同一个变量内容。 定义方式&#xff1a; 使用&符号。 PHP引用变量的工作原理 这里有个COW copy on write 用zval&#xff08;&#xff09;去查看空间占用情况以及引用情况。 unse…

.Net4.0 Parallel编程(三)Data Parallelism下

在上篇文章中介绍了如何Break、Stop循环&#xff0c;以及如何定义线程局部变量。在本文中介绍如何在外部去取消循环、以及异常的处理。 Cancel 在并行的循环中支持通过传递ParallelOptions参数中的CancellationToken进行取消循环的控制&#xff0c;我们可以CancellationTokenSo…

节点的运用和方法

JQUERY的父&#xff0c;子&#xff0c;兄弟节点查找方法 jQuery.parent(expr) 找父亲节点&#xff0c;可以传入expr进行过滤&#xff0c;比如$("span").parent()或者$("span").parent(".class") jQuery.parents(expr),类似于jQuery.parents(ex…

Java:使用终止信号确定数据导入的状态

几周前&#xff0c;我正在尝试将约6000万位数据最初导入Neo4j&#xff0c;但我们一直遇到一个问题&#xff0c;即导入过程似乎停滞了&#xff0c;什么也没导入。 很难分辨该过程中发生了什么—采取线程转储只是告诉我们它正在尝试处理CSV行中的一行&#xff0c;并且以某种方式…

根据可视窗口判断面板向上还是向下展开

本demo以element-ui框架为视图模板~ HTML代码 JS代码 CSS代码 转载于:https://www.cnblogs.com/dreamsqin/p/10885502.html

关于几本模拟IC设计书

1.P.R.Gray的书  这本书被业界誉为模拟IC的Bible&#xff0c;盛名之下&#xff0c;必无虚士。现在已经出到第四版&#xff0c;作者无一例外是业界大牛&#xff0c;该书论述严谨&#xff0c;思路清晰&#xff0c;对电路分析透彻&#xff0c;定义严格明确&#xff0c;无愧Bible…

编写JUnit测试的另一种方法(Jasmine方法)

最近&#xff0c;我为一个小型个人项目编写了很多Jasmine测试。 我花了一些时间才终于感到正确地完成了测试。 此后&#xff0c;当我切换回JUnit测试时&#xff0c;我总是很难过。 出于某种原因&#xff0c;JUnit测试不再那么好&#xff0c;我想知道是否有可能以类似于Jasmine的…

H5 input输入限制最大位数,和调用小键盘需求发生冲突的解决办法

首先&#xff0c;限制输入最大位数时&#xff0c;input有自带的属性maxlength。 <input type"text" name"email" maxlength"55" /> 使用方法&#xff1a;maxlength"位数" 但是&#xff0c;对于这个属性他是有自己的限制条件的 …

解决vue项目在ie浏览器中不显示的问题

安装 “babel-polyfill” npm install babel-polyfill --save-dev 或者 cnpm install babel-polyfill --save-dev在入口 main.js 文件引入&#xff1a;import babel-polyfill在 build 文件下的 webpack.base.conf.js 文件中修改代码&#xff1a; entry: {app: ["babel-p…