MySQL表操作及字段数据类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL表操作及字段数据类型相关的知识,希望对你有一定的参考价值。
1、查看当前数据库所有表
mysql> show tables;
2、创建表,id字段为整型无符号,不能有负数并且是主键(主键唯一),引擎为InnoDB,字符集是utf8,注释信息为"学生表",int括号中的3表示字段的宽度为3,以100开始自增,zerofill意思是自动补零
mysql> create table student(
id int(3) unsigned zerofill not null auto_increment,
name varchar(30) not null,
primary key(id)
)engine=InnoDB auto_increment=100 charset=utf8 comment="学生表";
3、删除表
mysql> drop table if exists student;
4、查看表结构
mysql> desc student;
5、查看建表代码
mysql> show create table student;
6、插入数据
mysql> insert into student(name) values ("jack"),("王五"),("赵六");
7、简单查询数据
mysql> select * from student;
8、显示表的所有列,比desc要详细
mysql> show full columns from student;
9、删除多个表,表名用逗号分隔
mysql> drop table if exists stu,a,b;
字段数据类型
1>整型:tinyint(1字节,0-255)、smallint(2字节,0-65535)、mediumint(3字节,0-16777215)、int(4字节,0-4294967295)、bigint(5字节,0-18446744073709551615)
tinyint:最多能存到255,比如创建表的时候用tinyint的话,在存256的时候会报错,这种类型存年龄、部门编号比较合适,例如:
mysql> create table stu(
-> id int(3) unsigned auto_increment,
-> name varchar(30),
-> age tinyint(2) zerofill,
-> primary key(id)
-> )engine=InnoDB default charset=utf8;
Query OK, 0 rows affected (0.02 sec)
mysql> insert into stu(name,age) values ("张三",256); //如果插入数据超过了tinyint范围就会报错,存小数的话会四舍五入
ERROR 1264 (22003): Out of range value for column 'age' at row 1
2>小数类型:decimal(p,s)、numeric(p,s),两个选一即可,例如
mysql> create table stu(
id int(3) unsigned auto_increment,
name varchar(30),
money decimal(4,2), //money字段用小数类型,(4,2)代表4位数字,其中2位整数和2位小数,也就是说最高存99.99
primary key(id)
)engine=InnoDB default charset=utf8;
mysql> insert into stu (name,money) values ("李四",200);
ERROR 1264 (22003): Out of range value for column 'money' at row 1
mysql> show errors; //查看错误
3>字符串类型:char()、varchar()、text()、longtext()
char()为固定长度字符串(如果存1个字符会补5个0),最大为255,手机号、身份证号可以使用char类型,例如
mysql> create table stu(
-> id int unsigned not null auto_increment primary key,
-> name char(6) //如果char范围超过255会报错,(6)代表6个字符,超出6会报错
-> )engine=InnoDB default charset=utf8;
varchar()为可变长度字符串,最大为65535,例如:
mysql> create table stu(
id int unsigned not null auto_increment primary key,
name varchar(2) //采用varchar类型
)engine=InnoDB default charset=utf8;
mysql> insert into stu (name) values ("张三");
Query OK, 1 row affected (0.00 sec)
mysql> insert into stu (name) values ("齐天大圣");
ERROR 1406 (22001): Data too long for column 'name' at row 1
注意:以上插入数据四个字也会报错,可变长字符串并不是说想变多长变多长,比如定义char(3),存入一个字符a,系统会自动补两个空位,结果是一个a和两个空格补齐了三个字符;而定义varchar(3),存入a后,不会自动补齐空位,就是实实在在存入了一个字符,但是存入的最大字节数还是3,存入4个字符也会报错。大家注意两个概念。
text()也是可变长的,最大为65535;longtext()最大为4G,存文章可以使用。。。
简单说以下enum参数,这个参数代表枚举,比如我要存一个性别,除了男就是女,例如:
mysql> create table stu(
id int unsigned not null auto_increment primary key,
name varchar(5) not null,
gender enum("男","女")
)engine=InnoDB default charset=utf8;
mysql> insert into stu (name,gender) values ("张三","中"); //必须存enum()内定义的选项
ERROR 1265 (01000): Data truncated for column 'gender' at row 1
mysql> insert into stu (name,gender) values ("张三","男");
4>二进制类型:blob、longblob,比如我要存一个MP3格式的文件,就需要用到此类型,一般没有往数据库直接存这些东西的,数据库存的只是这些文件的地址。
5>日期时间类型:date、datetime,date只能存年月日,而datetime能存年月日时分秒
mysql> create table stu(
id int unsigned not null auto_increment primary key,
name varchar(5) not null,gender enum("男","女"),
birthday datetime //出生日期采用datetime类型
)engine=InnoDB default charset=utf8;
mysql> insert into stu (name,gender,birthday) values ("张三","男","2018-02-26 00:00:00");
如果字段类型有注册时间,而且我们想要自动添加怎么办?如下:
mysql> create table stu(
id int unsigned not null auto_increment primary key,
name varchar(5) not null,
gender enum("男","女"),
registered datetime default now()
)engine=InnoDB default charset=utf8;
mysql> insert into stu (name,gender) values ("张三","男"); //再添加数据时就不需要再添加registered字段信息了
注意:datetime类型的数据在修改数据时,时间不会改变,而时间戳类型会改变,例如:
mysql> create table stu(
id int unsigned not null auto_increment primary key,
name varchar(5) not null,
gender enum("男","女"),
registered timestamp //时间戳类型,这时使用update语句修改数据时,时间戳会改变,如果不想它改变,应该写成registered timestamp default current_timestamp()
)engine=InnoDB default charset=utf8;
以上是关于MySQL表操作及字段数据类型的主要内容,如果未能解决你的问题,请参考以下文章