表的基本操作+字段类型

存储引擎

存储引擎:不同的文件需要不同的存储格式和处理方式;数据库中的储存引擎就是对存储数据的处理机制。不同的存储引擎,对数据的处理方式不同。

MySQL主要储存引擎:

  • Innodb,,是MySQL5.5版本及之后默认的存储引擎,存储数据更加的安全

  • myisam,是MySQL5.5版本之前默认的存储引擎,速度要比Innodb更快,是我们更加注重的是数据的安全

  • memory,内存引擎(数据全部存放在内存中) 断电数据丢失

  • blackhole,无论存什么,都将数据丢失(黑洞)

# 查看存储引擎的sql语句, show engines;

不同储存引擎,硬盘上对应的数据文件也不尽相同

create table t1(id int) engine=innodb;
create table t2(id int) engine=myisam;
create table t3(id int) engine=blackhole;
create table t4(id int) engine=memory;

创建表的完整语法

# 完整语法
create table 表名(
	字段名1 类型(宽度) 约束条件,
    字段名2 类型(宽度) 约束条件,
    字段名3 类型(宽度) 约束条件
)

注意

  • 1 在同一张表中字段名不能重复

  • 2 字段名、字段类型是必须的; 宽度、约束条件是可选的(可写可不写) ,约束条件支持写多个

    字段名1 类型(宽度) 约束条件1 约束条件2...,
    create table t5(id);  报错
    
  • 3 最后一行不能有逗号,否则报错

补充

  • 宽度

    一般情况下指的是对存储数据的限制
    	例如,char,默认是1个宽度,表示存一个数据的字符串只保留一个,多余的部分丢掉。
    针对不同的版本会出现不同的效果
    - 5.6版本默认没有开启严格模式 规定只能存一个字符你给了多个字符,那么我会自动帮你截取
    - 5.7版本及以上或者默认开启了严格模式,默认一旦超出范围立刻报错
    
  • 约束条件

    约束条件 null  not null不能插入null
    create table t8(id int,name char not null);
    # 此处not null是约束条件,表示该字段不能为空
    
# 宽度是用来限制数据的存储
# 约束条件是在宽度的基础之上增加的额外的约束

严格模式

# 如何查看严格模式
show variables like "%mode";

模糊匹配/查询
	关键字 like
		%:匹配任意多个字符
        _:匹配任意单个字符

# 修改严格模式
	set session  只在当前窗口有效
    set global   全局有效
    
    <1> set global sql_mode = 'STRICT_TRANS_TABLES';
    <2> 修改完之后 重新进入服务端即可

基本字段类型

参考博客

整型

  • 类别:tinyint、 int、 bigint

  • 默认是带有符号的(正负数),超出范围只存最大或最小接受值

  • 创建表字段时可以指定整型字段时无符号的 unsigned

  • 还有整形字段的宽度指的不是限制位数;默认当位数不足时用空格补全;超出时有几位存几位(在最大范围内)。

  • 修改补全方式为用数字0填充,create table t1(id int(8) unsigned zerofill);,不足8位用0填充

  • 针对整型字段,括号内无需指定宽度,因为它默认的宽度以及足够显示所有的数据了

浮点型

  • 类别:FLOAT、DOUBLE、DECIMAL

  • 区别:精度不同 float < double < decimal

  • 存储限制

    float(255,30)  # 总共255位 小数部分占30位
    double(255,30)  # 总共255位 小数部分占30位
    decimal(65,30)  # 总共65位 小数部分占30位
    

字符类型

  • 类别:char、varchar

  • 区别:char固定长度,不足补全,查询速度快;varchar可变长度,节省空间;查询较慢,多占一位表示长度

  • 补充:char_length()统计字段长度,需要再设置sql_mode,不让mysql自动补全空格才能真实统计

    # 补充:
    char硬盘上存的绝对是真正的数据 带有补全空格的
    但是在显示的时候MySQL会自动将多余的空格剔除
    修改sql_mode 让MySQL不要做自动剔除操作
    set global sql_mode = 'STRICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH';
    

时间类型

date、datetime、time、year等

date:年月日 2020-5-4
datetime:年月日时分秒  2020-5-4 11:11:11
time:时分秒11:11:11
Year:2020

枚举和集合

枚举 enum 多中选一个
集合 set  多中选多个

枚举字段,存的时候,只能存枚举里面有的
集合字段,存的时候,也只能存集合里面有的

create table teacher(
	id int,
    name char(16),
    gender enum('male','female','others'),
    hobby set('read','DBJ','hecha')
);

修改表

mysql对大小写不敏感

1 修改表名 # rename
	alter table 表名 rename 新表名;

2 增加字段  # add first、 after
	alter table 表名 add 字段名 字段类型(宽度)  约束条件;
	alter table 表名 add 字段名 字段类型(宽度)  约束条件 first;
	alter table 表名 add 字段名 字段类型(宽度)  约束条件 after 字段名;

3 删除字段 # drop
	alter table 表名 drop 字段名;

4 修改字段 # modify、 change
	alter table 表名 modify 字段名 字段类型(宽度) 约束条件;
	alter table 表名 change 旧字段名 新字段名 字段类型(宽度) 约束条件;

复制表

我们sql语句查询的结果其实也是一张虚拟表

可以将这张表存起来,方标日后读取,仅仅是用而已。

create table 表名 select * from 旧表;  # 不能复制主键 外键

删除表

drop table 表名
delete from 表名
truncate 表名  清空表数据
posted @ 2020-05-04 15:22  the3times  阅读(319)  评论(0)    收藏  举报