1.数据类型

2.数据库管理语句

3.表管理语句

4.约束

5.自增

 

1.数字类型

1.1整形

类型 字节数 范围

Tinyint
1
有符号:-128~127
无符号:0~255

Smallint
2
有符号:-32768~32767
无符号:0~65535

Mediumint
3
有符号:-8388608~8388607
无符号:0~1677215

Int
4
有符号:- 2147483648~2147483647
无符号:0~4294967295

Bigint
8
有符号:-9223372036854775808~9223372036854775807
无符号:0~9223372036854775807*2+1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1.2小数
类型 字节数 范围

float
4
±1.75494351E-38~±3.402823466E+38

double
6
±2.2250738585072014E-308~
±1.7976931348623157E+308

DECIMAL(M,D)
M+2
最大取值范围与double相同,给定decimal的有效取值范围由M(长度)和D(小数位数)
决定
     
 
 
 
 
 
 
 
 
 
 
 
 
 
1.3位类型
类型 字节数 范围

Bit(M)
1-8
bit(1)~bit(8)
 
 
 
 
 
1.4字符
 
类型 字节数 范围

char(M)
M
M为0~255之间的整数

varchar(M)
M
M为0~65535之间的整数
 
 
 
 
 
 
 
 
1.5字节
BINARY和VARBINARY类类似于CHAR和VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串
类型 字节数 范围
binary(n) n n 值从 1 到 8,000 ,存储空间为 n 字节
varbinary( n | max) n max 是指最大存储空间是 2^31-1 个字节,即最大4GB
 
 
 
 
 
 
1.6Enum
称为枚举类型哦,要求插入的值必须属于列表中指定的值之一。
如果列表成员为1~255,则需要1个字节存储
如果列表成员为255~65535,则需要2个字节存储
最多需要65535个成员!
 
1.7Set
和Enum类型类似,里面可以保存0~64个成员。
和Enum类型最大的区别是:SET类型一次可以选取多个成员,而Enum只能选一个
根据成员个数不同,存储所占的字节也不同
成员数   字节数
1~8           1
9~16         2
17~24       3
25~32       4
33~64       8
 
1.8日期时间
类型 字节 最小值  最大值

date
4
1000-01-01

9999-12-31

datetime
8
1000-01-01 00:00:00

9999-12-31 23:59:59

timestamp
4
19700101080001

2038年的某个时刻

time
3
-838:59:59

838:59:59

year
1
1901

2155
 
 
 
 
 
 
 
 
 
 
 
 

 

 

 DATE

    DATE 用于表示 年月日,如果实际应用值需要保存 年月日 就可以使用 DATE。

DATETIME

     DATETIME 用于表示 年月日 时分秒,是 DATE 和 TIME 的组合,并且记录的年份(见上表)比较长久。如果实际应用中有这样的需求,就可以使用 DATETIME 类型。

 TIMESTAMP

  • TIMESTAMP 用于表示 年月日 时分秒,但是记录的年份(见上表)比较短暂。
  • TIMESTAMP 和时区相关,更能反映当前时间。当插入日期时,会先转换为本地时区后再存放;当查询日期时,会将日期转换为本地时区后再显示。所以不同时区的人看到的同一时间是  不一样的。
  • 表中的第一个 TIMESTAMP 列自动设置为系统时间(CURRENT_TIMESTAMP)。当插入或更新一行,但没有明确给 TIMESTAMP 列赋值,也会自动设置为当前系统时间。如果表中有第二个 TIMESTAMP 列,则默认值设置为0000-00-00 00:00:00。
  • TIMESTAMP 的属性受 Mysql 版本和服务器 SQLMode 的影响较大。

     如果记录的日期需要让不同时区的人使用,最好使用 TIMESTAMP。

 TIME

    TIME 用于表示 时分秒,如果实际应用值需要保存 时分秒 就可以使用 TIME。

 YEAR

    YEAR 用于表示 年份,YEAR 有 2 位(最好使用4位)和 4 位格式的年。 默认是4位。如果实际应用只保存年份,那么用 1 bytes 保存 YEAR 类型完全可以。不但能够节约存储空间,还能提高表的操作效率。

 

2.数据库的管理

 

3.表的管理

 

4.常见约束

4.1简介

 

为了保证数据的一致性和完整性,SQL规范以约束的方式对表数据进行额外的条件限制。

约束是表级的强制规定可以在创建表时规定约束(通过 CREATETABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)

 

4.2类型

1) NOT NULL 非空约束,规定某个字段不能为空
  非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。
 
2) UNIQUE 唯一约束,规定某个字段在整个表中是唯一的
  同一个表可以有多个唯一约束,也可以有多个列组合的约束。在创建唯一约束的时候,如果不给唯一约束名称,就默认和列名相同
 
3) PRIMARY KEY 主键(非空且唯一)
  主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值
  如果是多列组合的主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。
  每个表最多只允许一个主键
  MySQL的主键名总是PRIMARY,当创建主键约束时,系统默认会在所在的列和列组合上建立对应的唯一索引
 
4) FOREIGN KEY 外键
  外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系。
  从表的外键值必须在主表中能找到。当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据,需要先删除从表中依赖该记录的数据,然后才可以删除主表的数据,或者级联删除子表数据。
  注意,外键约束的参照列,在主表中引用的只能是主键或唯一键约束的列
  同一个表可以有多个外键约束
 
5) CHECK 检查约束
  MySQL可以使用check约束,但check约束对数据验证没有任何作用,添加数据时,没有任何错误或警告
 
6) DEFAULT 默认值
 
 
4.3添加约束

1)主键约束:

格式:alter table 表格名称 add constraint 约束名称 增加的约束类型 (列名)

例子:alter table emp add constraint xxx primary key (id);   

 

 2)check约束:就是给一列的数据进行了限制

  格式:alter table 表名称 add constraint 约束名称 增加的约束类型 (列名)

例子:alter table emp add constraint xxx check(age>20);

 

3)unique约束:这样的约束就是给列的数据追加的不重复的约束类型

格式:alter table 表名 add constraint 约束名称 约束类型(列名)
例子:alter table emp add constraint qwe unique(ename);

 

4)默认约束:意思很简单就是让此列的数据默认为一定的数据

格式:alter table 表名称 add constraint 约束名称 约束类型 默认值) for 列名

例子:   alter table emp add constraint jfsd default 10000 for gongzi;

 

 5)外键约束:

格式:alter table 表名 add constraint 约束名称 约束类型 (列名) references 被引用的表名称 (列名)

例子:alter table emp add constraint jfkdsj foreign key (did) references dept (id);

 

5.自增
5.1简介
mysql可以设置列自增长,默认从1开始,每次增长1,一般主键id会使用到,一个表只能有一个列自增
 
创建表,设置free_id自增长
CREATE TABLE `jsnh_free` (
  `free_id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `title` varchar(256) DEFAULT NULL COMMENT '标题',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间'
  PRIMARY KEY (`free_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='自由行表';

 

5.2变量简介

mysql中自增长,涉及到两个变量:auto_increment_offset和auto_increment_increment。

  • auto_increment_offset表示自增长字段从那个数开始,他的取值范围是1 .. 65535
  • auto_increment_increment表示自增长字段每次递增的量,其默认值是1,取值范围是1 .. 65535

查看变量值:
  show variables like '%auto_inc%';           
  show session variables like '%auto_inc%';   --  //session会话变量
  show global variables like '%auto_inc%';   --  //全局变量  

设置变量值

   SET @auto_increment_increment = 3 ; 

   SET session auto_invrement_increment=2;    

   SET global auto_increment_increment=1;  

   第一种和第二种是一样的效果,第三个是修改全局的变量;

   应用实例:在主主同步配置时,将两台服务器的auto_increment_increment增长量都配置为2,而要把auto_increment_offset分别配置为1和2。这样才可以避免两台服务器同时做更新时自增长字段的值之间发生冲突。