MySQL第二讲

存储引擎

就是存储数据的方式
查看存储引擎:
	show engines;
MyISAM
"""
mysql5.5之前的版本默认引擎

查询速度比InnoDB快,安全性低
不支持事务
支持表级锁
"""
InnoDB
"""
mysql5.6之后的版本默认引擎
查询速度比MyISAM慢,安全性高

支持事务
支持行级锁
外键
"""
MEMORY
"""
数据存在内存中
"""


MyISAM
	.frm----> 表结构
    .MYD-----> 表数据
    .MYI-----> 索引(目录) 优点: 查询速度快
InnoDB
	.frm----->表结构
    .ibd------>表数据和索引
MEMORY
	.frm ----> 表结构

MyISAM和InnoDB引擎的区别?

MyISAM

  每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。

    MyISAM表格可以被压缩,而且它们支持全文搜索。不支持事务,而且也不支持外键。如果事物回滚将造成不完全回滚,不具有原子性。在进行updata时进行表锁,并发量相对较小。如果执行大量的SELECT,MyISAM是更好的选择。

    MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少。能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小

    MyISAM缓存在内存的是索引,不是数据。而InnoDB缓存在内存的是数据,相对来说,服务器内存越大,InnoDB发挥的优势越大。

    优点:查询数据相对较快,适合大量的select,可以全文索引。

    缺点:不支持事务,不支持外键,并发量较小,不适合大量update

InnoDB:

这种类型是事务安全的。.它与BDB类型具有相同的特性,它们还支持外键。InnoDB表格速度很快。具有比BDB还丰富的特性,因此如果需要一个事务安全的存储引擎,建议使用它。在update时表进行行锁,并发量相对较大。如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。

优点:支持事务,支持外键,并发量较大,适合大量update

缺点:查询数据相对较快,不适合大量的select

数据类型

整形

tinyint  smallint  int   bigint

他们之间的区别就是存储数据的范围不一样

所有整形默认都是带符号的

image

浮点型

float double decimal

float(8,2)
	总共八位,小数两位 eg: 最大值999999.99
double(8,2)
	总共八位,小数两位
decimal(8,2)
	总共八位,小数两位
    
精确度
	decimal > double > float

image

字符串

字符串括号内的数字必须写,代表存储字符串的长度

chr(4)
	存储4位,不够的空格补齐,超过四位的报错
     优点:
        查询速度快,整存整取
     缺点:
    	浪费空间
 varchar(4)
	存储4位,有几位存几位,超过的报错
    优点:
    	节省空间
    缺点:
    	查询速度比char慢

数据类型之日期类型

datetime  年月日时分秒
date      年月日
time	  时分秒
year      年


mysql> create table t1 (id int, q_time datetime, a_time date, z_time time, w_time year);
Query OK, 0 rows affected (0.05 sec)

mysql> desc t1;
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| id     | int      | YES  |     | NULL    |       |
| q_time | datetime | YES  |     | NULL    |       |
| a_time | date     | YES  |     | NULL    |       |
| z_time | time     | YES  |     | NULL    |       |
| w_time | year     | YES  |     | NULL    |       |
+--------+----------+------+-----+---------+-------+
5 rows in set (0.01 sec)

mysql> insert into t1 values(1, '2021-7-27 15:42:21', '2021-7-27', '15:42:24', '2021');
Query OK, 1 row affected (0.01 sec)

mysql> select *from t1;
+------+---------------------+------------+----------+--------+
| id   | q_time              | a_time     | z_time   | w_time |
+------+---------------------+------------+----------+--------+
|    1 | 2021-07-27 15:42:21 | 2021-07-27 | 15:42:24 |   2021 |
+------+---------------------+------------+----------+--------+
1 row in set (0.00 sec)

枚举

enum
多选一

mysql> create table t1 (id int, gender enum('male', 'female', 'other'));
Query OK, 0 rows affected (0.04 sec)

mysql> desc t1;
+--------+-------------------------------+------+-----+---------+-------+
| Field  | Type                          | Null | Key | Default | Extra |
+--------+-------------------------------+------+-----+---------+-------+
| id     | int                           | YES  |     | NULL    |       |
| gender | enum('male','female','other') | YES  |     | NULL    |       |
+--------+-------------------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)


mysql> insert into t1(id, gender) values(1, 'male');
Query OK, 1 row affected (0.00 sec)

mysql> select * from t1;
+------+--------+
| id   | gender |
+------+--------+
|    1 | male   |
+------+--------+
1 row in set (0.00 sec)

mysql> insert into t1(id ,gender) values(2, egon);  # 报错, 因为这个不在定义的枚举里面
ERROR 1054 (42S22): Unknown column 'egon' in 'field list'

集合

set
多选一


mysql> create table t1(hobby set('read', 'music', 'dbj', 'tea');
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
mysql> create table t1(hobby set('read', 'music', 'dbj', 'tea'));
Query OK, 0 rows affected (0.04 sec)

mysql> desc t1;
+-------+---------------------------------+------+-----+---------+-------+
| Field | Type                            | Null | Key | Default | Extra |
+-------+---------------------------------+------+-----+---------+-------+
| hobby | set('read','music','dbj','tea') | YES  |     | NULL    |       |
+-------+---------------------------------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> insert into t1 values('read');
Query OK, 1 row affected (0.01 sec)

mysql> insert into t1 values('read,music');
Query OK, 1 row affected (0.01 sec)

mysql> insert into t1 values('read,qe');   # 报错,插入的数据只能是集合里面的,可以是多个
ERROR 1265 (01000): Data truncated for column 'hobby' at row 1
mysql> select * from t1;
+------------+
| hobby      |
+------------+
| read       |
| read,music |
+------------+
2 rows in set (0.00 sec)

创建表的完整语句

create table 表名 (
	字段名 数据类型(长度) 约束条件1 约束条件2,
    字段名 数据类型(长度) 约束条件1 约束条件2,
    字段名 数据类型(长度) 约束条件1 约束条件2
)


"""
注意:
 	1.表中字段名和数据类型是必填项, 约束条件可选
 	2.约束条件可以有多个,依次往下写
 	3.sql语句最后一个不能加逗号
"""
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值