Mysql 常用命令
操作数据库
1.create database 数据库名//创建数据库,有的话会报错
2.create database if not exists 数据库名 // 如果没有这个数据库就创建,有的话就不创建
3.create database 数据库名 default character set utf-8 // 创建数据库,并且设置默认编码格式为utf-8
4.show databases //查询所有数据库的信息
5.show create database 数据库名 // 查询某个数据库的创建语句
6.drop database 数据库名 // 删除数据库
7.drop database if exists // 判断数据库存在,删除数据库
8.alter database 数据库名 character set gbk // 修改数据库的编码格式
9.select database(); // 查询当前正在使用的数据库名称
10. use 数据库名 // 使用数据库
操作表
- create table student(id int,name varchar(20), password varchar(20)); // 创建表
- create table 表名 like 被复制的表名 // 复制表
- show tables;// 查询某个数据库中的所有的表名称
- desc 表名 // 查询表结构
- alter table 表名 rename to 新的表名 // 修改表名
- alter table 表名 character set 字符集;// 修改表的字符集
- alter table 表名 add 列名 数据类型 // 添加一列
- alter table 表名 change 列名 新列名 新数据类型
- alter table 表名 modify 列名 新数据类型
- alter table 表名 drop 列名 // 删除列
- drop table if exists 表名// 删除表如果存在
- drop table 表名 // 删除表
增删改表中数据
- insert into 表名 (列名1, 列名2. 列名…) values (值1,值2,…); // 添加数据
- delete from 表名 [where 条件] // 删除数据(如果没有条件,那么会删除表中所有记录),如果要删除所有记录,不推荐使用delete from 表名—> 有多少条记录就会执行多少次删除操作,推荐使用truncate table 表名 ,效率更高,先删除表,然后再创建一张一样的表
- update 表名 set 列名1 = 值1 ,列名2 = 值2…[where 条件];// 修改数据…注意:如果不加任何的条件,那么表中的所有记录全部修改
查询表中的记录
- select * from 表名 // 查询表中所有数据
- select from where group by having order by limit
- distinct 可以去除重复eg:select distinct age from student
- 查询为null的时候,要用到is null ,不能使用== 或者!= ,会报错。
- like:模糊查询 _ : 代表单个任意字符 % : 代表多个任意字符
- 各种运算符: <, >, >=, <= , = , <>, between and , in, is null, and && , or || , not !
- 模糊查询:select * from student where name like ‘%w%’// 查询所有姓名包含w的人的所有信息,select * from student where name like ‘_w%’//查询第二个字符为w的人的所有信息
DQL:查询语句
- 排序查询:order by 子句 ASC :升序的,默认 DESC:降序,后面可以跟上多个排序条件,这时,只有当前边的条件之一样时,才会判断第二条件
- 聚合函数:count: 计算个数; max: 计算最大值, min: 计算最小值, sum: 计算和, avg:计算平均值,聚合函数的计算排除null值(解决方案: 1.选择不包含null的列进行计算2.ifnull函数)eg:select count(1),max(age),min(age),avg(age) from student
- 分组查询: 语法: group by : 分组字段
- where 和having的区别?
- where 在分组之前进行限定,如果不满足条件,那么不进行分组,having在分组之后进行限定,如果不满足结果,那么就不会被查询出来。
- where 后不可以跟聚合函数, having 可以进行聚合函数的判断 - 分页查询:limit:(它是mysql中一种方言)select * from student limit 0, 3 // 它是左开右闭的区间
约束
- 概念:对表中的数据进行限定,保证数据的正确性,有效性和完整性
- 主键约束: primary key
- 非空约束: not null
- 唯一约束: unique
- 外键约束: foreign key
数据库的设计
-
多表之间的关系
- 一对一
- 一对多
- 多对多
-
数据库设计的范式
- 概念:设计数据库时,需要遵循的一些规范。要遵循后边的范式要求,必须先遵循前边的所有范式要求
- 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小
- 目前的关系数据库中有六种范式: 第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)
- 第一范式:每一列都是不可分割的原子数据项
- 第二范式:在1NF的基础上,非码属性必须完全依赖于码(在1NF基础上消除非主属性对主码的部分函数依赖)
- 函数依赖: A—>B,如果通过A属性(属性组)的值,可以确定唯一B属性的值,那么称B依赖于A
- 完全函数依赖:A—>B,如果A是一个属性组,则B属性值的确定需要依赖于A属性组中所有的属性值
- 部分函数依赖:A—>B,如果A是一个属性组,则B属性值得确定需要依赖A属性组中某一些值即可
- 传递函数依赖:A—>B. B---->,如果通过A属性的值,可以唯一确定B属性的值,在通过B属性的值可以唯一确定C属性的值,那么称C传递函数依赖于A
- 码:如果在一张表中,一个属性或者属性组,被其他所有属性所完全依赖, 那么称这个属性(属性组)为该表的码
- 例如:该表中码为:(学号,课程名称)
- 主属性:码属性组中的所有属性
- 非主属性:除了码属性组的属性
- 第三范式(3NF):在2NF的基础上,任何非主属性不依赖于其他非主属性(在2NF的基础上消除传递依赖)