数据库编码
编码
占用字节
例子:"你好"占用字节
是可以储存emoji表情
utf8
3
6
NO
utf8mb4
4
6字节  (不是所有中文字符占用的字节都是4,有可能是3)
Yes
PS:要使mysql储存emoji,有两个条件:
1.Mysql版本>5.5.3
2.java jdbc驱动版本>5.1.13
字段类型
数值
类型
储存空间/字节
范围
int
4
从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整数
bigint
8
从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整数
smallint
2
从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整数
tenyint
1
从 0 到 255 的整型数据的整数
float
4
/
double
8
/
decamal(M,N)
精度越大占用越大
1
PS:float与double均是非精确数据类型
字符
类型
储存空间
char
255字符
varchar
可伸缩长度,不能超过65535字节
text
65535字节,约64k
PS:
1.char和varchar定义的长度是字符长度,而不是字节长度
2.text储存单位是字节
时间日期
例
储存空间
date
2018-01-01
3字节
time
12:00:00
3字节
timestamp
2018-01-01 12:00:00
4字节
datetime
2018-01-01 12:00:00
8字节
PS:timestamp与datetime区别
1.timestamp范围是1970-01-01 00:00:01 ~ 2038-01-19 03:14:07
datetime范围是1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
2.timestamp会根据系统的时区而变化,datetime就不会
权限管理
创建一个用户并赋权,方法1
--localhost 意思是只允许该用户在localhost下登录,改成'%' 则允许所有Ip登录
CREATE USER 'cc'@'localhost' IDENTIFIED BY '123456';
-- WITH GRANT OPTION意思是允许该用户把自身的权限赋给其他人
-- *.* 表示所有库下的所有表
GRANT SELECT
ON *.* TO 'cc'@'localhost' WITH GRANT OPTION;
创建一个用户并赋权,方法2
-- 给aaa赋权,用户aaa不存在就创建一个
GRANT DELETE
ON *.* TO 'aaa'@'localhost' IDENTIFIED BY '123123' WITH GRANT OPTION;
删除某用户的权限
revoke DELETE on *.* from 'aaa'@'localhost';
查看mysql所有的权限关键字
--Mysql所有的权限列表
SHOW PRIVILEGES;
其他用户相关的语法
--当前用户拥有的权限
SHOW GRANTS;
--查询所有用户
SELECT User, Host, Password FROM mysql.user;
--查看某用户的权限
SHOW GRANTS FOR '用户名'@'localhost';
--删除某用户
DROP USER 'cc'@'localhost';
--修改当前用户密码
SET PASSWORD = PASSWORD('mypass');
--修改某用户的密码(只有root才能修改)
SET PASSWORD FOR 'jeffrey'@'localhost' = PASSWORD('mypass');

Mysql其实是把权限相关的信息储存在名为"mysql"的数据库中,下面是mysql自带的4个数据库的简介

数据库名

information_schema

information_schema提供了访问数据库元数据的方式。这就是information_schema的任务了,同时也解答了我们上一个问题。然而,又一个概念产生了,什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。

performance_schema

主要用于收集数据库服务器性能参数。并且库里表的存储引擎均为PERFORMANCE_SCHEMA,而用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表。MySQL5.5默认是关闭的,需要手动开启

mysql

这个是mysql的核心数据库,类似于sql server中的master表,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息。

test

测试库,没什么用。但是生产环境下建议把它删掉,因为test默认不受权限控制,别人可以随意进入该库添加一些垃圾数据,会影响到生产的环境

其中数据库"mysql"中,与权限有关的表分别是:

user、db、 tables_priv、columns_priv

分别对应 用户、库级别、表级别、字段级别的一些权限信息

事务

mysql decima字节 mysql decimal占用字节_网易云课堂 oracle

⑴ 原子性(Atomicity)

原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。

⑵ 一致性(Consistency)

一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。

拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。

⑶ 隔离性(Isolation)

隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。

⑷ 持久性(Durability)

持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

3种隔离现象:

mysql decima字节 mysql decimal占用字节_mysql decima字节_02

数据库不同的隔离级别对应不同的 隔离现象

mysql decima字节 mysql decimal占用字节_mysql_03

特别注意的是,mysql默认的是可重复读,但在InnoDB引擎中,Mysql可避免幻读

基本语法很简单,略过。

两点值得注意

autocommit可以在session级别设置

DDL(数据定义语言,用来定义数据库对象:数据库,表,列等,例如创建、删除、修改)永远是自动提交的,无法回滚。且若创建一个事务后,未进行提交操作但进行了DDL操作,一样无法回滚