Author:WeiLei
CREATE DATABASE mytest2 CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE TABLE 表名称( 字段名1 字段类型, 字段名2 字段类型, 字段名3 字段类型, ... ) DEFAULT CHARSET=utf8mb4;
CREATE TABLE member( regName varchar(20), pwd varchar(6) ) DEFAULT CHARSET=utf8mb4
MySQL中定义数据字段的类型对你数据库的优化是非常重要的。
MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。
- 指定一个字段的类型为 INT(6),就可以保证所包含数字少于 6 个的值从数据库中检索出来时能够自动地用空格填充。需要注意的是,使用一个宽度指示器不会影响字段的大小和它可以存储的值的范围。
- 我们需要对一个字段存储一个超出许可范围的数字,MySQL 会根据允许范围最接近它的一端截短后再进行存储。还有一个比较特别的地方是,MySQL 会在不合规定的值插入表前自动修改为 0。
- UNSIGNED 修饰符规定字段只保存正值。因为不需要保存数字的正、负符号,可以在储时节约一个“位”的空间。从而增大这个字段可以存储的值的范围。
- ZEROFILL 修饰符规定 0(不是空格)可以用来真补输出的值。使用这个修饰符可以阻止 MySQL 数据库存储负值。
- MySQL 支持的三个浮点类型是 FLOAT、DOUBLE 和 DECIMAL 类型。FLOAT 数值类型用于表示单精度浮点数值,而 DOUBLE 数值类型用于表示双精度浮点数值。
- 与整数一样,这些类型也带有附加参数:一个显示宽度指示器和一个小数点指示器。比如语句 FLOAT(7,3) 规定显示的值不会超过 7 位数字,小数点后面带有 3 位数字。
- 对于小数点后面的位数超过允许范围的值,MySQL 会自动将它四舍五入为最接近它的值,再插入它。
- DECIMAL 数据类型用于精度要求非常高的计算中,这种类型允许指定数值的精度和计数方法作为选择参数。精度在这里指为这个值保存的有效数字的总个数,而计数方法表示小数点后数字的位数。比如语句 DECIMAL(7,3) 规定了存储的值不会超过 7 位数字,并且小数点后不超过 3 位。
- 忽略 DECIMAL 数据类型的精度和计数方法修饰符将会使 MySQL 数据库把所有标识为这个数据类型的字段精度设置为 10,计算方法设置为 0。
- UNSIGNED 和 ZEROFILL 修饰符也可以被 FLOAT、DOUBLE 和 DECIMAL 数据类型使用。并且效果与 INT 数据类型相同。
- CHAR 类型用于定长字符串,必须在圆括号内用一个大小修饰符来定义,并且比指定长度大的值将被截短,而比指定长度小的值将会用空格作填补。
- CHAR 类型可以使用 BINARY 修饰符。当用于比较运算时,这个修饰符使 CHAR 以二进制方式参于运算,而不是以传统的区分大小写的方式。
- VARCHAR 类型。它是一种可变长度的字符串类型,必须在圆括号内用一个大小修饰符来定义。这个大小修饰符的范围从 0-255。
- CHAR 和 VARCHGAR 不同之处在于 :
- MySQL 数据库处理这个指示器的方式:
- CHAR 类型把指示器的值视为字段值的大小,长度不足的情况下就用空格补足。
- VARCHAR 类型把指示器的值视为最大值,并且只使用存储字符串实际需要的长度来存储值。所以短于指示器长度(圆括号内的值)的 VARCHAR 类型不会被空格填补,但长于指示器的值仍然会被截短。因为 VARCHAR 类型可以根据实际内容动态改变存储值的长度(通过增加一个额外字节来存储字符串本身的长度)
- 所以在不能确定字段需要多少字符时使 VARCHAR类型可以大大地节约磁盘空间、提高存储效率。
- VARCHAR 类型在使用 BINARY 修饰符时与 CHAR 类型完全相同。
- DATE、TIME 和 TEAR 类型
- MySQL 用 DATE 和 TEAR 类型存储简单的日期值,使用 TIME 类型存储时间值。这些类型可以描述为字符串或不带分隔符的整数序列。如果描述为字符串,DATE 类型的值应该使用连字号作为分隔符分开,而 TIME 类型的值应该使用冒号作为分隔符分开。
- 需要注意的是,没有冒号分隔符的 TIME 类型值,将会被 MySQL 理解为持续的时间,而不是时间戳。
- MySQL 还对日期的年份中的两个数字的值,或是 SQL 语句中为 TEAR 类型输入的两个数字进行最大限度的通译。因为所有 TEAR 类型的值必须用 4 个数字存储。MySQL 试图将 2 个数字的年份转换为 4 个数字的值。把在 00-69 范围内的值转换到 2000-2069 范围内。把 70-99 范围内的值转换到 1970-1979 之内。如果 MySQL 自动转换后的值并不符合我们的需要,请输入 4 个数字表示的年份。
- DATEYIME 和 TIMESTAMP 类型
- 除了日期和时间数据类型,MySQL 还支持 DATEYIME 和 TIMESTAMP 这两种混合类型。它们可以把日期和时间作为单个的值进行存储。这两种类型通常用于自动存储包含当前日期和时间的时间戳,并可在需要执行大量数据库事务和需要建立一个调试和审查用途的审计跟踪的应用程序中发挥良好作用。
- 如果我们对 TIMESTAMP 类型的字段没有明确赋值,或是被赋与了 null 值。MySQL 会自动使用系统当前的日期和时间来填充它。
- PRIMARY KEY
- 主键约束
- 每张表只能存在一个主键
- 主键保证记录的唯一性
- 主键自动为NOT NULL
CREATE TABLE student( id int(100) PRIMARY KEY, s_name varchar(4) );
- AUTO_INCREMENT 自动编号
- 必须与主键组合使用,即自增长的字段必须定义为主键
- 默认情况下起始为1,每次增量为1
CREATE TABLE student( id int(100) PRIMARY KEY AUTO_INCREMENT, s_name varchar(4) );
- 重置自增初始值
- ALTER TABLE student AUTO_INCREMENT=0;
- TRUNCATE TABLE student;
- 删除表,重新建表;
CREATE TABLE s_student( id int(100) PRIMARY KEY AUTO_INCREMENT COMMENT '主键' , s_name varchar(4) COMMENT '姓名' ) COMMENT '会员表';