MySQL的详细操作

存储引擎
不同的数据应该有不同的处理机制 mysql存储引擎
Innodb:默认的存储引擎 查询速度较myisam慢 但是更安全,支持事务,行锁,外键
由于以上的支持,数据更安全,建表时产生两个文件1.表结构文件,2.存储数据文件
myisam:mysql老版本用的存储引擎,查询速度较与Innodb快
建表时有三个文件,1.表结构文件,2.存储数据文件,3.索引文件(能更快的查找数据,就像书的目录)
memory:内存引擎(数据全部存在内存中)一个表结构文件(数据放在内存)
blackhole:无论存什么 都立马消失(黑洞)一个表结构文件(不保存数据)

创建表的完整语法

create table 表名(

字段名1 类型[(宽度) 约束条件],

字段名2 类型[(宽度) 约束条件]);

注意:

1.在同一张表中,字段名不能相同

2.宽度和约束条件可选,字段名和类型是必须的

3.最后一个字段后不能加逗号

4.宽度指的是对存储数据的限制

数据类型

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

整形

分类:TINYINT  SMALLINT  MEDIUMINT  INT  BIGINT

作用:存储年龄,等级,id,各种号码等

类型存储范围:

整型字段在整型类型后不加unsigned就有正负符号之分。

create table t1(x tinyint);

insert into t1 values(120),(-120);

create table t2(x tinyinr unsigned);

insert into t1 values(220);

强调:对于整型来说,数据类型后面的宽度并不是存储限制,

而是显示限制,所以在创建表时,如果字段采用的是整型类型,

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

严格模式补充

create table t1(x tinyint,name char);

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

show variables like "%mode%";  # 查看数据库配置中变量名包含mode的配置参数

安全模式

修改安全模式
set session   # 只在当前操作界面有效
set global     # 全局有效

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

浮点型

创建方法:create table t1(x float(255,30));

分类:FLOAT  DOUBLE  DECIMAL

应用场景:身高,体重,薪资

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

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

float(255,30)(精度最差)

double(255,30)(精度比float)

decimal(65,30)(精度最好)

字符类型(char与varchar)

create table t1(name char(4));

分类:char(定长)varchar(变长)

char(4):存储超出四个字报错,不够四个就用空格补充

varchar(4):存储超出四个就报错,不够四个有几个就存几个

针对char类型,mysql在存储时会将数据用空格补全存放到硬盘中。
但是会在读出结果的时候自动取掉末尾的空格

如果不想让mysql帮你做自动去除末尾空格的操作,需要再添加一个模式
set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";

用select char_length(name) from t1;查询字符长度

char与varchar的使用区别

name char(5)
# 缺点:浪费空间
# 优点:存取速度都快

name varchar(5)
# 缺点:存取速度慢
# 优点:节省空间

日期类型

分类

date:2019-05-01
time:11:11:11
Datetime: 2019-01-02 11:11:11
Year:2019

测试

create table student(
id int,
name char(16),
born_year year,
birth date,
study_time time,
reg_time datetime
);
insert into student values(1,'egon','2019','2019-05-09','11:11:00',
'2019-11-11 11:11:11');

枚举与集合

分类
枚举enum 多选一
集合set 多选多

测试

create table user(
id int,
name char(16),
gender enum('male','female','others')
);
insert into user values(1,'jason','xxx') # 报错
insert into user values(2,'egon','female') # 正确!

create table teacher(
id int,
name char(16),
gender enum('male','female','others'),
hobby set('read','sleep','sanna','dbj')
);
insert into teacher values(1,'egon','male','read,sleep,dbj') # 集合也可以只存一个

约束条件

NOT NULL --标识该字段不能为空

约束条件初试>>>null与not null

create table t1(id int,name char not null);

insert into t1 values(1,'j');  # 正常存储

insert into t1 values(2,null);  # 报错

总结 类型与约束条件区别

类型:限制字段必须以什么样的数据类型存储

约束条件:限制字段是在类型之外添加一种额外的限制

PRIMARY KEY (PK) --标识该字段为该表的主键,可以唯一的标识记录

单从约束角度来说primary key就等价于not null unique
create table t11(id int primary key);
desc t11;
insert into t11 values(1),(1); # 报错
insert into t11 values(1),(2);

除了约束之外,它还是innodb引擎组织数据的依据,提升查询效率

强调:
1.一张表中必须有且只有一个主键,如果你没有设置主键,
那么会从上到下搜索直到遇到一个非空且唯一的字段自动将其设置为主键

create table t12(
id int,
name char(16),
age int not null unique,
addr char(16) not null unique
)engine=innodb;
desc t12;

2.如果表里面没有指定任何的可以设置为主键的字段,
那么innodb会采用自己默认的一个隐藏字段作为主键,
隐藏意味着你在查询的时候无法根据这个主键字段加速查询了
索引:类似于书的目录,没有主键就相当于一页一页翻着查
3.一张表中通常都应该有一个id字段,并且通常将改id字段作成主键

联合主键:多个字段联合起来作为表的一个主键,本质还是一个主键
create table t18(
ip char(16),
port int,
primary key(ip,port)
);
desc t18;

AUTO_INCREMENT --标识该字段的值自动增长(整数类型,而且为主键)

primary key + auto_increment

主键id作为数据的编号,每次最好能自动递增
create table t13(
id int primary key auto_increment,
name char(16)
);
insert into t13('jason'),('jason'),('jason'); # id字段自动从1开始递增
# 注意:auto_increment通常都是加在主键上,并且只能给设置为key的字段加

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

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

FOREIGN KEY (FK) --标识该字段为该表的外键
pass

UNIQUE KEY (UK) --标识该字段的值是唯一的

单列唯一
create table user1(
id int unique,
name char(16)
);
insert into user1 values(1,'jason'),(1,'egon') # 报错
insert into user1 values(1,'jason'),(2,'egon') # 成功

联合唯一
create table server(
id int,
ip char(16),
port int,
unique(ip,port)
)
insert into server values(1,'127.0.0.1',8080);
insert into server values(2,'127.0.0.1',8080); # 报错
insert into server values(1,'127.0.0.1',8081);

DEFAULT --为该字段设置默认值

not null+default

create table user(
id int,
name char(16)
);
insert into user values(1,null) # 可以修改

alter table user modify name char(16) not null;
insert into user(name,id) values(null,2); # 报错 插入数据可以在表名后面指定插入数据对应的字段

create table student(
id int,
name char(16) not null,
gender enum('male','female','others') default 'male'
)
insert into student(id,name) values(1,'jason') # 成功

UNSIGNED --无符号,ZEROFILL --使用0填充

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

MySQL的详细操作的更多相关文章

  1. Linux下自动备份MySQL数据库详细操作步骤(转载)

    环境说明操作系统:CentOSIP:192.168.150.214Oracle数据库版本:Oracle11gR2用户:root 密码:123456端口:3306数据库:ts_0.ts_1.ts_2.t ...

  2. windows7配置Nginx+php+mysql的详细操作是怎样?

    1.准备安装包等 (1)nginx-1.10.1.zip,下载链接为http://nginx.org/en/download.html .我个人选择了稳定版. (2)php-5.6.25-nts-Wi ...

  3. 整理好的一些mysql表详细操作

    一.创建表的完整语法#语法:create table 库名.表名( 字段名1 类型[(宽度) 约束条件], 字段名2 类型[(宽度) 约束条件], 字段名3 类型[(宽度) 约束条件]);约束条件:是 ...

  4. day41 mysql详细操作

    复习 create table 表名( id int primary key auto_increment, 字段名 数据类型[(宽度) 约束] )engine=innodb charset=utf8 ...

  5. MySQL行(记录)的详细操作一 介绍 二 插入数据INSERT 三 更新数据UPDATE 四 删除数据DELETE 五 查询数据SELECT 六 权限管理

    MySQL行(记录)的详细操作 阅读目录 一 介绍 二 插入数据INSERT 三 更新数据UPDATE 四 删除数据DELETE 五 查询数据SELECT 六 权限管理 一 介绍 MySQL数据操作: ...

  6. {MySQL的库、表的详细操作}一 库操作 二 表操作 三 行操作

    MySQL的库.表的详细操作 MySQL数据库 本节目录 一 库操作 二 表操作 三 行操作 一 库操作 1.创建数据库 1.1 语法 CREATE DATABASE 数据库名 charset utf ...

  7. day 37 MySQL行(记录)的详细操作

    MySQL行(记录)的详细操作   阅读目录 一 介绍 二 插入数据INSERT 三 更新数据UPDATE 四 删除数据DELETE 五 查询数据SELECT 六 权限管理 一 介绍 MySQL数据操 ...

  8. mysql之字段的修改,添加、删除,多表关系(外键),单表详细操作(增删改)

    字段的修改.添加和删除 create table tf1( id int primary key auto_increment, x int, y int ); #修改 alter table tf1 ...

  9. MySQL的库、表的详细操作

    目录 MySQL的库.表的详细操作 一 库操作 二 表操作 MySQL的库.表的详细操作 本节目录 一 库操作 1.创建数据库 1.1 语法 CREATE DATABASE 数据库名 charset ...

随机推荐

  1. 如何用Python统计《论语》中每个字的出现次数?10行代码搞定--用计算机学国学

    编者按: 上学时听过山师王志民先生一场讲座,说每个人不论干什么,都应该学习国学(原谅我学了计算机专业)!王先生讲得很是吸引我这个工科男,可能比我的后来的那些同学听课还要认真些,当然一方面是兴趣.一方面 ...

  2. 文献阅读报告 - Social LSTM:Human Trajectory Prediction in Crowded Spaces

    概览 简述 文献所提出的模型旨在解决交通中行人的轨迹预测(pedestrian trajectory prediction)问题,特别是在拥挤环境中--人与人交互(interaction)行为常有发生 ...

  3. unable to execute /bin/mv: Argument list too long

    四种解决”Argument list too long”参数列表过长的办法 转自 http://hi.baidu.com/cpuramdisk/item/5aa49ce00c0757aecf2d4f2 ...

  4. (4)关于Alpha通道问题

    其实,我还是不理解,我还是先把我目前懂得和觉得有用的东西先存下来 =================================================================== ...

  5. 光纤卡网卡的区别以及HBA的常规定义-----引自百度百科

    在讨论这个问题的时候,需要先说清楚一个问题:我们知道,在早期的SAN存储系统中,服务器与交换机的数据传输是通过光纤进行的,因为服务器是把SCSI指令传输到存储设备上,不能走普通LAN网的IP协议,所以 ...

  6. 客户主题分析(tableau)—客户分群

    主要分析方面:客户合理分群 客户分群实现:使用聚类构建指标,需理解聚类的分析逻辑,需使用软件:tableau 聚类方法:选择3指标分别为购买总金额,客户购买次数.类平均购买价格(四类的平均购买价格,四 ...

  7. 利用Matlab神经网络计算包预测近四天除湖北外新增确诊人数:拐点已现

    数据来源: 国家卫健委 已经7连降咯! 1.20-2.10图示(更新中): 神经网络训练并预测数据: clear %除湖北以外全国新增确诊病例数 2020.1.20-2.9 num=[5,44,62, ...

  8. rpc框架解释

    远程过程调用协议RPC(Remote Procedure Call Protocol) RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方 ...

  9. 吴裕雄--天生自然ShellX学习笔记:Shell简介

    Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个 ...

  10. MyBatis从入门到精通(第9章):Spring集成MyBatis(中)

    MyBatis从入门到精通(第9章):Spring集成MyBatis(中) 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法.应该将应用自身的设计和具体 ...