创建表完整的语法:

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. jQuery Webcam Plugin jscam.swf文件反编译工具使用说明

    jQuery webcam plugin是一个在ie,firefox,chrome下都可以用的摄像头摄像及拍照用的插件. (http://www.xarg.org/project/jquery-web ...

  2. 【hihocoder 1297】数论四·扩展欧几里德

    [题目链接]:http://hihocoder.com/problemset/problem/1297 [题意] [题解] 问题可以转化为数学问题 即(s1+v1*t)%m == (s2+v2*t)% ...

  3. JavaSE 学习笔记之继承(五)

    继 承(面向对象特征之一) 好处: 1:提高了代码的复用性. 2:让类与类之间产生了关系,提供了另一个特征多态的前提. 父类的由来:其实是由多个类不断向上抽取共性内容而来的. java中对于继承,ja ...

  4. 洛谷 P2979 [USACO10JAN]奶酪塔Cheese Towers

    P2979 [USACO10JAN]奶酪塔Cheese Towers 题目描述 Farmer John wants to save some blocks of his cows' delicious ...

  5. HDU 3389

    对于这道题,我们需要从(A+B)%3==0这式子考虑.对于第一条式子,我们可以知道,只能是奇偶盒子交替转移. 由第二条式子可知,要么是同余为0的A,B之间转移,要么是余数为1,2之间的 转移.后来仔细 ...

  6. Android解决使用findViewById时须要对返回值进行类型转换问题的辅助类

    在我们的开发工作时,findViewById可能是用得最多的函数之中的一个.但它特别讨厌的地方就是我们常常须要对返回的view进行类型转换,输入麻烦.代码丑陋,比如曾经我们在Activity中找一些子 ...

  7. 【POJ 1222】 EXTENDED LIGHTS OUT

    [题目链接] http://poj.org/problem?id=1222 [算法] 列出异或方程组,用高斯消元求解即可 [代码] #include <algorithm> #includ ...

  8. Linux查找并杀死僵尸进程

    1.查看系统是否有僵尸进程 使用Top命令查找,当zombie前的数量不为0时,即系统内存在相应数量的僵尸进程. 2.定位僵尸进程 使用命令ps -A -ostat,ppid,pid,cmd |gre ...

  9. Hadoop MapReduce编程 API入门系列之最短路径(十五)

    不多说,直接上代码. ======================================= Iteration: 1= Input path: out/shortestpath/input. ...

  10. 3.ThinkPHP入门---视图

    视图:MVC三大组成部分,负责信息的展示和输出 1.视图的创建 创建的位置需要是在分组目录下的view目录下余控制器同名的目录中. 2.视图的展示 在smarty和tinkphp都是使用diaplay ...