数据库操作语言
DDL | 用于定义数据库结构和对象 | create、alter、drop、truncate、rename、comment |
---|---|---|
DML | 用于操作数据库中的数据 | select、insert、update、delete |
DQL | 用于从数据库中检索数据 | select |
DCL | 用于控制数据库的访问权限和安全性 | grant、revoke、deny |
truncate
是数据库中用于删除表中所有数据的一种操作,但是原理与delete不同。1.速度更快:
truncate
直接操作表结构,是通过直接释放表空间来删除数据,因此属于DDL。2.不记录日志:
truncate
操作不会记入日志,不会产生大量日志记录,减少系统资源开销,但是删除之后的数据无法回滚。3.不触发触发器:
truncate
不会触发与表相关的触发器,不会执行与触发器相关的任何逻辑。4.不保留标识符:执行
truncate
操作后,表的自增标识符(如AUTO_INCREMENT)会被重置为初始值(通常为1),而不是保留上次使用的值。
ACID特性
原子性 | 原子性指数据库操作要么全部执行成功,要么全部失败回滚,不存在部分执行的情况。换句话说,如果一个事务包含多个操作,那么所有操作要么全部执行成功,要么全部失败,没有中间状态。MySQL 使用事务来实现原子性,确保事务中的所有操作要么全部提交,要么全部回滚。 |
---|---|
一致性 | 一致性指数据库在事务执行前后都保持一致状态。这意味着事务执行前数据库必须处于一致的状态,而事务执行后数据库也必须处于一致的状态。MySQL 在执行事务时会保证数据库的一致性,即使在发生故障时也会通过回滚操作来维护数据库的一致性。 |
隔离性 | 隔离性指多个事务同时执行时,每个事务的操作应该相互隔离,互不影响。这意味着一个事务内部的操作对其他事务是不可见的,直到该事务提交。MySQL 使用事务隔离级别来控制事务之间的隔离程度,包括读未提交、读提交、可重复读和串行化等不同级别。 |
持久性 | 持久性指一旦事务提交,其所做的修改将永久保存在数据库中,即使系统发生故障也不会丢失。MySQL 使用持久性来确保已提交的事务不会因系统故障而丢失或部分丢失。 |
锁
读锁(共享锁) | -读锁允许多个事务同时访问同一资源(如表、行或页面),并且不会阻塞其他事务的读取操作。 -读锁之间不会相互阻塞,因此多个狮虎可以同时持有读锁。 -读锁通常用于读取操作,因为读取操作不会修改数据,因此多个数据可以安全的同时读取相同数据。 -读锁不会阻止其他事务对统一资源的读取操作,但会阻止其他事务获取写锁。 |
---|---|
写锁(排他锁) | -写锁会阻止其他事务对资源的读取和写如操作,只有持有写锁的事务才能对资源进行写入操作。 -写锁通常用于更新、插入或删除操作,因为这些操作会修改数据,为了保证数据的一致性和完整性,需要排他访问资源。 与读锁不同,写锁会阻止其他事务对资源的的读取和写入操作,直到持有写锁的事务释放锁为止。 |
日期
DATE | -存储日期部分,但不包含时间信息 -格式通常为YYYY-MM-DD -不考虑时区 -适用于仅需要日期信息而不需要时间的情况。 |
---|---|
TIME | -存储时间部分,但不包含日期信息 -通常格式为 HH:MM:SS -不考虑日期或时区 -适用于仅需要时间而不需要日期的情况。 |
DATETIME | -存储日期和时间信息,精确到秒 -格式通常为 YYYY-MM-DD HH:MM:SS -不考虑时区 -适用于需要同时存储日期和时间的情况。 |
TIMESTAMP | -存储日期和时间,通常精确到秒 -表示自纪元(通常为1970年1月1日)以来的秒数。 -通常包含时区信息,但在某些数据库中也可以选择不包含。 -适用于需要记录时间戳的情况,如数据修改时间、记录创建时间。在某些情况下,它也可以用于实现数据库事务的并发控制。 |
事务
开始事务 | START TRANSACTION; |
---|---|
提交事务 | COMMIT; |
回滚事务 | ROLLBACK; |
-- 开始事务
START TRANSACTION;
-- 扣除转出账户的金额
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
-- 增加转入账户的金额
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
-- 如果存在异常情况,可以回滚事务
-- ROLLBACK;
-- 如果一切正常,提交事务
COMMIT;
在 MySQL 中,默认情况下,事务中的锁定是在提交之前加上的。
具体来说,在事务执行期间,当执行涉及到数据的读取、更新或删除操作时,MySQL 会根据所选的隔离级别在数据行级别上自动加锁。这些锁会在事务提交之前生效,并在提交后释放。
因此,在事务提交之前,所有被该事务修改的数据行都会被锁定,以确保在提交时其他事务无法同时修改这些数据。一旦事务提交,所持有的锁将被释放,其他事务可以继续访问这些数据。
这种默认行为确保了事务的一致性和隔离性,避免了并发事务之间的数据冲突。
数据库文件的扩展名
主数据文件 | .mdf |
---|---|
辅助数据文件 | .ndf |
事务日志文件 | .ldf |
在SQL Server中,一个数据库中至少有一个主数据文件和一个事务日志文件。
索引
索引可以有效的提升查询数据的效率,但索引数量不是多多益善,索引越多,维护索引的代价自然也就水涨 船高。对于插入、更新、删除等DML操作比较频繁的表来说,索引过多,会引入相当高的维护代价,降低 DML操作的效率,增加相应操作的时间消耗。另外索引过多的话,MySQL也会犯选择困难病,虽然最终仍然 会找到一个可用的索引,但无疑提高了选择的代价。
linux中的mysql基础命令
启动MySQL服务器 | service mysql start |
---|---|
停止MYSQL服务器 | service mysql stop |
重启MYSQL服务器 | service mysql restart |
查看MYSQL服务器运行状态 | service mysql status |