-
启动和关闭MySQL:cmd界面下net start/stop MySQL
-
show databases;查看数据库
-
create database [名称];创建数据库
-
show tables查看数据库有哪些表
-
desc [表名];查看表的结构
-
select version();查看当前版本号;
-
\c 表示中止
DQL(查询语句):
-
select [要查询的元素1,元素2] from [查询的表];
-
select * from[];查询所有字段
-
select [元素] as(可以省略) [别名] from [路径];起别名,只是将显示的列表的名字改了,如果别名有空格,需要用引号
-
字段可以采用数学表达式,别名是中文用单引号括起来
-
条件查询:
-
select [字段1,字段2…] from [名称] where [条件]
-
-
<>表示不等号(!=也是)
-
between [] and []
-
[]>= and []<=[] 这两种方式都是查询之间的数字
-
在数据库中,null不能用=来查询,只能用is或者is not
-
and 表示并发条件 or表示…
-
in 和not in表示…
-
like 模糊匹配,例如:like ‘%[条件]%’
-
like [%元素]以元素结尾等等
-
_代表一个字符
-
select [元素1,元素2…] from [] order by [字段] (asc代表升序,desc代表降序)
-
select lower([字段]) from []
-
select substr([字段],起始位置(从1开始),截取长度) from [];
-
length()
-
trim();去除空格
-
select [字面值]from []会显示许多行相同的字面值
-
round([值],[保留位数])
-
ifnull空处理函数
-
null只要参与运算,最终结果肯定是null
-
case ..when..then..when..then..else..end
-
max(),min(),max(),avg(),count()
-
count(*)统计总行数
-
分组函数不能运用在where
-
select ...//第四步 from...//第一步执行 where...//第二步 group by...//第三步 order by...//第五步
分组函数
-
group by…having…二次过滤(优先选择where)
-
select distinct [] from[];//distanct可以去重
-
select ... from [表1,表2] where [条件]//92语法
-
内连接 select ... from [表1] inner join [表2] on [表连接条件] where [进一步筛选条件]//99语法
-
自连接的技巧是一张表看成两张表,起个别名就行
-
外连接 select ... from [表1] right outer join//表示将join右边的关键字看成主表,主要是为了将这张表的数据都显示出来 [表2] on [表连接条件] where [进一步筛选条件]//99语法
-
多表连接 select ... from [表1] join .. on.. right outer join//表示将join右边的关键字看成主表,主要是为了将这张表的数据都显示出来 [表2] on [表连接条件] where [进一步筛选条件]//99语法
-
子查询就是嵌套查询-
-
union合并查询结果
select []from union select...
-
order by ... limit//表示排名 [起始位置,截取个数]
DDL(建表)
-
-
create table 表名( 字段1 数据类型 字段2 数据类型 字段3 数据类型 );
-
数据类型:
varchar 会自动分配空间
char 不管实际数据长度,分配固定空间
int
bigint
float
double
date
datetime 长日期
clob 字符大对象,用于存储文章说明等等
blob 二进制大对象,专门存储声音,图像,视频等
-
drop table if exists [];
DML(修改数据)
-
insert into [表名(字段1,字段2...)] values(值1,值2..)
-
name varchar(16) default ‘张三’//代表可以在创建表的时候设置默认值
-
date_format:将date类型转换成具有一定格式的varchar字符串类型
-
str_to_date将字符串varchar转换成date类型
-
短日期格式:%Y%m%d
-
长日期格式:%Y%m%d %h%i%s
-
now()函数获取当前长时间
-
update [] set [] =(...)
-
delete [] from[]; //速度慢,支持回滚
-
快速创建表 create table [] as select …
-
truncate删除效率高,但不支持回滚
-
删除表:drop table 表名;
-
约束
not null非空约束
unique唯一性约束,字段不能重复,但是可以是null
primary ke(y主键约束
foreign key外键约束
-
在创建的字段后面直接加就行了
-
复合主键 primarykey(字段1,字段2)
-
主键值一般都是数字,定长
-
id int primarykey auto_increment//auto表示自动递增
-
外键约束(字段上的值都是父表里面存在的)
-
create table t_class( classno int primary key, calssname varchar(255) ); create table t_student( no int primary key auto_increment, name varchar(255), cno int, foreign key(cno) references t_class(classno) );
删除的时候先删除子表再删除父表
drop table if exists t_student; drop table if exists t_class;
-
事务
一个事务就是一个完整的业务逻辑
只有DML语句才和业务有关
提交事务:commit
回滚事务:rollback
开启事务:start transaction
-
事务和事务之间的隔离级别有四个:
(read uncomitted)读未提交:脏读
(read comitted)读已提交:只能读到已经提交的数据,不可重复读
(repeatable read)可重复读:只能读到刚开启事务的数据
(serializable)序列化/串行化:解决所有问题,不能并发,效率低
-
创建索引和删除
create index [索引名称] on 表名(需要添加索引的字段) drop index [索引名称] on 表名 //查看是否使用了索引 explain select * from [表名] where [条件]; 解释了查看一个语句是否使用了索引
-
创建视图
create view [] as select .. //删除 drop view []
-
数据导出
mysqldump [表名]>路径\文件名 用户名 密码 //导入 source 路径 指定表名(可以省略)\文件名
-
设计范式:
第一范式:要求任何一张表必须有主键,每一个字段原子性不可以再分
第二范式:建立在第一范式的基础之上,要求所有的非主键字段完全依赖主键(多对多,三张表,关系表,两个外键)
第三范式:建立在第二范式的基础之山,要求所有的非主键字段直接依赖主键(一对多,三张表,多的表加外键)
一对一,外键唯一
MySQL练习题
select S.Name,S.Money,School.name from stu S join (select Number,avg(Money) av_money from stu group by Number) as newp on S.Number=newp.Number and S.Money>newp.av_money join School on S.Number=School.Number group by S.Number; select Name,Number from stu order by Money desc limit 1; select Money from stu where Money not in(select a.Money from stu a join stu b on a.Money<b.Money );