插入数据:
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);
insert into employee(id,workno,name,gender,age,idcard,entrydate)
values(1,'1','Itcast','男',-1,'123456789012345678','2000-01-01');
insert into employee values(3,'3','韦一笑','男',38,'123456789012345670','2005-01-
01'),(4,'4','赵敏','女',18,'123456789012345670','2005-01-01');
修改数据
UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , .... [ WHERE 条件 ] ;
修改
id
为
1
的数据
,
将
name
修改为小昭
, gender
修改为 女
update employee set name = '小昭' , gender = '女' where id = 1;
删除数据
DELETE FROM 表名 [ WHERE 条件 ] ;
delete from employee where gender = '女';
查询数据
SELECT 字段列表 FROM 表名 WHERE 条件列表 ;
查询身份证号最后一位是
X的员工信息
select * from emp where idcard like '%X';
select * from emp where idcard like '_________________X';
查询性别为男,且年龄在
20-40
岁
(
含
)
以内的前
5
个员工信息,对查询的结果按年龄升序排序,
年龄相同按入职时间升序排序。
select * from emp where gender = '男' and age between 20 and 40 order by age asc ,
entrydate asc limit 5 ;
执行顺序
外键
CREATE TABLE 表名(
字段名 数据类型,
...
[CONSTRAINT] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名)
);
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名) ;
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id);
多表查询
where 加上条件查询时可以避免大量重复的信息
删除
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references
dept(id) on update cascade on delete cascade ;
分类
内连接
隐式内连接
SELECT 字段列表 FROM 表1 , 表2 WHERE 条件 ... ;
显式内连接
SELECT 字段列表 FROM 表1 [ INNER ] JOIN 表2 ON 连接条件 ... ;
后续参考:mysql-约束-CSDN博客
存储引擎选择
在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合。
InnoDB:
是
Mysql
的默认存储引擎,支持事务、外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,那么InnoDB
存储引擎是比较合适的选择。
MyISAM
: 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择这个存储引擎是非常合适的。
MEMORY
:将所有数据保存在内存中,访问速度快,通常用于临时表及缓存。
MEMORY
的缺陷就是对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性。
InnoDB的三大特性:事务,外键,行级锁。
1).
连接层
最上层是一些客户端和链接服务,包含本地
sock
通信和大多数基于客户端
/
服务端工具实现的类似于 TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL
的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。
2).
服务层
第二层架构主要完成大多数的核心服务功能,如
SQL
接口,并完成缓存的查询,
SQL
的分析和优化,部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如过程、函数等。在该层,服务器会解 析查询并创建相应的内部解析树,并对其完成相应的优化如确定表的查询的顺序,是否利用索引等, 最后生成相应的执行操作。如果是select
语句,服务器还会查询内部的缓存,如果缓存空间足够大,这样在解决大量读操作的环境中能够很好的提升系统的性能。
3).
引擎层
存储引擎层,存储引擎真正的负责了
MySQL
中数据的存储和提取,服务器通过
API
和存储引擎进行通 信。不同的存储引擎具有不同的功能,这样我们可以根据自己的需要,来选取合适的存储引擎。数据库中的索引是在存储引擎层实现的。
4).
存储层
数据存储层, 主要是将数据
(
如
: redolog
、
undolog
、数据、索引、二进制日志、错误日志、查询日志、慢查询日志等)
存储在文件系统之上,并完成与存储引擎的交互。
和其他数据库相比,
MySQL
有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎上,插件式的存储引擎架构,将查询处理和其他的系统任务以及数据的存储提取分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎。
查询当前数据库支持的存储引擎
show engines ;
SQL的性能分析:
SQL优化主要优化的是查询语句
查询指令:
SHOW GLOBAL STATUS LIKE 'Com_______';
慢查询日志
慢查询日志主要是找出执行时间长的语句,并且对这类语句进行优化。
profile
由于慢查询日志只能记录超过预设时间的指令,没有办法记录临界时间的指令,可能存在一些简单的功能但是耗时还是很长的指令。
查看该数据库是否支持profile。
开启profile
查看profile是否开启
进行查询指令,然后show profiles;可以得到最终结果
可详细查看指令和cpu的耗费情况
explain
多表查询
注意执行顺序,id相同,执行顺序从上到下;id不同,值越大,越先执行。