mysql 表操作

烈酒焚心 提交于 2019-11-27 21:53:50

一、表的概念

表就相当于文件,表中的一条条记录就相当与文件的一行行内容,不同的是,表中的一条条记录有对应的标题,这个标题就叫做表

 

二、创建表:    

#语法:
create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]  #[]括号内为约束条件,可加可不加,最后一组数据后面没有逗号
);

#注意:
1. 在同一张表中,字段名是不能相同
2. 宽度和约束条件可选
3. 字段名和类型是必须的4.最后一个字段后面不能加逗号ps:宽度指的是对存储数据的限制  create table userinfo(name char);  insert into userinfo values('jason');1:没有安全模式下的数据版本,能够存放数据但只会存存进去一个g2:char(1) 表示只能存一个字符,插入的时候MySQL自动截取3:严格模式下mysql会报错

1;先切换到指定的库下面:use 库名  或者: create table userinfo.t1(id int,name char);

2:查看当前存在的库: select database();

3:查看表: show tables:    show create table userinfo;      常用查看表结构: desc userinfo <<==>> describle userinfo

4:删除: drop table  useriinfo:  

5:如果要清空表,使用truncate t1;
  作用:将整张表重置,id重新从0开始记录

 

三、约束条件:

  1:not null : 不能为空
   2:unique :唯一约束,指定某列或者几列组合不能重复
   3:default :默认值
   4:primary key:主键为了保证表中的每一条数据的该字段都是表格中的唯一值,

          换言之,它是用来独一无二地确认一个表格中的每一行数据。

1:约束条件初识>>> null 与 nut null 

create table t1(id int,name char not null); # 条件是不能为空
insert into t1 values(1,'j');  # 正常存储
insert into t1 values(2,null);  # 报错

# 总结 类型与约束条件区别
# 类型:限制字段必须以什么样的数据类型存储
# 约束条件:约束条件是在类型之外添加一种额外的限制

四、存储引擎

  不同的数据应该有不同的处理机制,MySQL的存储引擎:

  重点了解前两种,面试经常问

mysql存储引擎
            Innodb:默认的存储引擎  查询速度较myisam慢  但是更安全
            myisam:mysql老版本用的存储引擎
            memory:内存引擎(数据全部存在内存中),数据断电消失
            blackhole:无论存什么 都立马消失(黑洞)
            
        研究一下每个存储引擎存取数据的特点
            show engines;

  现如今保证数据安全是最重要的,而不是取决与速度 

# 查看不同存储引擎存储表结构文件特点

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

insert into t2 values(1);
insert into t3 values(1);
insert into t4 values(1);
insert into t5 values(1);

 

各种模式存储的数据的表结构如下:

 

五、MySQL数据类型

    建表的时候,字段都有对应的数据类型

  1;数值类型

  2:时间日期类型:

  3:字符集类型

  4:ENUM和SET类型

 

重点掌握:整形,浮点型 字符集型(char与varchar)日期类型  枚举与集合

1:整形

分类:分类:TINYINT SMALLINT MEDIUMINT INT BIGINT

#默认为有符号,即数字前有正负号

 

验证整型字段有无符号及范围

create table t1(x tinyint);
insert into t1 values(128),(-129);

create table t2(x tinyint unsigned);
insert into t2 values(-1),(256);  

create table t3(x int unsigned);
insert into t3 values(4294967296);

疑问:类型后面的宽度能否改变字段存储的大小限制

create table t4(x int(8));
insert into t4 values(4294967296123);

# 显示时,不够8位用0填充,如果超出8位则正常显示
create table t5(x int(8) unsigned zerofill);
insert into t5 values(4294967296123);

# create table t6(id int(10) unsigned);
# create table t7(id int(11));

  强调:对于整形来说,数据类型后的宽度并不是存储限制,而是显示的限制,所以在创建表时,如果字段采用的是整形类型,

完全无需指定显示宽度,默认的显示宽度,足以显示完整的存放的数据

 

    char后面的数字是用来限制存储数据的长度的
    
    特例:只有整型后面的数字不是用来限制存储数据的长度 而是用来控制展示的数据的位数
    int(8)  够/超8位有几位存几位,不够8位空格填充
    
    修改约束条件  不够8位的情况下 用0填充

 

六、严格模式

  存储数据时超过它们的最大存储长度,发现数据也能正常存储进去,只是mysql帮我们自动截取了最大长度。但在实际情况下,我们应该尽量减少数据库的操作,缓解数据库的压力,让它仅仅只管理数据即可,这样的情况下就需要设置安全模式

show variables like "%mode%";  # 查看数据库配置中变量名包含mode的配置参数
# 修改安全模式
set session # 只在当前操作界面有效
set global  # 全局有效

set global sql_mode ='STRICT_TRANS_TABLES'
# 修改完之后退出当前客户端重新登陆即可

  为了能让MySQL减少工作量,在做条件判断时做出快速的判断,加上严格的模式,不符合条件就直接报错

2、浮点型

  浮点类型:FLOAT DOUBLE decimal

  作用:存储薪资、身高、体重、体质参数等

字段限制特点(5,3)前一位表示所有的位数,后一位表示小数个数

 

三者最大整数位和小数位的对比:

#存储限制
float(255,30) # 总共255位  小数部分占30位
double(255,30)
decimal(255,30)

# 精确度的验证
create table t1(x,float(255,30));
crteae table t2(x,double(255,30));
create table t3(x,decimal(65,30));

insert into t1 values(1.1111111111111111111111111111111); # 小数点后30位
insert into t2 values(1.1111111111111111111111111111111);
insert into t3 values(1.1111111111111111111111111111111);

精确度
    float < double < decimal
  

3:字符类型

  分类

      char(固定长度)

      varchar(可变长度)

作用:姓名,地址,描述类信息

char(4) # 最大只能存放四个字符,超出会直接报错,如果少了,会自动用空格填充
varchar () # 最大只能存放四个字符,超出来会直接报错,如果少了,有多少就存放多少create table t1(name char(4));  create table t2(name varchar(4));  mysql在存储char类型字段的时候 硬盘上确确实实存的是固定长度的数据  但是再取出来的那一瞬间 mysql会自动将填充的空格去除    可以通过严格模式 来修改该机制 让其不做自动去除处理

char与varchar的区别:

  char(定长):

    1:浪费空间   2:存取速度快

  varchar(变长):

    1:节省空间   2:比char存取速度较慢

      存取的时候,都通过给数据加一个记录数据的报头,后解析报头,因为它不知道数据的长度大小

4、日期类型:

  date:年月日

  datetime:年月日十分秒

  year:年

  time:时间

  uptime:执行的时间

create table stdent(
id int,
name  char(16),
bron_year year,
birth date,
study_time time,
reg_time datetime

);

insert into student values(1,'jack','2009','2019-05-09','11;11;00','2019-11-11 11;11;11');

 

4、枚举与集合类型:

  枚举(enum) :单选 只能在给定的范围内选一个值(多选一):

        如性别 sex 男male/女female

  集合(set) : 多选 在给定的范围内可以选择一个或一个以上的值

        (爱好1,爱好2,爱好3...)

cretae table usesr(
    id int,
    name char(16),
    gender enum('male',''female','others')

);

inster into user values(1,'jack','xxxx')  # 报错
inster into user values(2,'egon','femal') # 正确


create table teacher(
id int,
name char(16),

gender enum('male','female','others')
hobby set ('read','sleep','sanna','dbj')
)insert  into teechervalues(1,'egon','male','read,sleep,bdj')  # 集合也可以 只存一个

 

补充:

delete from tb1;
强调:上面的这条命令确实可以将表里的所有记录都删掉,但不会将id重置为0,
所以收该条命令根本不是用来清空表的,delete是用来删除表中某一些符合条件的记录
delete from tb1 where id > 10;

如果要清空表,使用truncate tb1;
作用:将整张表重置,id重新从0开始记录

 

 

 

  

 

 

    

 

 

 

 

 

 

      

 

 

 

 

 

  

 

  

 

 

 

  

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!