MySQL表的操作(创建,查看,修改,删除)、数据类型(tinyint,bit,小数,char,varchar,日期和时间,enum和set)、表的约束(主键,外键等)-总结二
二、MySQL表的操作:
1 .创建表
语法:
CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;
说明:
不同的存储引擎,创建表的文件不一样。
users 表存储引擎是 MyISAM ,在数据目中有三个不同的文件,分别是:users.frm:表结构、users.MYD:表数、users.MYI:表索引
2. 查看表结构
desc 表名;
3.修改表
添加字段:ALTER TABLE tablename ADD (column datatype [DEFAULT expr][,column datatype]...);
修改字段:类型:ALTER TABLE tablename MODIfy (column datatype [DEFAULT expr][,column datatype]...); 名称:ALTER TABLE tablenameCHANGE name newname datatype; --新字段需要完整定义
删除字段:ALTER TABLE tablename DROP (column);
修改表名:ALTER TABLE tablename RENAME to newtablename;(to:可以省掉)
4. 删除表
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...
eg: drop table t1;
三、数据类型
1. 数值类型
1.1 tinyint类型
带符号范围-128~127(默认是有符号的),无符号范围0~255(tinyint unsigned)。越界插入数值会报错。
1.2 bit类型
基本语法:bit(M): 位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。
注意事项:(1)bit字段在显示时,是按照ASCII码对应的值显示。如传入65显示的是A。
(2)如果我们有这样的值,只存放0或1,这时可以定义bit(1)。这样可以节省空间。
1.3 小数类型
1.3.1 float 语法:float(m, d) [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节
eg:float(4,2)表示的范围是-99.99 ~ 99.99; float(4,2) unsigned范围是 0 ~ 99.99
1.3.2 decimal 语法:decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数
eg: decimal(5,2) 表示的范围是 -999.99 ~ 999.99;decimal(5,2) unsigned 表示的范围 0 ~ 999.99
区别:float和decimal表示的精度不一样,float表示的精度大约是7位,decimal整数最大位数m为65(默认是10),支持小数最大位数d是30(默认为0)。需要小数的精度高时使用decimal。
2.字符串类型
2.1 char
语法:char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255
说明:char(2) 表示可以存放两个字符,可以是字母或汉字,但是不能超过2个
2.2 varchar
语法:varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节,有1-3 个字节用于记录数据大小,有效字节 数是65532。
说明:varchar(len)的len和表的编码相关:utf8时一个字符占用3个字节;gbk时一个字符占用2字节,varchar(n)的参数n最大值是65532/一个字符占用的字节数,utf8中是21844;gbk中是32766。
2.3 char与varchar
(1)如果数据长度确定,使用定长(char),比如:身份证,手机号,md5
(2)如果数据长度变化,使用变长(varchar), 比如:名字,地址,但要保证最长的能存的进去。
(3)定长的磁盘空间比较浪费,但是效率高。 (4)变长的磁盘空间比较节省,但是效率低。
2.4 日期和时间类型
datetime 时间日期格式 'yyyy-mm-dd HH:ii:ss' 表示范围从1000到9999,占用八字节
date:日期 'yyyy-mm-dd',占用三字节
timestamp:时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss格式和datetime完全一致,占用四字节(添加数据时,时间戳自动补上当前时间)
2.5 enum和set
语法:
enum:枚举“单选”类型;enum('选项1','选项2','选项3',...); 选项值依次对应如下数字:1,2,3,....最多65535个;
set:集合,“多选”类型;set('选项值1','选项值2','选项值3', ...);选项值依次对应如下数字:1,2,4,8,16,32,.... 最多64个。
集合查询使用find_ in_ set函数: find_in_set(sub,str_list) :如果 sub 在 str_list 中,则返回下标;如果不在,返回0; str_list 用逗号分隔的字符串。
四、表的约束
4.1 空属性: 两个值:null(默认的)和 not null(不为空) eg: class_name varchar(20) not null,
4. 默认值 : default eg: age tinyint unsigned default 0,
4.3 列描述 : comment,用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进解;
desc查看不到注释信息,通过show可以看到(eg: show create table tt2\G)。
4.4 zerofill: 如果宽度小于设定的宽度,自动填充0。 eg: a int(5) unsigned zerofill;
4.5 主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键;主键所在的列通常是整数类型。
eg: id int unsigned primary key comment '学号不能为空', 6primary key(id, course) 复合键
追加主键: alter table 表名 add primary key(字段列表)
主键约束:主键对应的字段中不能重复,一旦重复,操作失败。
删除主键: alter table 表名 drop primary key;
4.6 自增长auto_increment:当对应的字段不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作得到新的值。通常和主键搭配使用,作为逻辑主键。
特点: (1)任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)
(2)自增长字段必须是整数
(3)一张表最多只能有一个自增长 eg: id int unsigned primary key auto_increment,在插入后获取上次插入的 AUTO_INCREMENT 的值(批量插入获取的是第一个值)eg:select last_insert_id(); --1
4.7 唯一键unique: 唯一键允许为空,而且可以多个为空
4.8 外键foreign key:用于定义主表和从表之间的关系,外键约束主要定义在从表上,主表必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null
语法:foreign key (字段名) references 主表(列)