并非所有引擎都支持明确的事务处理管理。MyISAM和InnoDB是两种最常使用的引擎。前者不支持明确的事务处理管理,而后者支持。
事务处理:(transaction processing)可以用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行。
事务处理是一种机制,用来管理必须成批执行的MySQL操作,以保证数据库不包含不完整的操作结果。
利用事务处理,可以保证一组操作不会中途停止,它们或者作为整体执行,或者完全不执行(除非明确指示)。如果没有错误发生,整组语句提交给(写到)数据库表。如果发生错误,则进行回退(撤销)以恢复数据库到某个已知且安全的状态。
事务处理的几个术语:
MySQL使用下面的语句来标识事务的开始:
START TRANSACTION
SELECT * FROM ordertotals;
START TRANSACTION;
DELETE FROM ordertotals;
SELECT * FROM ordertotals;
ROLLBACK;
SELECT * FROM ordertotals;
ROLLBACK只能在一个事务处理内使用(在执行一条START TRANSACTION命令之后)
START TRANSACTION
DELETE FROM orderitems WHERE order_num = 20010;
DELETE FROM orders WHERE order_num = 20010;
COMMIT;
SAVEPOINT deletel1;
ROLLBACK TO delete1;
每个保留点都取标识它的唯一名字,以便在回退时,MySQL知道要
回退到何处。
SET autocommit = 0;
重要术语:
在MySQL的正常数据库活动(SELECT、INSERT等)中,不需要操心太多的东西。使用何种字符集和校对的决定在服务器、数据库和表级进行。
MySQL支持众多的字符集。
SHOW CHARACTER SET;
SHOW COLLATION
SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collation%';
CREATE TABLE mytable
(
columnn1 INT,
columnn2 VARCHAR(10)
) DEFAULT CHARACTER SET hebrew
COLLATE hebrew_general_ci;
CREATE TABLE mytable
(
columnn1 INT,
columnn2 VARCHAR(10),
columnn3 VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_swedish_ci
) DEFAULT CHARACTER SET hebrew
COLLATE latin1_swedish_ci;
SELECT * FROM customers
ORDER BY lastname, firstname COLLATE latin1_swedish_ci;
需要给用户提供他们所需的访问权,且仅提供他们所需的访问权。这就是所谓的访问控制,管理访问控制需要创建和管理用户账号。
重要的是注意到,访问控制的目的不仅仅是防止用户的恶意企图。数据梦魇更为常见的是无意识错误的结果,如错打MySQL语句,在不合适的数据库中操作或其他一些用户错误。通过保证用户不能执行他们不应该执行的语句,访问控制有助于避免这些情况的发生。
获取用户账号列表
USE mysql;
SELECT user FROM user;
CREATE USER test IDENTIFIED BY 'test01'
重新命名一个用户账号
RENAME USER test TO bforta;
DROP USER bforta;
SHOW GRANTS FOR test;
2. 为设置权限,使用GRANT语句。GRANT需要以下信息:
GRANT SELECT ON crashcourse.* TO test;
REVOKE SELECT ON crashcourse.* FROM test;
出可以授予或撤销的每个权限。
权限 | 说明 |
---|---|
ALL | 除GRANT OPTION外的所有权限 |
ALTER | 使用ALTER TABLE |
ALTER ROUTINE | 使用ALTER PROCEDURE和DROP PROCEDURE |
CREATE | 使用CREATE TABLE |
CREATE ROUTINE | 使用CREATE PROCEDURE |
CREATE TEMPORARY TABLES | 使用CREATE TEMPORARY TABLE |
CREATE USER | 使用CREATE USER、DROP USER、RENAME USER和REVOKE ALL PRIVILEGES |
CREATE VIEW | 使用CREATE VIEW |
DELETE | 使用DELETE |
DROP | 使用DROP TABLE |
EXECUTE | 使用CALL和存储过程 |
FILE | 使用SELECT INTO OUTFILE和LOAD DATA INFILE |
GRANT OPTION | 使用GRANT和REVOKE |
INDEX | 使用CREATE INDEX和DROP INDEX |
INSERT | 使用INSERT |
LOCK TABLES | 使用LOCK TABLES |
PROCESS | 使用SHOW FULL PROCESSLIST |
RELOAD | 使用FLUSH |
REPLICATION CLIENT | 服务器位置的访问 |
REPLICATION SLAVE | 由复制从属使用 |
SELECT | 使用SELECT |
SHOW DATABASES | 使用SHOW DATABASES |
SHOW VIEW | 使用SHOW CREATE VIEW |
SHUTDOWN | 使用mysqladmin shutdown(用来关闭MySQL) |
SUPER | 使用CHANGE MASTER、KILL、LOGS、PURGE、MASTER和SET GLOBAL。还允许mysqladmin调试登录 |
UPDATE | 使用UPDATE |
USAGE | 无访问权限 |
更改用户口令,可使用SET PASSWORD语句
SET PASSWORD FROM test = PASSWORD('test02');
新口令必须传递到Password()函数进行加密
设置自己的口令:
SET PASSWORD = PASSWORD('test02');
像所有数据一样,MySQL的数据也必须经常备份。
备份解决方案:
MySQL提供了一系列的语句,可以(应该)用来保证数据库正确和正常运行。
ANALYZE TABLE orders;
CHECK TABLE orders, orderitems;
服务器启动问题通常在对MySQL配置或服务器本身进行更改时出现。MySQL在这个问题发生时报告错误,但由于多数MySQL服务器是作为系统进程或服务自动启动的,这些消息可能看不到。
在排除系统启动问题时,首先应该尽量用手动启动服务器。MySQL服务器自身通过在命令行上执行mysqld启动。
mysqld命令行选项:
-- help
显示帮助 —— 一个选项列表;-- safe-mode
装载减去某些最佳配置的服务器;--verbose
显示全文本消息(为获得更详细的帮助消息与--help
联合使用);--version
显示版本信息然后退出。--log-error
命令行选项更改。--log
命令行选项更改。--log-bin
命令行选项更改。--log-slow-queries
命令行选项更改。在使用日志时,可用FLUSH LOGS语句来刷新和重新开始所有日志文件。