创建数据表
基本语法:
1 create table 数据表名称( 2 字段名称 字段类型 字段约束, 3 ... 4 )[表选项];
字段类型
整数型
1 tinyint :占用1个字节的长度,无符号型,可以表示0-255,有符号型,可以表示-128-127 2 smallint :占用2个字节的长度,无符号型,可以表示0-65535,有符号型,可以表示-32768-32767 3 mediumint :占用3个字节的长度,无符号型,可以表示0-16777215,有符号型,可以表示-8388608-8388607 4 int :占用4个字节的长度,无符号型,可以表示0-4294967295,有符号型,可以表示-2147483648-2147483647 5 bigint :占用8个字节的长度
使用推荐
1 ①对于人的年龄,建议使用tinyint 2 ②对于动物的年龄,建议使用smallint 3 ③对于文章的数量,建议使用mediumint 4 ④对于商品的数量,建议使用int 5 ⑤对于大型的整型计数,建议使用bigint
插入科学计数法
1 insert into sh_int(id3) values (1.23e5); 2 结果:12300
小数型
1 ①浮点型 2 float(M,D):占用4个字节的存储空间,能表示的十进制有效位:8位 3 double(M,D):占用8个字节的存储空间,能表示的十进制有效位:16位 4 ②定点型 5 decimal(M,D):占用空间不是固定的,变长。 6 记住:M代表总长度(包括整数部分+小数部分),D小数点后面的位数。
如果decimal没有指定M与D,则默认返回整数,小数位会自动采用四舍五入。
在小数类型中,其M值一定不能超过指定的M值,否则无法插入数据。
在小数类型中,如果D值超过了指定的D值,其是可以正常插入的,但是其结果会进行四舍五入。
如果整数位+小数位超过了M,整数部分没有越界但是小数部分越界了,四舍五入,???从高位起,能存几位,存几位???
字符串型
char与varchar
1 char(M)类型:定长,M的最大值为255,对编码格式没有要求 2 varchar(M)类型:变长,M的理论值65535,但是还要特别注意, 3 其还需要1-2个字符存储长度信息,而且还需要1个字符左右存储额外的信息(如Null)。 4 所以实际上它真正能使用存储数据的大约只有65532。 5 另外M还与编码格式有关,如果GBK格式,还需要除2,如果是UTF8还要除3。
char与varchar区别
1 存储方式不同: 2 char固定长度,先开辟内存空间,然后在存储数据。如果数据没有填充满M长度,则会造成空间的浪费。 3 varchar变长,先开辟内存空间,根据存储的数据调整空间大小,避免空间的浪费 4 效率也不同: 5 char是固定长度,不需要额外的计算,所以其效率要高于varchar类型。 6 两者对于空格的处理方式不同: 7 char类型:会自动去除元素的首位空格 8 varchar类型:会自动保留元素的首位空格
text文本类型
使用text文本类型用于存储数据,例如存储文章的内容、产品的详细介绍...
创建文章表,基本语法:
1 create table sh_article( 2 id mediumint, 3 title varchar(40), 4 description varchar(255), 5 content text 6 ) engine = myisam default charset=utf8;
blob二进制类型
1 blob可以保存二进制数据, 2 在实际应用中可以保存图片、附件等资源。 3 但是在实际应用中,此类型很少使用, 4 实际资源数据通常是以路径方式进行保存,而不会资源本身,对于空间过于浪费。
enum枚举类型(多选一,单选情况)
基本语法:
1 create table sh_user( 2 id int, 3 username varchar(10), 4 password char(32), 5 age tinyint unsigned, 6 sex enum(‘男’,’女’,’保密’), 7 address varchar(255) 8 ) engine = myisam default charset=utf8;
在实际应用中,enum中的选项是由数量限制的,数量为65535。
set集合类型(复选情况)
复选框情况在实际保存时,通常是这样保存的:项1,项2,项3...
基本语法:
1 create table sh_user( 2 id int, 3 username varchar(10), 4 password char(32), 5 age tinyint unsigned, 6 sex enum(‘男’,’女’,’保密’), 7 hobby set(‘吃饭’,’睡觉’,’打豆豆’), 8 address varchar(255) 9 ) engine = myisam default charset=utf8;
时间类型
基本语法:
1 create table sh_time( 2 dt datetime, 3 ts timestamp, 4 d date, 5 t time, 6 y year 7 ) engine = myisam default charset=utf8;
相关细节
1 ①datetime与timestamp类型的区别? 2 第一:两者表示的范围不同,datetime范围更广 3 第二:timestamp不能为空,其拥有默认值,默认值为当前服务器的时间,而且在当前记录更新时,其时间字段也会随之更新。 4 5 ②在实际项目开发中,一般我们选择哪种时间类型呢? 6 如果我们使用PHP编程语言,一般情况下在存储时间时,通常不会使用时间类型,而是使用int类型进行存储。 7 在PHP中,可以使用time()获取当前时间的时间戳,其返回一个整数,存储比时间类型更加节省空间,而且PHP中的内置函数,提供了对时间的格式化函数date()函数。 8 <?php 9 $addtime = time(); 10 echo ‘datetime:’.date(‘Y-m-d H:i:s’,$addtime); 11 ?>
探究varchar类型的最大值
1、gbk格式
2、utf8格式
字段约束
00、unsigned无符号型
基本语法:
1 ①创建时指定无符号型 2 create table 数据表名称( 3 字段名称 整数类型 unsigned, 4 ... 5 ) [表选项]; 6 7 ②修改字段的类型 8 alter table 数据表名称 modify 字段名称 字段类型 unsigned;
0、zerofill零填充
基本语法:
1 ①使用desc查看数据表的表结构 2 desc sh_int; 3 ②zerofill零填充 4 在MySQL中,整数型数据后面的数字只和zerofill有关系,代表0填充,
5 如果当前字段为无符号型,默认长度为4,但是实际输入的数据只有2位,则系统会自动在前面添加两个0,形成00数据.
1、空值约束
基本语法:
1 create table sh_goods( 2 id int not null, 3 title varchar(40) not null, 4 description varchar(255), 5 price decimal(11,2) not null, 6 content text, 7 addtime int 8 ) engine = myisam default charset=utf8;
2、主键约束
主键约束:强调数据不能为空、强调数据不能重复。
基本语法:
1 //第一种 2 create table sh_goods( 3 id int not null primary key, 4 title varchar(40) not null, 5 description varchar(255), 6 price decimal(11,2) not null, 7 content text, 8 addtime int 9 ) engine = myisam default charset=utf8; 10 11 //第二种 12 create table sh_goods( 13 id int not null, 14 title varchar(40) not null, 15 description varchar(255), 16 price decimal(11,2) not null, 17 content text, 18 addtime int, 19 primary key(id) 20 ) engine = myisam default charset=utf8; 21 22 //第三种 23 alter table sh_goods add primary key(id);
自动增长
基本语法:
1 create table sh_goods( 2 id int not null auto_increment, 3 title varchar(40) not null, 4 description varchar(255), 5 price decimal(11,2) not null, 6 content text, 7 addtime int, 8 primary key(id) 9 ) engine=myisam default charset=utf8;
查看自动增长,其每次增长的步长,基本语法:
1 show variables like ‘auto_increment%’;
设置步长
1 set auto_increment_increment=5;
设置起始值
1 alter table sh_goods auto_increment=60;
默认值(default)
基本语法:
1 create table sh_user( 2 id int, 3 username varchar(10), 4 password char(32), 5 age tinyint unsigned, 6 sex enum(‘男’,’女’,’保密’) default‘女’, 7 hobby set(‘吃饭’,’睡觉’,’打豆豆’), 8 address varchar(255) 9 ) engine = myisam default charset=utf8;
触发方式一共有两种形式:
①插入数据时,不插入默认值字段
②插入数据时,默认值字段使用default
字段备注(comment)
基本语法:
1 create table 数据表名称( 2 字段名称 字段类型 字段约束 comment ‘字段备注’ 3 )[表选项];
唯一键约束(unique key)
主键强调:不能为空,不能重复。
唯一键强调:不能重复,但是可以为空。为空字段会自动忽略。
基本语法:unique [key]
1 第一种创建方式: 2 create table 数据表名称( 3 id int unique key 4 )[数据表选项]; 5 6 第二种创建方式: 7 create table 数据表名称( 8 id int, 9 unique key(id) 10 )[数据表选项]; 11 12 //第三种创建方式 13 alter table 数据表名称 add unique key(id);
唯一键删除
1 alter table 数据表名称 drop index 唯一键名称;
逐渐删除
1 alter table 数据表名称 drop primary key;
###################################################################