mysql
连接数据库:
mysql -h 服务器主机地址 -u 用户名 -p 用户密码
建库表:
datetime YYYY-MM-DD HH:mm:ss 最常用的时间格式
varchar 可变字符串 0-65535(常用变量)
int 标准的整数 4个字节(常用)
double 浮点数 8个字节 (精度问题)
CREATE DATABASE school
CREATE TABLE IF NOT EXISTS `student` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
SHOW CREATE DATABASE school -- 查看创建数据库的语句
SHOW CREATE TABLE student -- 查看student数据表的定义语句
DESC student -- 显示表的结构
修改表ALTER 删除表DROP
添加外键
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`);
ADD CONSTRAINT 约束名 FOREIGN KEY(作为外键的列) 引用的哪个表的哪个字段
插入
Insert into 表名([字段一], [字段二])values('值1'),('值2')
修改
UPDATE 表名 set column_name,[] = value where 条件
内连接:如果表中至少有一个匹配,就返回行
Select * from TableA a Inner Join TableB b where a.name=b.name
左右链接:即使左表中没有匹配,也会从左表中返回所有的值 即使右表中没有匹配,也会从右表中返回所有的值
Select * from TableA a Left Join TableB b ON a.name=b.name
分页显示
LIMIT 0,5 limit 当前页 页面大小
分组:
根据什么来进行分组 Group By ...Having
常用函数:
SELECT CHAR_LENGTH('2323232') -- 返回字符串长度
SELECT CONCAT('我','233') -- 拼接字符串
SELECT INSERT('java',1,2,'cccc') -- 从某个位置开始替换某个长度
SELECT NOW() -- 获取当前日期
聚合函数:
COUNT() SUM() AVG() MAX() MIN()
MySql事务
ACID原则 原子性,一致性,隔离性,持久性 事务一旦提交就不可逆转,被持久化到数据库中
索引:http://blog.codinglabs.org/articles/theory-of-mysql-index.html
主键索引——唯一的标识,主键不可重复,只能有一个列作为主键
唯一索引——避免重复的列出现,唯一索引可以重复,多个列都可以标识唯一索引
常规索引——默认的,index,key关键字来设置
三大范式:
原子性:保证每一列不可再分
每张表只描述一件事情
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
4、mysql的like是否使用索引
5、mysql事务 脏读
慢sql
1、SQL编写问题
2、锁
3、业务实例相互干绕对 IO/CPU 资源争用
4、服务器硬件
5、MYSQL BUG
MVCC
处理读写冲突的手段,引擎实现中常用的处理读写冲突的手段,目的在于提高数据库高并发场景下的吞吐性能。
隔离级别
Read Uncommitted(读取未提交内容)
Read Committed(读取提交内容)
Repeatable Read(可重读)
Serializable(可串行化)
这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。
并发处理带来的问题:
更新丢失:
脏读:指一个事务读取了另外一个事务未提交的数据。
不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同。(这个不一定是错误,只是某些场合不对)
虚读(幻读):是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。
实现隔离机制的方法主要有两种:
加读写锁
一致性快照读,即 MVCC

浙公网安备 33010602011771号