MySQL手记

启动和停止MySQL服务:

在管理员权限下:

$ net start mysql
$ net stop mysql

(我本人的是mysql57,启动后可以在任务管理器的服务栏看到)

注意配置好环境变量

登录数据库

$  mysql -uroot -p

说明:
以上是直接在windows命令行登录root用户数据库,输入-p回车之后,会弹出需要输出password的命令。

MySQL退出

$ mysql > exit;
$ mysql > quit;
$ mysql > \q;

修改MySQL提示符

  1. 连接客户端时通过参数指定
$ shell>mysql -uroot -proot --prompt 提示符

(上面登录的是root用户,密码也是root)。

  1. 连接上客户端后,通过prompt命令修改
$ mysql>prompt 提示符

(Windows 命令行清屏命令 cls)

MySQL提示符

参数 描述
\D 完整的日期
\d 当前数据库
\h 服务器名称
\u 当前用户

MySQL常用命令

显示当前服务器版本

$ SELECT VERSION();

显示当前日期时间

$ SELECT NOW();  

显示当前用户

$ SELECT USER();

MySQL语句规范

  • 关键字与函数名称全部大写
  • 数据库名称、表名称。字段名称全部小写。
  • SQL语句必须以分号结尾。

数据表操作

创建数据库

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
[DEFAULT] CHARACTER SET [=] charset_name

("{}"中内容表示必选,"|"表示二者选其一,"[]"表示非必选)。

eg:

CREATE DATABASE t1;

查看当前服务器下的数据库列表

SHOW {DATABASES | SCHEMAS}
[LIKE 'pattern' | WHERE expr]
SHOW WARNINGS; 显示警告信息。
SHOW CREATE DATABASE db_name; 显示数据库创建的信息。

修改数据库

ALTER {DATABASE | SCHEMA} [db_name]
[DEFAULT] CHARACTER SET [=] charset_name

删除数据库

DROP {DATABASE | SCHEMA} [IF EXISTS] db_name

MySQL默认的端口号是多少? 3306;
MySQL中的超级用户叫什么? root;

数据类型:

整形

数据类型 存储范围 字节
TINYINT 有符号值:-128到127(-27到27-1)无符号值:0到255 (0到2^8-1) 1
SMALLINT 有符号值:-32768到32767(-215到215-1)无符号值:0到65535 (0到2^8-1) 2
MEDIUMINT 有符号值:-8388608到8388607(-224到224-1)无符号值:0到16777215 (0到2^16-1) 3
INT 有符号值:-2147483648到2147483647(-231到231-1)无符号值:0到4294967295 (0到2^32-1) 4
BIGINT 有符号值:-923372036854775808到923372036854775807(-263到263-1)无符号值:0到18446744073709551615 (0到2^64-1) 8

浮点型

数据类型 存储范围
FLOAT[(M,D)] -3.402823466E+38到-1.175494351E-38 , 0和1.175494351E-38到3.40223466E+38.M是数字总位数,D是小数d点后面的位数。如果M和D被省略,根据硬件允许的限制来保存值。单精度浮点数精确到大约7位小数。
DOUBLE[(M,D)] -1.1976931348623157E+308到-2.2250738585072014E-308 ,0和2.2250738585072014E-308到1.79763148623157E+308.

日期时间型

列类型 存储需求
YEAR 1
TIME 3
DATE 3
DATETIME 8
TIMESTAMP 4

字符型

类型 存储需求
CHAR(M) M个字节,0 <= M < 255
VARCHAR(M) L+1个字节,其中L <= M 且0 <= M <= 65535
TINYTEXT L+1个字节,其中L <2^8
TEXT L+2个字节,其中L <2^16
MEDIUMTEXT L+3个字节,其中L <2^24
LONGTEXT L+4个字节,其中L <2^32
ENUM('value1','value2',...) 1或2个字节,取决于枚举值的个数(最多65535个值)
SET('value1','value2',...) 1,2,3,4或者8个字节,取决于set成员的数目(最多64个成员)

数据表的操作

数据表(或称表)是数据库最重要的组成部分之一,是其他对象的基础。

USE

打开数据库

USE 数据库名称;

创建数据表

CREATE TABLE [IF NOT EXISTS] table_name(
cloumn_name data_type,
...
)

eg:

mysql> CREATE TABLE tb1(
    -> username VARCHAR(20),
    -> age TINYINT UNSIGNED,
    -> salary FLOAT(8,2) UNSIGNED
    -> );
SHOW TABALES

查看数据表列

SHOW TABLES [FROM db_name]
[LINK 'pattern' | WHERE expr]
SHOW COLUMNS

查看数据表结构

SHOW COLUMNS FROM tbl_name

INSERT

插入记录

INSERT [INTO] tbl_name[(col_name,...)] VALUES(val,...)

SELECT

记录查找

SELECT expr,... FROM tbl_name

eg:

mysql> SELECT * FROM tb1; 查询全部数据。
空值与非空值
  • NULL,字段可以为空值
  • NOT NULL,字值禁止为空

eg:

mysql> CREATE TABLE tb2(
    -> username VARCHAR(20) NOT NULL,
    -> age TINYINT UNSIGNED NULL
    -> );
AUTO_INCREMENT
  • 自动编号,且必须与主键组合使用
  • 默认情况下,起始值为1,每次的增量为1
PRIMARY KEY

主键约束

  • 每张数据表只能存在一个主键
  • 主键保证记录的唯一性
  • 主键自动为NOT NULL

eg:

mysql> CREATE TABLE tb3(
    -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    -> username VARCHAR(30)
    -> );
UNIQUE KEY

唯一约束

  • 唯一约束可以保证记录的唯一性
  • 唯一约束的字段可以为空值(NULL)
  • 每张数据表可以存在多个唯一约束

eg:

mysql> CREATE TABLE tb5(
    -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    -> username VARCHAR(20) NOT NULL UNIQUE KEY,
    -> age TINYINT UNSIGNED
    -> );
DEFAULT

默认值

当插入记录时,如果没有明确为字段赋值,则自动赋予默认值。

eg:

mysql> CREATE TABLE tb6(
    -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    -> username VARCHAR(20) NOT NULL UNIQUE KEY,
    -> sex ENUM('mail','female','secret') DEFAULT 'secret'
    -> );
约束:
  1. 约束保证数据的完整性和一致性。
  2. 约束分为表级约束和列级约束。
  3. 约束类型包括:
  • NOT NULL (非空约束)
  • PRIMARY KEY (主键约束)
  • UNIQUE KEY (唯一约束)
  • DEFAULT (默认约束)
  • FOREIGN KEY (外键约束)
FOREIGN KEYp
  • 保持数据一致性,完整性。
  • 实现一对一或一对多关系。

外键约束的要求:

  1. 父表和字表必须使用相同的存储引擎,而禁止使用临时表。
  2. 数据表的存储引擎只能为InnoDB.
  3. 外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同。
  4. 外键列和参照列必须创建索引。如果参照列不存在索引的话,MySQL将自动创建索引。
父表与子表

父表:子表所参照的表。
子表:具有外键列的表。

编辑数据表的默认存储引擎

MySQL配置文件(my.ini)
default-storage-engine=INNODB

查询数据表的创建信息
SHOW CREATE TABLE tb_name

eg:创建两张表

表一(父表):

mysql> CREATE TABLE provinces(
    -> id SMALLINT PRIMARY KEY AUTO_INCREMENT,
    -> pname VARCHAR(20) NOT NULL
    -> );

表二(子表):

mysql> CREATE TABLE users(
    -> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    -> username VARCHAR(20) NOT NULL,
    -> pid SMALLINT,
    -> FOREIGN KEY(pid) REFERENCES provinces (id)
    -> );
查看数据表索引
SHOW INDEXES FROM tb_name

eg:

  mysql> SHOW INDEXES FROM provinces;

eg:

mysql> SHOW INDEXES FROM provinces\G; 以网格的形式查看。
外键约束的参照操作
  1. CASCAED :从父表删除或更新且自动删除或更新子表中匹配的行。
  2. SET NULL :从父表删除或更新行,并且设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL。
  3. RESTRICT :拒绝对父表的删除或更新操作。
  4. NO ACTION :标准SQL的关机字,在MySQL中与RESTRICT相同。

eg:

mysql> CREATE TABLE users1(
        -> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
        -> username VARCHAR(20) NOT NULL,
        -> pid SMALLINT,
        -> FOREIGN KEY(pid) REFERENCES provinces (id) ON DELETE CASCADE
        -> );

必须先在父表中插入记录,再在子表中插入记录。

删除数据表中的数据

DELETE FROM tb_name WHERE column_name = where_condition

eg:

mysql> DELETE FROM provinces WHERE id = 3;
表级约束与列级约束
  • 对一个数据列建立的约束,称为列级约束。
  • 对多个数据列建立的约束,称为表级约束。
  • 列级约束既可以在列定义时声明,也可以在列定义后声明。
  • 表级约束只能在列定义后声明。

修改数据表

添加单列
ALTER TABLE tal_name ADD [COLUMN] col_name
column_definition [FIREST | AFTER col_name]

eg:

mysql> ALTER TABLE users1 ADD age TINYINT UNSIGNED DEFAULT 10;
添加多列
ALTER TABLE tbl_name ADD [COLUMN]
(col_name column_definition,...)  

添加多列只能插在最后,不能指定位置。

删除列
ALTER TABLE tbl_name DROP [COLUMN] col_name

eg:

mysql> ALTER TABLE users1 DROP password, DROP age;
添加主键约束
ALTER TABLE tb1_name ADD [CONSTRAINT [symbol]]
PRIMARY KEY [index_type] (index_col_name,...)

eg:

mysql> ALTER TABLE users2 ADD CONSTRAINT PK_user2_id PRIMARY KEY (id);
添加唯一约束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]]
UNIQUE [INDEX | KEY] [index_name] [index_type] (index_col_name,...)

eg:

mysql> ALTER TABLE users2 ADD UNIQUE (username);
添加外键约束
ALTER TABLE tb1_name ADD [CONSTRAINT [symbol]]
FOREIGN KEY [index_name] (index_col_name,...)
reference_definition

eg:

mysql> ALTER TABLE users2 ADD FOREIGN KEY (pid) REFERENCES provinces (id);
添加/删除默认约束
ALTER TABLE tbl_name ALTER [COLUMN] col_name
{SET DEFAULT literal | DROP DEFAULT}

eg:

mysql> ALTER TABLE users2 ALTER age SET DEFAULT 15;

eg:

mysql> ALTER TABLE users2 ALTER age DROP DEFAULT;
删除主键约束
ALTER TABLE tbl_name DROP PRIMARY KEY.
删除唯一约束
ALTER TABLE tb1_name DROP {INDEX | KEY} index_name

eg:

mysql> ALETER TABLE users2 DROP INDEX username;

(查看索引用 SHOW INDEXES FROM tb1_name 命令)

删除外键约束
ALETER TABLE tal_name DROP FOREIGN KEY fk_symbol

eg:

mysql> ALTER TABLE users2 DROP FOREIGN KEY users2_ibfk_1;

(查看外键用 SHOW CREATE TABLE tb1_name\G 命令)

修改列定义
ALTER TABLE tb1_name MODIFY [COLUMN] col_name
column_definition [FIRST | AFTER col_name]

(由大类型改成小类型,有可能造成数据的丢失)。

eg:

mysql> ALTER TABLE users2 MODIFY id SMALLINT UNSIGNED NOT NULL FIRST;
修改列名称

(同时可以用来修改列定义)

ALETER TABLE tal_name CHANGE [COLUMN] old_col_name
new_col_name column_definition [FIRST | AFTER col_name]

eg:

mysql> ALTER TABLE users2 CHANGE id p_id TINYINT UNSIGNED NOT NULL;
数据表更名

方法1

ALTER TABLE tbl_name RENAME [TO | AS] new_tbl_name

方法2

RENAME TABLE tb1_name TO new_tbl_name
[,tb1_name2 TO new_tbl_name2] ...

(尽量少的更该数据表的列名和数据表名,以免对其他表造成影响。)

INSERT

插入记录

方法1:

INSERT [INTO] tal_name [col_name,...] {VALUES | VALUE} ({expr | DEFAULT},...),(...),...

(为默认的自动编号的值赋值,如果不想改变其值,可以为其赋值“NULL”或者“DEFAULT”).

方法2:

INSERT [INTO] tal_name SET col_name={expr | DEFAULT},...

说明:
与第一种方式的区别在于,此方法可以使用子查询(SubQuery)。

方法3:

INSERT [INTO] tbl_name [(col_name,...)] SELECT ...

说明:此方法可以将查询结果插入到指定的数据表。

UPDATE

更新记录(单表更新)

UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET
col_name1={expr | DEFAULT} [,col_name2={expr | DEFAULT}]...
[WHERE where_condition]

eg:

mysql> UPDATE users SET age = age-1, sex=0;

eg:

mysql> UPDATE users SET age=age+1 WHERE id % 2=0;
DELETE

删除记录(单表删除)

DELETE FROM tbl_name [WHERE where_condition]
SELECT

查找记录

SELECT select_expr [,select_expr ...]
[
  FROM table_references
  [WHERE where_condition]
  [GROUP BY {col_name | position} [ASC | DESC], ...]
  [HAVING where_condition]
  [ORDER BY {col_name | expr | position} [ASC | DESC],...]
  [LIMIT {[offset,] row_count | row_count OFFSET offset}]
]
说明

select_expr(查询表达式)

  • 每一个表达式表示想要的一列,必须有至少一个。
  • 多个列之间以英文逗号分隔。
  • 星号(*)表示所有列。 tbl_name.* 可以表示命名的所有列。
  • 查询表达式可以使用[AS] alias_name 为其赋予别名。
  • 别名可用于GROUP BY ,ORDER BY或HAVING子句。

WHERE(条件表达式)

  • 对记录进行过滤,如果没有指定WHERE子句,则显示所有记录。
  • 在WHERE表达式中,可以使用MySQL支持的函数或运算符。

GROUP BY(查询结果分组)

[GROUP BY {col_name | position} [ASC | DESC],...]

HAVING(分组条件)

[HAVING where_condition]

ORDER BY(对查询结果进行排序)

[ORDER BY {col_name | expr | position} [ASC | DESC],...]

LIMIT(限制查询结果返回的数量)

[LIMIT{[offset,]row_count | row_count OFFSET offset}]

子查询

子查询(Subquery)是指出现在其他SQL语句内的SELECT子句。

子查询:

  • 子查询指嵌套在查询内部,且必须始终出现在圆括号内。
  • 子查询可以包含多个关键字或条件,如DISTINCT,GROUP BY,ORDER BY,LIMIT,函数等。
  • 子查询的外层查询可以是:SELECT,INSERT,UPDATE,SET或DO。

子查询返回值:子查询可以返回标量、一行、一列或子查询。

1.使用比价运算符的子查询

使用比价运算符的子查询 =、>、<、<=、>=、<>、!=、<=>

语法结构operand comparison_operator subquery

用ANY、SOME 或 ALL 修饰的比较运算符

operand comparison_operator ANY (subquery)
operand comparison_operator SOME (subquery)
operand comparison_operator ALL (subquery)
2.使用[NOT] IN 的子查询

语法结构 operand comparison_operator [NOT] IN (subquery)

  • =ANY 运算符与 IN 等效。
  • !=ALL 或 <>ALL运算符与NOT IN等效。
3.使用[NOT] EXISTS的子查询

如果子查询返回任何行,EXISTS将返回TRUE;否则为FALSE。

INSERT...SELECT

将查询结果写入数据表

INSERT  [INTO] tbl_name [(col_name,...)] SELECT...

多表更新

UPDATE table_references SET col_name1={expr | DEFAULT}
[,col_name2 ={expr | DEFAULT}]...
[WHERE where_condition]

CREATE...SELECT

创建数据表同时将查询结果写入到数据表

CREATE TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)]
select_statement

连接

MySQL在SELECT语句、多表更新、多表删除语句中支持JOIN操作。

语法结构

table_reference
{[INNER | CROSS] JOIN | {LEFT | RIGHT} [OUTER] JOIN}
table_reference
ON conditional_expr

数据表参照(table_reference)

tal_name [[AS] alias] | table_subquery [AS] alias

数据表可以使用tbl_name AS alias_name 或 tbl_name alias_name 赋予别名。

table_subquery可以作为子查询使用在FROM子句中,这样的子查询必须为其赋予别名。

连接类型
  • INNER JOIN,内连接
    在MySQL中,JOIN,CROSS JOIN 和 INNER JOIN 是等价的。
  • LEFT [OUTER] JOIN,左外连接
  • RIGHT [OUTER] JOIN,右外连接
  • 內连接:显示左表及右表符合连接条件的记录。
  • 左外连接: 显示左表的全部记录及右表符合连接条件的记录。
  • 右外连接: 显示右表的全部记录及左表符合条件的记录。

说明:

外连接

A LEFT JOIN B join_condition

  • 数据表B的结果集依赖数据表A。
  • 数据表A的结果集根据左连接条件依赖所有数据表(B表除外)。
  • 左外连接条件决定如何检索数据表B(在没有指定WHERE条件的情况下)。
  • 如果数据表A的某条记录符合WHERE条件,但是在数据表B不存在符合连接条件的记录,将生成一个所有列为空的额外的B行。

内连接

  • 如果使用内连接查找的记录在连接数据表中不存在,并且在WHERE子句中尝试以下操作:
  • col_name IS NULL时,如果col_name被定义为NOT NULL,
  • MySQL将在找到符合连接条件的记录后停止搜索更多的行。

连接条件

通常使用ON关键字来设定条件,使用WHERE关键字进行结果集记录的过滤。

无限级分类表的设计

设计:
一般设置 type_id, type_name, parent_id 这三个字段。

自身连接
同一个数据表对其自身进行连接。(通过别名,将一张表看成左表和右表)。

多表删除

DELETE tbl_name[.*][,tal_name[.*]]...
FROM table_references
[WHERE where_condition]

MySQL数据库的函数

  • 字符函数
  • 数值运算符与函数
  • 比较运算符与函数
  • 日期时间函数
  • 信息函数
  • 聚合函数
  • 加密函数

字符函数

函数名称 描述
CONCAT() 字符连接
CONCAT_WS() 使用指定的分隔符进行字符连接,第一个参数是分隔符。
FORMAT() 数字格式化
LOWERE() 装换成小写字母
UPPER() 装换成大写字母
LEFT() 获取左侧字符
RIGHT() 获取右侧字符
LENGTH() 获取字符串长度
LTRIM() 删除签到空格
RTRIM() 删除后续空格
TRIM() 删除签到和后续空格
SUBSTRING() 字符串截取
[NOT] LIKE 模式匹配
REPLACE() 字符串替换

补充:

  • "%"(百分号)代表任意个字符
  • "_" (下划线)代表任意一个字符

数值运算符与函数

函数名称 描述
CEIL() 进一取整
DIV 整数除法
FLOOR() 舍一取整
MOD 取余函数(取模)
POWER() 幂运算
ROUND() 四舍五入
TRUNCATE() 数字截取

比较运算符与函数

函数名称 描述
[NOT] BETWEEN...AND... [不]在范围之内
[NOT] IN() [不]在列出值范围内
IS [NOT] NULL [不]为空

日期时间函数

函数名称 描述
NOW() 当前日期和时间
CURDATE() 当前日期
CURTIME() 当前时间
DATE_ADD() 日期变化
DATEDIFF() 日期差值
DATE_FORMAT() 日期格式化

信息函数

函数名称 描述
CONNECTION_ID() 连接ID
DATEBASE() 当前数据库
LAST_INSERT_ID() 最后插入记录的ID号
USER() 当前用户
VERSION() 版本信息

聚合函数

函数名称 描述
AVG() 平均值
COUNT() 计数
MAX() 最大值
MIN() 最小值
SUM() 求和

加密函数

函数名称 描述
MD5() 信息摘要算法
PASSWORD() 密码算法

自定义函数

自定义函数: 用户自定义函数(use-defined function, UDF)是一种对MySQL扩展的途径,其用法与内置函数相同。

在MySQL中函数参数的个数理论上不能超过1024个。

创建自定义函数

CREATE FUNCTION function_name
RETURNS
{STRING | INTEGER | REAL | DECIMAL}
routine_body
关于函数体:
  • 函数体由合法的SQL语句构成;
  • 函数体可以是简单的SELECT或INSERT语句;
  • 函数体如果为复合函数则使用BEGIN...END语句;
  • 复合结构可以包含声明、循环、控制结构;

eg: 封装一个格式化当前时间的函数

mysql> CREATE FUNCTION f1() RETURNS VARCHAR(30)
    -> RETURN DATE_FORMAT(NOW(),'%Y年%m月%d日  %H点:%i分:%s秒');

调用该函数

mysql> SELECT f1();

删除该函数:

mysql> DROP FUNCTION f1;

("DELIMITER //" 将mysql的语句结束符更为“//”。可以自定义其他符号)。

MySQL存储过程

存储过程是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理。

存储过程的优点

  • 增强SQL语句的功能和灵活性
  • 实现较快的执行速度
  • 减少网络流量

创建存储过程

CREATE
[DEFINER = {user | CURRENT_USER}]
PROCEDURE sp_name([proc_parameter[,...]])
[characteristic...] routine_body

proc_parameter:

  • [IN | OUT | INOUT] param_name type
  • IN ,表示该参数的值必须在调用存储过程时指定
  • OUT, 表示该参数的值可以被存储过程改变,并且可以返回
  • INOUT, 表示该参数在调用时指定,并且可以被改变和返回

特性(characteristic)

  • COMMENT: 注释
  • CONTAINS SQL: 包含SQL语句,但不包含读或写数据的语句
  • NO SQL: 不包含SQL语句
  • READS SQL DATA: 包含读数据库的语句
  • MODIFIES SQL DATA: 包含写数据库的语句
  • SQL SECURITY {DEFINER | INVOKER} 指明谁有权限来执行

过程体

  • 过程体由合法的SQL语句构成;
  • 过程体可以是任意SQL语句(CRUD);
  • 过程体如果为复合结构则使用 BEGIN...END语句;
  • 复合结构可以包含声明、循环、控制结构;

调用存储过程

CALL sp_name([parameter[,...]])
call sp_name[()]

修改存储过程

ALTER PROCEDURE sp_name [characteristic ...]
COMMENT 'string'
|{CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA}
|SQL SECURITY {DEFINER | INVOKER}

(不能修改过程体,如果需要修改过程体,只能先删除,然后重新创建)

删除存储过程

DROP PROCEDURE [IF EXISTS] sp_name

(带有“@”符号的变量为用户变量。)

存储过程与自定义函数的区别

  • 存储过程实现的功能更复杂一些;而函数的针对性更强
  • 存储过程可以返回多个值;而函数只能有一个返回值
  • 存储过程一般独立的来执行;而函数可以作为其他SQL语句的组成部分来出现。

注意事项:

  • 创建存储过程或者自定义函数时往往需要通过delimiter语句修改定界符。
  • 如果函数体或过程体有多个语句,需要包含在BEGIN...END语句块中。
  • 存储过程通过call来调用。

存储引擎

MySQL可以将数据以不同的技术存储在文件(内存)中,这种技术就称为存储引擎。

每一种存储引擎使用不同的存储机制、索引技巧、锁定水平,最终提供广泛且不同的功能。

MySQL支持的存储引擎

  • MyISAM
  • InnoDB
  • Memory
  • CSV
  • Archive

相关知识点

并发控制

当多个连接对记录进行修改时保证数据的一致性和完整性。

通过“锁”来实现,

  • 共享锁(读锁):在同一时间段内,多个用户可以读取同一个资源,读取过程中数据不会发生任何变化。
  • 排他锁(写锁):在任何时候只能有一个用户写入资源,当进行写锁时会阻塞其他的读锁或者写锁操作。

锁颗粒

  • 表锁,是一种开销最小的锁策略。
  • 行锁,是一种开销最大的锁策略。
事务

事务用于保证数据库的完整性。

事务的特性

  • 原子性(Atomicity)
  • 一致性(Consistency)
  • 隔离性(Isolation)
  • 持久性(Durability)
外键

是保证数据一致性的策略。

索引

是对数据表中一列或多列的值进行排序的一种结构。

各种存储引擎的特点

特点 MyISAM InnoDB Memory Archive
存储限制 256TB 64TB
事务安全 - 支持 - -
支持索引 支持 支持 支持
锁颗粒 表锁 行锁 表锁 行锁
数据压缩 支持 - - 支持
支持外键 - 支持 - -

修改存储引擎的方法

通过修改MySQL配置文件实现

-default-storage-engine = engine

通过创建数据表命令实现

CREATE TABLE table_name(
...
...

) ENGINE = engine;

通过修改数据表命令实现

ALTER TABLE table_name ENGINE [=] engine_name;

MySQL数据库图形界面管理工具

  • PHPMyAdmin
  • Navicat
  • MySQL Workbench

注: 本文为慕课网《与MySQL的零距离接触》课程笔记。感兴趣的同学可以观看老师的教学视频。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容