mahonglin123456 发表于 2018-10-6 10:45:02

MySQL表操作及字段数据类型

  1、查看当前数据库所有表
  mysql> show tables;
  2、创建表,id字段为整型无符号,不能有负数并且是主键(主键唯一),引擎为InnoDB,字符集是utf8,注释信息为"学生表",int括号中的3表示字段的宽度为3,以100开始自增,zerofill意思是自动补零
  mysql> create table student(
  id int(3) unsignedzerofill not null auto_increment,
  name varchar(30) not null,
  primary key(id)
  )engine=InnoDB auto_increment=100comment="学生表";
  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(

  ->>  -> 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(

  ->>  -> 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;

页: [1]
查看完整版本: MySQL表操作及字段数据类型