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表操作及字段数据类型的主要内容,如果未能解决你的问题,请参考以下文章

笑着学mysql数据库的DDL语言及数据类型-createdropalterselect

MySQL之简介及基础操作

MySQL之表的基本操作及存储引擎和数据类型

python进阶(mysql:表操作数据操作数据类型)

MySQL数据表操作及外键约束

MySQL数据表操作及外键约束