创建表完整的语法:

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 数据类型

  整型与浮点型

  如上图向 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) not null;
insert into user(name,id) values(null,2); # 报错 插入数据可以在表名后面指定插入数据对应的字段 create table student(
id int,
name char(16) not null,
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 int not null unique,
addr char(16) not null 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;
 

MySQL-字符类型与约束条件的更多相关文章

  1. mysql字符类型大小写敏感的讨论

    mysql字符类型默认是不区分大小写的,即select * from t where name='AAA'与='aaa'没区别,以下是测试的例子 (root)); (root,,,,'BbB'); ( ...

  2. MySQL字符类型datetime与timestamp

    这片博客来详细分区一下这哥俩! 首先来说明这两个字符类型: DATETIME 8 1000-01-01 00:00:00 ~9999~12-31 23:59:59 0000-00-00 00:00:0 ...

  3. mysql string types ---- mysql 字符类型详解

    一.mysql 中包涵的字符类型: [national] char [(m)] [character set charset_name] [collate collation_name] [natio ...

  4. mysql字符类型

    字符类型 #官网:https://dev.mysql.com/doc/refman/5.7/en/char.html #注意:char和varchar括号内的参数指的都是字符的长度 #char类型:定 ...

  5. MySQL字符类型学习笔记

    目录 一.字符集和字符编码 1.1.字符集 1.2.字符编码 二.字符集排序规则 2.1.排序规则定义 2.2 .排序规则特征 三.CHAR和VARCHAR 3.1.CHAR类型 3.2.VARCHA ...

  6. MySQL 字符类型

    字符类型 MySQL提供了多种关于字符存储的类型,但是在大多数情况下我们只使用char和varchar即可 类型 大小 用途 CHAR 0-255字节 定长字符串 VARCHAR 0-65535 字节 ...

  7. Mysql 字段类型与约束条件

    一.数值类型 二.日期类型 三.枚举与集合 四.约束条件 五.设置严格模式 一.数值类型 1.1 整型 应用场景: id号.年龄... tinyint: 有符号:默认范围 -128, 127 无符号: ...

  8. Mysql字符类型比较

    一. binary和char比较: binary 字节为单位,char字符为单位,字符占几个字节取决于字符集 binary  比较规则基于字节值,char基于字符,即使是_bin的比较规则 范围都0- ...

  9. MYSQL字符类型数值排序

    今天遇到MySQL数字排序问题,我的排序字段是经过计算后的,而计算后的字段直接拿来排序就会按照字符一个个排序,所以这里找到简单的方法, ORDER BY 排序字段* 或者 ORDER BY 排序字段+ ...

  10. mysql字符类型总结及常用字符函数

    常用字符串函数: concat(s1,s2,s3..)       连接s1,s2,...sn为一个字符串 INSERT(str,x,y,instr)将字符串str从x位置开始,y个字符串替换为字符串 ...

随机推荐

  1. qtp12版本下载安装破解教程

    下载链接:https://download.csdn.net/download/weixin_41479750/11240466 下面是安装教程: 解压完成之后,双击运行setup.exe 之后点击运 ...

  2. 关于autoupgader的狗屎问题

    由于win7和xp的权限问题,导致这个自动升级玩意不正常.这个狗屎问题很简单,把exe文件的兼容性设定该一下.真是气死洒家了.

  3. html绑定点击事件传值

    1.方法1function radioSelect(event){ var valueRadio=event.value; if(valueRadio =='目的口岸'){ return '目的口岸' ...

  4. Java并发之CAS与AQS简介

    1,什么是CAS CAS(Compare And Swap),即比较并交换.是解决多线程并行情况下使用锁造成性能损耗的一种机制,CAS操作包含三个操作数——内存位置(V).预期原值(A)和新值(B). ...

  5. (转载)Html解析工具Jsoup

    jsoup 简介Java 程序在解析 HTML 文档时,相信大家都接触过 htmlparser 这个开源项目,我曾经在 IBM DW 上发表过两篇关于 htmlparser 的文章,分别是:从 HTM ...

  6. 修改oracle客户端的字符集

    客户端字符集环境select * from nls_instance_parameters,其来源于v$parameter, 表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表 方法有 : ...

  7. 谋哥:App开发人员的苦逼不值得怜悯!!

    [谋哥每天一干货,第四十篇]         为什么取这个标题呢?由于昨天一些本来"支持"谋哥的人看到谋哥搞收费VIP群,认为谋哥赚苦逼开发人员的钱非常不道德,且说谋哥我写的东西都 ...

  8. 【概率证明】—— sum and product rules of probability

    1. sum and product rules of probability ⎧⎩⎨p(x)=∫p(x,y)dyp(x,y)=p(x|y)p(y) sum rule of probability 的 ...

  9. java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'user'

    转自: https://blog.csdn.net/Winter_chen001/article/details/77332944

  10. linux 在线实验

    https://www.shiyanlou.com/courses/running/2