用过的知识点总是容易遗忘,这篇文章用于记录mysql学习过程中遇到的知识点。积少成多,厚积薄发。
知识点:
多表链接子查询
外键约束:
Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构。
解决方法是在Mysql中取消外键约束: SET FOREIGN_KEY_
CHECKS=0;
然后将原来表的数据导出到sql语句,重新创建此表后,再把数据使用sql导入,
然后再设置外键约束: SET FOREIGN_KEY_CHECKS=1;
删除表:
DLELTE:删除表中一条或多条记录,只删除记录保留表的结构(删除的是记录);
TRUNCATE:删除表中所有的记录,也是只删除记录保留表的结构(删除的是记录);
DROP:删除的是整个表,包括表中的记录和表的结构(删除的是表)。
存储引擎:
使用外键,事务等功能需要在新建数据库时候加:InnoDB存储引擎
innodb存储引擎提供了表锁、行锁和意向锁用来实现事物在不同粒度上进行上锁,
从而提高数据库的并发访问,并且保证数据的完整性和一致性。
create table xxx()engine=innodb;
主键:
create table xxx(
`id` INT(36) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '数据id'
)AUTO_INCREMENT=32
COMMENT:注释
AUTO_INCREMEN:自增长
UNSIGNED: 是int 无符号,就是都是正数
NOT NULL:表示该字段不允许空值
索引思想:
索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。
创建索引时,你需要确保该索引是应用在SQL 查询语句的条件(一般作为 WHERE 子句的条件)。
实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。
上面都在说使用索引的好处,但过多的使用索引将会造成滥用。
因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。
建立索引会占用磁盘空间的索引文件。
分页SQL:
ORDER BY: 语句用于根据指定的列对结果集进行排序。ORDER BY: 语句默认按照升序对记录进行排序。
使用LIMIT和OFFSET进行分页
SELECT
*(需要查询的数据)
FROM
table1(查询的表)
ORDER BY column_list(排序方式)
LIMIT row_count(需要查询的行数) OFFSET offset(从多少行开始查,跳过的行数);
上边sql可简化为:
SELECT
*(需要查询的数据)
FROM
table1(查询的表)
ORDER BY column_list(排序方式)
LIMIT offset(从多少行开始查,跳过的行数。如果写2表示从第3行开始查询),row_count(需要查询的行数);
查看建表sql语句:
SHOW CREATE TABLE `table_name`
数据库新增加一列:
如果想在一个已经建好的表中添加一列,可以用诸如:
alter table TABLE_NAME add column NEW_COLUMN_NAME varchar(20) not null;
这条语句会向已有的表中加入新的一列,这一列在表的最后一列位置。如果我们希望添加在指定的一列,可以用:
alter table TABLE_NAME add column NEW_COLUMN_NAME varchar(20) not null after COLUMN_NAME;
注意,上面这个命令的意思是说添加新列到某一列后面。如果想添加到第一列的话,可以用:
alter table TABLE_NAME add column NEW_COLUMN_NAME varchar(20) not null first;
查询去重distinct:
select distinct 列名 from 表名;
IN 操作符:
IN 操作符允许我们在 WHERE 子句中规定多个值。
select * from table1 where id in (select distinct 外键 from table2)