Mysql 简介二
Mysql 数据库引擎:
数据库引擎是用于存储、处理和保护数据的核心服务
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。Mysql支持的引擎一般有这几种:
MyISAM Mysql 5.1版本之前默认的存储引擎,仅仅支持表锁,但查询速度较InnoDB更快
CSV 早期数据的一种excel表格存储形式
MEMORY 数据只在存储于系统内存中,并未写入硬盘,断电数据即丢失
InnoDB 5.5以上版本的Mysql默认的存储引擎,支持行锁及表锁外键,事物,安全性更高
查看当前Mysql支持的引擎 使用语句 show engines; 即查看当前Mysql所支持的引擎列表。
可通过语句查看不同存储引擎存储表结构文件特点:
例:
create table test1(id int)engine=innodb;
Mysql的数据类型:
整型:默认情况下整形有符号(+或-) 需要用一个进制位存放符号。微 小 中 大
tinyint smallint meduium int bigint
所占字节大小 1 2 3 4 8 有符号: create table test1(id tinyint);
insert into test1 value(255); 最后显示为127 为有符号的
无符号: create table test2(id tinyint unsigned);
insert into test3 value(); 超出范围尽可能保存更多的值,负数保存为0
在无符号下保存最多256 其实存的是255 以上特性为mysql的非严格模式。 有符号时最大值保存 2147483647
如果值超出范围就报错,默认为严格模式。 查看当前模式: show variables like 'sql_mode'; 更改严格模式:
set global sql_mode='STRICT_TRANS_TABLES'; 永久更改严格模式,
set session sql_mode='STRICT_TRANS_TABLES'; 临时更改为严格模式 show variables like "%mode%"; # 查看数据库配置中变量名包含mode的配置参数 约束条件:
对于字符而言约束是字符串的长度
对于整型而言约束是数字显示长度,如果数据超过显示宽度,可使用0补全 zerofill 类型:限制字段必须以什么样的数据类型存储
约束条件:约束条件是在类型之外添加一种额外的限制
浮点型:小数型
float float(m,d) m表示浮点数整体长度,d表示小数的长度 例: float(5,3) 99.999
double float 与double 最大长度都是255,小数位最大长度都是30
decimal 整体长度最大为65,准确,不会丢失精度
精度区别: 精度最高 decimal----->double------>float 精度最底
存储限制
float(255,30) 最大255位,小数30位
double(255,30) 最大255位,小数30位
decimal(255,30) 最大255位,小数30位 精确度验证
create table t9(x float(255,30)); 最大255位,小数30位
create table t10(x double(255,30)); 最大255位,小数30位
create table t11(x decimal(65,30)); 最大65位,小数30位 字符型:分为 char与vachar
char() 定长字符 类型的长度固定,实际字符长度小于标的长度时,会以空格补齐并进行存储。
varchar() 变长字符 类型的长度可以变化,以实际字符的长度进行存储
char_lenth(name) 查询字符长度
select char_length(a),char_length(b) from t10; 查看表中a与b的字符长度
设置格式显示字符全部长度:
set global sql_mode='PAD_CHAR_TO_FULL_LENGTH,STRICT_TRANS_TABLES';
运行命令---> 退出重新进入mysql
mysql存储时会自动加上空格,但默认输出时不显示空格,只有加上上面的语句才显示
当执行 select * from test where name='aib' mysql会自动将参数末尾的空格去除
char与varchar区别: 二者最大可存在65535字节
char 存取效率高 浪费存储空间
varchar 存取效率底,节省存储空间
字符文本类型:
TEXT系列 TINYTEXT MEDIUMTEXT LONGTEXT
BLOB系列 TINYBLOB BLOB MEDIUMBLOB LONGBLOB
Binary系列 Binary VARBINARY
text 数据类型用于保存变长的大字符串, 模糊搜索: selece * from test where name like '%aib%' %代表0个或任意个字符 selece * from test where name like '%aib_' _代表任意一个字符 枚举 从给出的多个值中选取一个。并可设置默认类型 例: create table student(id int,name char(10),gender enum('Male','Female') default 'Male‘); 新建一个表,基中gender字段中的数据类型给出枚举,只能从枚举中的数据选择一个,并设置默认 为'Male' 集合 从给出的集合中选择一个或多个。 例: create table user(id int,name char(10),gender enum('Male','Female') default 'Male‘,hobbies set('read','music','walk')); 设置多个爱好,可选择一个或多个。 完整的sql语法:
create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
);
注意事项:
1. 在同一张表中,字段名不能相同
2. 宽度和约束条件可选,字段名和类型是必须的
3. 最后一个字段后不能加逗号!
约束分类:
PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录
FOREIGN KEY (FK) 标识该字段为该表的外键 设置表与表之间关联时使用
NOT NULL 标识该字段不能为空
UNIQUE KEY (UK) 标识该字段的值是唯一的 表内其它字段不能出现相同类型的值
AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键)一般与PRIMARY KEY搭配使用 用来标识使用ID等。
DEFAULT 为该字段设置默认值
UNSIGNED 无符号
ZEROFILL 使用0填充 单列唯一约束:
create table test1(id int(4) unique,name char(32) unique); 一语句中多个字段有唯一性约束 多列唯一约束:
create table test1(id int(4),name char(32),unique(id,name)); 联合约束
只有当括号内的字段都相同时才会判定相同,并报错,
多列联合主键:
create table test1(id int,name char(32),primary key(id,name)); 将id与name全部设置为主键
同一表中可以有多个主键,但没有意义。 auto_increment 自动增长记数 一般用来记录ID等数据时使用 通常搭配主键字段使用,可自动为数据分配从1开始记数
添加一条自动记数加1。
如需修改则为:
alter table auto_increment=数字; 设置表中的数据从写入的数字开始加1.
delete from tb1;
强调:上面的这条命令确实可以将表里的所有记录都删掉,但不会将id重置为0,
所以此该条命令根本不是用来清空表的,delete是用来删除表中某一些符合条件的记录
delete from tb1 where id > 10; 如果要清空表,使用truncate 作用:将整张表重置,id重新从0开始记录 例: truncate student; 将student表中的数据清空,但保留原有结构
为什么要进行分表操作 : 1,数据冗余
2,效率底下
3,扩展性差 表与表之间关系: 一,多对多的关系,如下面例题,一个学生可以报多个课程,一个课程下也可以有多个学生报名,即多对多的关系。 例: create table student(id int(2) not null primary key auto_increment, 新建一个表命名为student,并指定字段名id 类型为整型,不能为空,且带自增效果,并设置为主键 name char(10), 指定字段名name,类型为字符char类型,长度为10字节 gender enum('Male','Female','HalfMan') default 'Male', 指定字段名gender ,类型为枚举选项,默认为'Male' age int(2), 指定字段名age 数据类型为2字节的整型 course_id int(2), 指定字段名course_id 数据类型为2字节的整型 hobbies set('read','music','walk')); 指定hobbies 字段名的类型为从给出的集合中选择一个或多个. create tab;e courses(id int(2) not null primary key auto_increment, 新建表名为courses,设置字段id类型为整型,不能为空,且为主键带数值自增效果。 name char(10), 定义字段name类型为char字符类型,且为10个字节长度 cost int(6)); 定义字段cost 类型为整型,显示长度为6 在已有的二个表的基础之上为二个表建立关联 create table code(id int(2) not null primary key auto_increment, 新建另一个关联表,定义主键,且不能为空,并带数值自增加效果 stu_id int, 定义一个字段名stu_id 类型为整型 用于关联student表 cou_id int, 定义一个字段名cou_id 类型为整型 用于关联courses表 foreign key(stu_id) references student(id) 定义一个外键,将此表内的字段名stu_id与student的字段名id相关联 on update cascade 定义两个表内的级联功能,如果不定义级联功能,在进行相应的删除操作 on delete cascade, 时,只能先删除被关联表内容,再删除主表内容,否则报错 foreign key(cou_id) references courses(id) 定义另一个外键,此外键将此表内cou_id字段与courses字段的id相关联 on update cascade 两样要设置级联功能,避免后续操作时报错。 on delete cascade ); 二,一对多的关系,如下例题,一个员工只属于一个部门,但一个部门下可以有多个员工,即一对多的关系。此时部门为被关联的对象,需要先创建部门表,再创建员工表 例: create table department(id int not null primary key auto_increment, 新建一个部门表,定义部门id类型为整型,设置为主键,且不能为空,并带数值增加效果 name char(10), 定义部门名称字段,类型为char字符类型,长度为10字节 dep_desc vachar(32)); 定义部门描述字段,类型为varchar变长字符类型。 create table employee(id int not null primary key auto_increment, 新建一个员工表,并设置员工id字段为整型,设置为主键,且不能为空,自带数值增加效果 name char(10), 定义员工姓名字段 类型为整型 gender enum('Male','Female') default 'Male', 定义员工性别,并限制只能输入枚举中的一个值 age int(2), 定义员工年龄,类型为整型 dep_id int, 同样定义员工所以部门的ID号 phone chr(11), 此处定义员工的电话字段,电话号码为11位,使用字符串存储更方便 foreign key(dep_id) references department(id) 定义外键将员工的部门ID字段与部门表的ID字段相关联 on update cascade 同样定义级联功能。 on delete cascade ); 三,一对一的关系 作者与作者介绍的关系,一个作者只有一个作者说明 ,一个作者说明上也只介绍一个作者,彼此是 一 一对应该的关系 create table author( 新建一个作者表
id int primary key auto_increment, 定义作者id 类型为主键,并自带数值增加效果
name char(20) not null, 定义作者的姓名字段,且规定不能为空
phone char(16) not null 定义作者的电话字段,限制此字段不能为空
); create table About_author( 新建一个作者说明表
id int primary key auto_increment, 定义表的字段id 为主键
author_id int unique, 设置一个作者字段,且此字段一定要是唯一的
foreign key(author_id) references author(id) 使用外键将唯一的字段与作者的ID相关联
on delete cascade 同样设置级联功能。
on update cascade
); *********此处注意点********: 使用外键关联的表与表之间的字段类型必须相同,其中包括类型中是否为有无符号标识,否则会报错!!

更多精彩