数据库基础语法 SQL常用语句总结 - 知乎 (zhihu.com)
链接
table1 JION table2 ON 链接条件--不加就是自然链接
数据表的类型
逆向查看语句
SHOW
逆向查看表的结构
DESC
数据库引擎
--关于数据库引擎
/* INNODB
MYISM以前使用的
*/
MYISAM | INNODB | |
---|---|---|
事物支持 | 不 | |
数据行锁定 | 不 | |
外键约束 | 不 | |
全文索引 | 不 | |
表空间大小 | 小 | 大2倍 |
MYISAM:
节约空间,快
INNODB
安全,事物,外键
在物理空间的位置
都是在一个data目录下
本质都是文件的存储
-
INNODB在数据库中只有一个*.frm文件,以及上下级的ibDATA1文件
-
MYISAM对应文件
-
*.frm 定义文件
-
*MYD 数据文件
-
*.MYI 索引
-
设置数据库的数据集编码
CHARSET=utf-8
否则默认编码不支持中文
在my.ini中可以配置默认编码
最好在建表时就设置
分页和排序
ORDER BY ASC升序 DESC降序
分页(和瀑布流(全部显示)区分)
-
降低数据库压力
-
体验更好
LIMIT 起始点,页面的大小
LIMIT (N - 1)*PAGE_SIZE,PAGE_SIZE 第N页PAGE_SIZE页面大小
总页数
(总数据 + 页面大小 - 1)/页面大小
(查询表的记录)
count('字段')会忽视null值主键时最快
count(*)不会忽视null值
count(1)不会忽视null值,字段非主键时更快
MD5加密
增加算法复杂度和不可逆性,具体的值时一样的
事务
要么都成功,要么都失败
将一组SQL放在一个批次中去执行
事务原则(ACID)
-
原子性
-
要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样
-
-
一致性
-
最终一致性(最终的值和最初的值相同)事务的数据完整性要保持一致
-
-
隔离性(锁)
-
数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
-
-
持久性
-
事务没有提交就恢复到原装(回滚)
-
事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
-
mysql是默认开启事务自动提交
SET autocommit = 0 --关闭 1是开启
手动处理事务
事务开启
START TRANSACTION --标记一个事物的开始,从这个之后的sql都在一个事物之中
--提交
COMMIT
--回滚
ROLLBACK
事务结束
SET autocommit = 1 --开启事务自动提交
SAVEPOINT + 保存点名 --设置一个事务保存点用于回滚
ROLLBACK TO + 保存点名 --回滚保存点
RELEASE SAVEPOINT + 保存点名 --删除该保存点
例子
CREATE DATABASE shop CHARACTER CHARSET SET utf8 COLLATE utf8_general_ci标签:事务,SET,复习,--,money,数据库,JDBC,提交,随笔 From: https://www.cnblogs.com/qylqf/p/17573254.html
USE shop
CREATE TABLE account(
`id` INT(3) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(30) NOT NULL,
`money` DECIMAL(9,2) NOT NULL,
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO account(`name`,`money`)
VALUES ('A',2000.00),('B',10000.00);
SET autocommit = 0;--关闭自动提交
START TRANSACTION --开启一个事务
UPDATE account SET money=money-500 WHERE `name` = 'A' --A减五百
UPDATE account SET money=money+500 WHERE `name` = 'B' --A加五百
COMMIT--提交
FLUSH PRIVILEGES
ROLLBACK --回滚
SET autocommit = 1 --开启自动提交