mysql增删改查操作以及多表联查
sql语句分类按功能(定义、操纵、控制、查询)分类reactrouter6路由拦截
DDL 数据定义语⾔,定义表、库、视图
DML 对数据表记录增加、修改和删除操作
DCL 授权、事务控制、条件判断
常见的⾯试题:
1.如何删除表:
vb编程学习技巧 drop table table_name;
2.创建索引:
对于查询占主要的应⽤来说,索引显的尤为重要。很多时候性能问题就是因为我们没有添加索引或者更为有效的索引。如何不添加索引的话,那么查询所有哪怕只是查询⼀条特定的数据都会进⾏全表扫描。如果⼀张表的数据量⽐较⼤⽽且符合条件的结果⼜很少,那么不加索引会引起致命的性能下降。但是也
不是什么情况都⾮得建⽴索引不可,⽐如性别就只有两个值,建索引不仅没什么优势,还会影响到跟新速度,这被称为过度索引。
3.复合索引:
⽐如⼀条sql语句: select * from user where area='beijing' and age='male';开源网站模板下载
如果我们在area和age上分别创建单个索引的话,由于mysql查询每次只能使⽤⼀个索引,所以虽然这样做已经⽐全表扫描效率提⾼了不少,但索引的功能不仅仅如此,如我们在area和age上建⽴复合索引的话,查询速度就会⼤⼤提⾼。如果我们创建了(area, age, salary)的复合索引,那么其实相当于创建了(area,age,salary)、 (area,age)、(area)三个索引,这被称为最佳左前缀特性。因此我们在创建复合索引时应该将最常⽤作限制条件的列放在最左边,依次递减。
4.索引不会包含有NULL值的列:
只要列中包含有null值都将不会被包含在索引中,复合索引只要有⼀列含有null值,那么这⼀列对此复合索引是⽆效的。所以我们在设计数据库是尽量不要让字段的默认值为null。
5.使⽤短索引:
对串列进⾏索引,如果有可能应该指定⼀个前缀长度,例如有⼀个长度char(255)的列,如果在前10或20个字符内,多数值是唯⼀的,那么就不要对这个列进⾏索引。短索引不仅可以提⾼查询效率⽽且可以提⾼I/O效率和减少内存占⽤。
6.排序的索引问题:
mysql查询只使⽤⼀个索引,如果where语句中已经使⽤了索引,那么order by 后的字段将不会加索引。因此数据库默认排序可以符合要求的情况下不要使⽤排序操作,尽量不要使⽤含多个列的排序如果需要请给这些列加上复合索引。
7.LIKE语句操作:
⼀般情况下不建议使⽤like操作,如果必须,如何使⽤也是⼀个技术,如(like %aaa%)不会使⽤索引,⽽(like aaa%)会使⽤索引。
8.Mysql数据库设置数据类型时应注意什么:
① varchar 和 char 类型,varchar是变长的,需要额外1-2个字节存储,能节约空间,可能对性能有帮助。但由于是变长的,可能会发⽣碎⽚,如更新数据。
slidetoggle不起作用 ②使⽤ENUM(Mysql枚举类)代替字符串类型,数据实际存储为整型。
③尽量不要使⽤字符串类型来作为标识符,因为它们占了很多内存⽽且通常⽐整数型要慢,
9.Mysql的⼏种备份⽅式:
①、逻辑备份:使⽤mysql⾃带的mysqldump⼯具进⾏备份。备份成sql⽂件形式。
优点:最⼤好处是能够与正在运⾏的mysql⾃动协同⼯作,在运⾏期间可以确保备份是当时的点,它会⾃动将对应操作的表锁定,不允许其他⽤户修改(只能访问)。可能会阻⽌修改操作。sql⽂件通⽤⽅便移植。
缺点:备份的速度⽐较慢。如果是数据量很多的时候。就很耗时间。如果数据库服务器处在提供给⽤户服务状态,在这段长时间操作过程中,意味着要锁定表(⼀般是读锁定,只能读不能写⼊数据)。那么服务就会影响的。
②、物理备份:直接拷贝mysql的数据⽬录。
直接拷贝只适⽤于myisam类型的表。这种类型的表是与机器独⽴的。但实际情况是,你设计数据库的时候不可能全部使⽤myisam类型表。你也不可能因为myisam类型表与机器独⽴,⽅便移植,于是就选择这种表,这并不是选择它的理由。
缺点:你不能去操作正在运⾏的mysql服务器(在拷贝的过程中有⽤户通过应⽤程序访问更新数据,这样就⽆法备份当时的数据)可能⽆法移植到其他机器上去。
③、双机热备份。
my没有增量备份的机制。当数据量太⼤的时候备份是⼀个很⼤的问题。还好mysql数据库提供了⼀种主从备份的机制(也就是双机热备)
优点:适合数据量⼤的时候。现在明⽩了。⼤的互联⽹公司对于mysql数据备份,都是采⽤热机备份。搭建多台数据库服务器,进⾏主从复制
10.Mysql添加索引
普通索引添加INDEX
alter table table_name add index index_name ('column'); ----- alter table user add index age_search ('age');
主键索引添加 primary key
alter table table_name add primary key ('column');
唯⼀索引添加 unique
alter table table_name add unique ('column');
全⽂索引添加 fulltext
alter table table_name add fulltext ('column');
多列索引
alter table table_name add index ('column1','column2','column3');
11. 什么情况下添加索引:
表的主关键词
表的字段唯⼀约束
直接条件查询的字段
查询中与它表关联的字段
查询中排序的字段
查询中统计或分组统计的字段
12.什么情况下应不建或者少建索引:
表记录太少
经常插⼊、删除、修改的表
数据重复且分布均匀的表字段
经常和主字段⼀起查询⽽且主字段索引值⽐较多的表字段
13.千万级Mysql数据库建⽴索引的事项以及提⾼性能的⼿段:
对查询进⾏优化,避免全表扫描
应尽量避免在where⼦句中对字段进⾏null值判断
应尽量避免在where⼦句中使⽤ != 或 <> 操作符
手机网站安全证书过期怎么处理 in 和 not in 慎⽤
避免使⽤通配符
如果在where⼦句中使⽤参数,也会导致全表查询
mysql面试题sql14.Mysql调优:
15.各种函数的⽤法:
16.查询语句(单表,多表):
分组查询:
group by 单独使⽤,查询结果只显⽰⼀个分组的⼀条记录。: select * from table_tablename group by sex;
select sex,group_concat(name) from employee group by sex;
与集合函数⼀起使⽤:select sex,count(sex) from employee group by sex;
与HAVING⼀起使⽤:“having条件表达式”,可以限制输出结果。只有满⾜条件表达式的结果才显⽰。elect sex,count(sex) from employee group by sex having count(sex) >= 3;
按多组进⾏分组:select* from employee group by d_id,sex;
与with rollup⼀起使⽤,使⽤with rollup将会在所有记录的最后加上⼀条记录,这条记录是上⾯所有记录的总和
连接查询:
内连接查询:当两个表中具有相同意义的字段值相等时,就查询出该条记录。select num,name,employee.d_id,age,d_name from employee,department where employee.d_id = department.d_id因字段名相同,所以取d_id字段值时最好指定哪张表的字段。
外连接查询: select 属性名列表 from 表名1 left|right join 表名2 on 表名1.属性名1=表名2.属性名2;左连接查询:进⾏左连接查询时,可以查出表名1中所指的表中所有记录。⽽表名2所指表中,只能查询出匹配的记录。
实例:select num,name,employee.d_id,age,d_name from employee left join department on employee.d_id = department.d_id;
与左连接相反,可以查询出表名2中的的所有记录,⽽表名1中所指的表中,只查询出匹配的记录。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论