02 字段类型和约束条件

创建表完整语法
字段类型
整形
浮点型
字符类型
char定长字符
varchar不定长字符
日期类型
枚举与集合
约束条件
not null + unique
primary key + auto_increment
foreign key
default
unsigned
zerofill

TOC

创建表完整语法

约束条件:可有可无

宽度:限制某些数据类型的存储大小

create table 表名(
    字段名1 字段类型(宽度) 约束条件,
    字段名2 字段类型(宽度) 约束条件
);

初始约束条件: not null

create table teacher(
    id int not null,  # 约束插入记录时id不能为空
    name varchar(16),
    age int
);

insert into teacher values(null, ‘tank‘, 17);
insert into teacher values(1, ‘tank‘, 17);

字段类型

1、确认表结构

2、字段与字段类型

整形

tinyint: 默认范围 -128, 127

create table t5(
    id tinyint,
    name varchar(16)
);

insert into t5 values(-128, ‘tank‘), (127, ‘jason‘);
insert into t5 values(-129, ‘tank‘);
insert into t5 values(128, ‘jason‘);
insert into t5 values(12, ‘sean‘);

int:默认范围是(-2147483648, 2147483647)

应用场景:id号、年龄...

create table t6(
    id int
);

# 如果指定子段类型的时候没有给出宽度,int类型会默认为11,也会默认展示宽度
insert into t6 values(-2147483649);
insert into t6 values(2147483648);
insert into t6 values(100);

create table t7(
    id int(3)
);

# 若插入超过设定宽度,则正常显示
insert into t7 values(123456);

# 若插入不足够设定的宽度,则以空格补全
insert into t7 values(1);

浮点型

应用场景:工资、身高、体重....

  • float
  • double
  • decimal

三种方式示例

# 范围255是最大长度(包括.小数), 30代表是小数的位数
create table t8(x float(255, 30));
create table t9(x double(255, 30));
create table t10(x decimal(65, 30));

# 插入数据
# 三种浮点型: 区别在于精确度不一样
insert into t8 values(1.111111111111111111111111111111);
insert into t9 values(1.1111111111111111111111111111);
insert into t10 values(1.1111111111111111111111111111);

字符类型

char定长字符

  • 优点

    • 存取速度快(不用读取长度)
  • 缺点
    • 浪费空间

char: 手机号、身份证号、银行卡号等...

# 创建表,限制字符宽度为4
create table t11(
    id int,
    name char(4)
);

# 此时正常插入4个字符
insert into t11 values(1, ‘tank‘);

# 不足4个字符,会以空格补全,任然占用4个字符
insert into t11 values(1, ‘t‘);  # t+三个空格

varchar不定长字符

存入几个字符的数据,会在前面加上1bytes,因此最终大小就是实际数据的字符大小加上1bytes

  • 优点

    • 节省空间
  • 缺点
    • 查取速度慢(需要先读取1bytes确定数据长度,再去读取数据)
create table t12(id int, name varchar(4));
insert into t12 values(1, ‘egon‘);  # 1bytes + egon
insert into t12 values(2, ‘tank‘);  # 1bytes + tank
insert into t12 values(3, ‘sean‘);  # 1bytes + sean

insert into t12 values(4, ‘t‘);  # 1bytes + t
1bytes + egon  、 1bytes + tank、 1bytes + sean

日期类型

  • date: 2019-12-11
  • datetime: 2019-12-11 11:11:11
  • time: 11:11:11
  • year: 2019
  • timestamp: 时间戳,修改数据的时候,时间戳会变为当前修改操作的时间
create table student(
    id int,
    name varchar(4),
    birth date,
    register datetime,
    work_time year,
    t_time time,
    update_time timestamp
);

insert into student values(1, ‘张全蛋‘, ‘2019-11-11‘, ‘2019-11-11 11:11:11‘,‘2019‘, ‘11:11:11‘, null);
insert into student values(2, ‘HCY‘, ‘1000-11-11‘, ‘1980-11-11 11:11:11‘,‘2019‘, ‘11:11:11‘, null);

枚举与集合

enum:多选一

创建表的时候,给字段多个值,插入数据的时候,该字段的数据必须是创建表的时候给字段值的范围内,且只能选择其中的一个,不能多选。

create table t13(
    id int,
    name varchar(4),
    gender enum(‘male‘, ‘female‘, ‘others‘)
);

# insert into 表名(字段名) values(字段名对应的值);
insert into t13(id, name, gender) values(1, ‘tank‘, ‘male‘);

# 严格模式下,选择枚举以外的值会报错
insert into t13(id, name, gender) values(2, ‘gd‘, ‘人Y‘);

set:多选一 或 多选多

创建表的时候,给字段多个值,插入数据的时候,该字段的数据必须是创建表的时候给字段值的范围内,可以多选一,也可以选择多个。

create table t14(
    id int,
    name varchar(4),
    gender enum(‘male‘, ‘female‘, ‘others‘),
    hobbies set(‘read‘, ‘sing‘, ‘生蚝‘, ‘HSNM‘, ‘架子鼓‘)
);

# 多选一
insert into t14 values(1, ‘大鸡J‘, ‘others‘, ‘HSNM‘);
# 多选多
insert into t14 values(2, ‘tank‘, ‘male‘, ‘read,架子鼓,sing,生蚝‘);

# 多选多的顺序可不一
insert into t14 values(2, ‘tank‘, ‘male‘, ‘read,架子鼓,sing,生蚝‘);

约束条件

not null + unique

null:空,限制该字段可以为空

not null非空,限制该字段的值不能为空

unique唯一,限制该字段的值不能重复

not null 和 unique加起来的效果就相当于主键的效果

# 非空
create table user1(
    id int not null,
    name varchar(4)
);

insert into user1(id, name) values(null, ‘tank‘);
insert into user1(id, name) values(1, ‘tank‘);

# unique 将某个字段设置为唯一的值
create table user2(
    id int not null unique,
    name varchar(4)
);

insert into user2(id, name) values(1, ‘tank‘), (2, ‘sean‘);

primary key + auto_increment

primary key,主键,就是表中的索引,可以通过索引快速查找到某些数据,提高查询速度。

主键具有非空和唯一的特性

# 将id设置为主键,非空切唯一
create table user3(
    id int primary key,
    name varchar(4)
);

insert into user3(id, name) values(1, ‘tank‘);
insert into user3(id, name) values(2, ‘tank‘);

auto_increment:自增长

# 将id设置为自增
create table user4(
    id int primary key auto_increment,
    name varchar(4)
);

# 自增默认从0开始
insert into user4(name) values(‘tank‘);
insert into user4(name) values(‘sean‘);
insert into user4(name) values(‘egon‘);
insert into user4(name) values(‘大鸡哥‘);

# 若想自增从指定值开始,可插入第一条数据时先指定id的值;
insert into user4(id, name) values(10, ‘tank‘);
insert into user4(name) values(‘sean‘);  # 11
insert into user4(name) values(‘egon‘);  # 12
insert into user4(name) values(‘大鸡哥‘);  # 13

当表中有自增长时,清空表中所有的数据,需要使用truncate,如果使用delete,并不会将自增长的字段恢复默认初始值0,而truncate不仅可以清空表中的数据,还可以将自增长字段重置为0。

create table user8(
    id int primary key auto_increment,
    name varchar(4)
);

insert into user8(name) values(‘tank‘);
insert into user8(name) values(‘大大大‘), (‘egon‘);

# 使用delete清空表中的数据
delete from user8;

# 使用truncate清空表中的数据,并且会将ID字段的自增长的值重置为0
truncate table user8;

foreign key

标识该字段为该表的外键

default

为该字段设置默认值

# not null + default
create table student(
    id int,
  name varchar(16) not null,
  gender enum(‘male‘, ‘female‘, ‘others‘) default ‘male‘
);

insert into student(id, name) values(1, ‘tank‘);
insert into student(id, name, gender) values(2, ‘jason‘, ‘female‘);

unsigned

无符号模式,限制该字段插入的值中不能带有正负符号

create table user5(
    id int unsigned
);

# 报错
insert into user5 values(-100);

# 无符号,正常插入值
insert into user5 values(0);
insert into user5 values(100);

zerofill

当字段的长度没有达到限定的宽度时,使用0代替空格填充

create table user8(
    id int primary key auto_increment,
    name varchar(4)
);

insert into user7 values(100);

来自为知笔记(Wiz)

原文地址:https://www.cnblogs.com/cnhyk/p/12024897.html

时间: 2024-07-30 16:22:55

02 字段类型和约束条件的相关文章

数据引擎 创建表完整语法,字段类型,约束条件

数据引擎 创建表完整语法,字段类型,约束条件 回顾: 1.设置密码与修改密码 mysqladmin -uroot -p password设置的密码 mysqladmin -uroot -p原密码 password新密码 2.破解密码 - 1.先关掉服务,杀死进程 - 2.跳过权限认证启动服务端 - 3.以游客的身份登录即可 3.制作服务 - 1.mysql --install - 2.net start mysql 4.语法: 库的操作: 增: create database 库名; creat

Mysql 字段类型与约束条件

一.数值类型 二.日期类型 三.枚举与集合 四.约束条件 五.设置严格模式 一.数值类型 1.1 整型 应用场景: id号.年龄... tinyint: 有符号:默认范围 -128, 127 无符号:默认范围 0,255 #tinyint 默认有符号: create table t1(id tinyint, name varchar(16) ); insert into t1 values(-128,'tank'),(127,'jason'); insert into t1 values(-12

MySQL 存储引擎 字段类型 约束条件

? 1.存储引擎 ? - 存储引擎是用于根据不同的机制处理不同的数据. ? - 查看mysql中所有引擎: ? - show engines; - myisam: 5.5以前老的版本使用的存储引擎 - blackhole: 类似于队列中的数据,存进去消失 - innodb: 默认使用存储引擎 - 支持事务 - 行锁 - 外键 - memory: 通电数据存在,断电丢失 create table t1(id int)engine=innodb; create table t2(id int)eng

Mysql字段操作—增加字段、删除字段、修改字段名、修改字段类型(约束条件) 【转】

1.增加字段:    alter table   tablename    add   new_field_id   type   not null default '0';     例:     alter table mmanapp_mmanmedia add appid_id integer not null default 372; 增加主键: alter table  tabelname   add   new_field_id   type    default 0 not null

sqlserver字段类型

bit    整型 bit数据类型是整型,其值只能是0.1或空值.这种数据类型用于存储只有两种可能值的数据,如Yes 或No.True 或False .On 或Off. 注意:很省空间的一种数据类型,如果能够满足需求应该尽量多用. tinyint   整型 tinyint 数据类型能存储从0到255 之间的整数.它在你只打算存储有限数目的数值时很有用.这种数据类型在数据库中占用1 个字节. 注意:如果bit类型太单调不能满足您的需求,您可以考虑用tinyint类型,因为这个类型相对也是比较安全的

MsSQL的字段类型--(转载)

转载:http://www.cnblogs.com/skylaugh/archive/2006/07/31/464107.html 数据类型是数据的一种属性,表示数据所表示信息的类型.任何一种计算机语言都定义了自己的数据类型.当然,不同的程序语言都具有不同的特点,所定义的数据类型的各类和名称都或多或少有些不同.SQLServer提供了25种数据类型: ·Binary[(n)] ·Varbinary[(n)] ·Char[(n)] ·Varchar[(n)] ·Nchar[(n)] ·Nvarch

【DataBase】sqlserver字段类型详解

bit    整型 bit数据类型是整型,其值只能是0.1或空值.这种数据类型用于存储只有两种可能值的数据,如Yes 或No.True 或False .On 或Off. 注意:很省空间的一种数据类型,如果能够满足需求应该尽量多用. tinyint   整型 tinyint 数据类型能存储从0到255 之间的整数.它在你只打算存储有限数目的数值时很有用.这种数据类型在数据库中占用1 个字节. 注意:如果bit类型太单调不能满足您的需求,您可以考虑用tinyint类型,因为这个类型相对也是比较安全的

sqlserver字段类型详解

抄了一篇不错的数据库类型,来自:http://www.cnblogs.com/andy_tigger/archive/2011/08/21/2147745.html bit 整型 bit数据类型是整型,其值只能是0.1或空值.这种数据类型用于存储只有两种可能值的数据,如Yes 或No.True 或False .On 或Off. 注意:很省空间的一种数据类型,如果能够满足需求应该尽量多用. tinyint 整型 tinyint 数据类型能存储从0到255 之间的整数.它在你只打算存储有限数目的数值

Access sql语句创建表及字段类型(转)

http://www.cnblogs.com/hnyei/archive/2012/02/23/2364812.html 创建一张空表: Sql="Create TABLE [表名]" 创建一张有字段的表: Sql="Create TABLE [表名]([字段名1] MEMO NOT NULL, [字段名2] MEMO, [字段名3] COUNTER NOT NULL, [字段名4] DATETIME, [字段名5] TEXT(200), [字段名6] TEXT(200))