- .如何在创建索引
三种方法
1.在一张表中创建索引,这个过程不会创建设立主键;
create<索引名> on 表名
2.在创建表的同时完成索引的创建
这个语句就是设置一张表的主键,同时完成索引的创建
constraint primary key 索引名
3.在一张表中设置主键,同时把主键设置成为索引
- 主键、外键、唯一键的区别
主键具有唯一性,一张表中只能有一个主键,而且主键不能为空;
外键是用来加强两张表的联系,外键主要是为了让主键引用,用来进行表连接;
唯一键,可以为空,但是不能重复,一张表中可以设置多个唯一键;
- SQL语句包含几个部分
ddl(database definition language):操作数据库和操作数据表的;create
dcl(database controller language):操作数据库的控制权限;grank
dml(database make language):用来操作数据的数据内容;insert update
dql(database query language):用来查询表中的数据;select
- 什么样的对象可以使用create
create database
create view
create table
create index
- null和“ ”的区别
mysql中null代表未知数。不能把任何数据和null进行比较并且想要得到一个答案。
只能使用is null、is not null来对null进行判断。
在使用count(*)中会忽略掉null值;
" " 代表空字符串。
可以使用"="来对空字符串进行判断。
在使用count(*)中不会忽略" "。
- 在什么情况下设置了索引但是不能使用
1.在使用"%"这个占位符进行模糊查询的情况下索引不能使用。
2.or语句前后没有全部都使用索引进行查找。
3.在需要进行类型转化的时候。
4.在where语句的后面进行了运算。
5.在where语句的后面有函数。
6.在mysql认为全表扫描的时候更快(数据少的时候)。
- char和varchar的区别
varchar是可变长度的字符串,当插入的长度小于定义的长度,插入多长久存放多长;
在varchar中会有一个字符来记录字符串的长度,如果在字符串中有空格,varchar不会把空格进行去除;
char是不可变长度的字符串,定义多长久存放多长的字符串;
如果使用char存放字符串中存在空格,char会把字符串的空格进行删除;
- mysql是如何控制用户的权限
限制用户可以访问那些数据库,那些表;
限制用户可以对那些表进行curd;
限制用户是否可以把自己的权限赋予其他人;
- 如何查看表中字段的类型和名称
desc 表名
描述
- union和unionALL的区别
用来合并多条select语句的结果集
合并条件
1.临时表中的列的数量相同
2.列有相同的数据类型
3.有相同的顺序
- sql有几种连接方式
内连接(内连接的连接结果只包含连接条件的行)
外连接(外连接的连接结果不仅仅包含符合连接条件的行,还包含不符合连接条件的行,其中包含左,右,全连接)
- mysql日志一般分为4种
错误日志(记录每次启动,运行,停止mysql的信息)
二进制日志(记录每次更改数据库的语句)
查询日志(记录每次与数据库连接的语句)
更新日志(在mysql5.1的时候已经被二进制日志替换了)
- sql注入的危害
更改数据库的数据
可能会随意添加账户
- 提供insert的性能
1.可以把多条insert语句合并成为一条语句执行
例:insert into 表名 value (字段名1 ,字段名2,字段名3)(数据1,数据2,数据3)
2.可以把自动提交事务更改为手动提交事务
数据库默认是autoCommit,每次更改一次数据,提交一次事务。我们可以更改为手动提交,一般是insert1000次提交一次;
- 数据库的优化思路
1.sql优化;
2.索引优化;
3.结果优化
范式优化
反范式优化
4.硬件优化
- sql优化
1.对查询优化,避免全表扫描,首先考虑在where和order by语句后面涉及的语句后面添加索引;
2.避免在where子句中使用进行逻辑判断,不然mysql会放弃索引,进行全表扫描;
3.避免在where子句对null进行判断,不然mysql会放弃索引,进行全表扫描(可以把null设置为0值)
4.模糊查询也会进行全表扫描(like “%”);
5.in和not in也会进行全表扫描,对于连续的值可以把in修改为between;
6.不要再where子句中进行函数,算数运算;
7.索引不是越多越好,索引会提高select的速度,但是也会降低insert,delete的速度;
8.不是所以的索引都是有效的,当索引中存在大量的重复数据,mysql可能会放弃索引;