| 一、整形 1、分类:tinyint smallint mediumint int bigint (1)有符号:有正负数 (2)无符号:没有负数 类型后面使用unsigned 和zerofill修饰符 存储数据大小范围: 1个字节 2个字节 3个字节 4个字节 8个字节 8bit 16 24 32 64 11111111 2^16-1 无符号:范围运算公式 0到2^n-1 比如: tinyint:0到255 bigint:0到2^64-1 有符号:范围运算公式-2^(n-1)到2^(n-1)-1 比如: tinyint:-128到127 (3)显示宽度 类型后的小括号内的数字是显示宽度,不能限制插入数值的大小 比如:bigint(2) 2是显示宽度 (4)定义无符号整型: unsigned: mysql>create table t1(id bigint(2) unsigned); zerofill: mysql>create table t2( id1 int zerofill, id2 int(6) zerofill); mysql>insert into t2 values(2,2); mysql>select * from t2; +------------+--------+ | id1 | id2 | +------------+--------+ | 0000000002 | 000002 | +------------+--------+ 1 row in set (0.00 sec) 二、浮点型 1. 单精度:float(5.3) 5宽度(总共长度) 3精度(小数点后三位) mysql>create table t3(id float(6,2)); 2.双精度:double(5.3) mysql>create table t4(id double(5,3)); 3.定点型 定点数在Mysql内部以字符串形式存储,比浮点数更精确,适合用来表示货币等精度高的数据。 decimal(5,3) 4.位类型BIT(M) M范围从1—64,如果不写默认为0 bit( ) 显示为二进制 mysql>create table t3(id bit(4)); 4bit 能存储的最大值是15 三、字符串类型 1.字符类型 char varchar (1)char(10) 根据小括号中的10,占10个。 列的长度固定为创建表时的声明的长度:0~255 (2)varchar(10) 根据实际字符串长度占空间,最多10个 列中的值为可变长字符串,长度:0~65535 2.总结字符类型使用: (1)经常变化的字段用varchar (2)知道固定长度的用char (3)尽量用varchar (4)超过255字符的只能用varchar或者text (5)能用varchar的地方不用text(text是i当varchar长度不够时再使用text) 3.枚举类型 enum (enumerate[nju:mret]) 作用:在给的固定范围内多选一 mysql>create table t3(name enum('wing','tom')); mysql>insert into t3 values('wing'); 只能从给的wing和tom两个中2选1 4.集合类型 set 作用:在给的固定范围内可选多个 mysql>create table t3(name set('wing','tom','haha')); mysql>insert into t3 set anme="wing,haha"; 四、时间类型 时间和日期类型:year date time datetime timestamp(时间戳) 作用:用于存储用户的注册时间、文件的发布时间、文章的更新时间、员工的入职时间deng (1)date 06/04 06-04 (2)year 00到69 为21世纪 70到99 为20世纪 (3)time 050510 (4)datetime 不给默认值为null 180509221810 (5)timestamp 默认把当前时间自动加上 180509221810 和datetime不同的是:当插入值为null时,显示值也会是当前的时间。 例题1:mysql>create table t(date timestamp); mysql>insert into t values(null); mysql>select * from t; +---------------------+ | id | +---------------------+ | 2013-12-18 00:08:41 | +---------------------+ 1 row in set (0.00 sec) 2. mysql>create table t6(d date,t time,dt datetime); mysql>insert into t6 values(now(),nwo(),nwo()); -----引用now( )函数 mysql> select * from t6; +------------+----------+---------------------+ | d | t | dt | +------------+----------+---------------------+ | 2018-01-11 | 10:59:57 | 2018-01-11 10:59:57 | +------------+----------+---------------------+ 五、约束(修饰符) 1.当一个字段被设置不能为空(not null)但是又没有给它设置值的时候,系统会按照不同的类型给予默认值 (1)数值 0 (2)字符串 空 (3)枚举类型enum 第一个预定义值 (4)时间戳timestamp 当前时间 2.设置系统默认值default mysql>alter table t2 modify id int not null default 8; 修改表t2的id字段的默认值为8 3.unique (key)唯一 (唯一性不能重复:如果id=1已经被设置则不能再设置为id=1) mysql>alter table t2 modify id int unique; 4.auto_increment 自增 (额外的属性) mysql>create table t2(id int unique auto_increment,name varchar(10)); 删除时先modify修改属性再drop删除掉 5.primary key (key) 主键 ----->not null + unique(key) 类似身份证ID 每张表中只能有一个主键 主键不能为空,而且唯一 方法一:mysql>create table t4(hostname char(20) primary key,ip char(150)); 方法二:mysql>create table t3(hostname char(20),ip char(150),primary key(hostname)); 6.联合主键(把多列设置为一个主键) (1)设置主键:mysql>create table t4(hostname char(10),ip char(150),primary key(hostname,ip)); (2)删除主键:mysql>alter table t3 drop primary key; 8.index(key) 把某一个字段(列)设置成index 索引 优化查询速度,便于查询 (1)创建索引的三种方法: mysql> create table t4(hostname char(20) primary key,ip char(150),index (ip)); mysql> create table t3(hostname char(20) primary key,ip char(150),index dazhi(ip)); mysql> create index index_name on t3(ip); 语法:CREATE INDEX index_name ON table_name (column_list) 不设置index_name默认把该字段(列)的名字作为索引名 (2)删除索引 mysql>alter table t3 drop index index_name; (3)查看索引 mysql> SHOW INDEX FROM table_name\G · Key_name 索引的名称。 · Column_name 列名称。 9.查看key 查看:mysql>desc t2\G PRI主键约束; UNI唯一约束; MUL非唯一的索引。 10.外键foreign key (key) mysql> create table t1(id int,manager char(10) primary key) engine = innodb; mysql> create table t2(id int,admin char(10),foreign key (admin) references t1 (manager)) engine = innodb ; 带关联删除的外键:on delete cascade mysql> create table xingzheng(id int,admin char(10),foreign key (admin) references t4(manager) on delete cascade) engine = innodb; |