mysql学习笔记
Posted 神芝
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql学习笔记相关的知识,希望对你有一定的参考价值。
1、SQL语句分为数据操作语言(DML)和数据定义语言(DDL)
数据操作语言部分:
- select 获取数据
- update 更新数据
- delete删除数据
- insert into 插入数据
数据定义语言部分:
- create database 创建新数据库
- alter database 修改数据库
- create table创建新表
- alter table 修改数据表
- drop table 删除表
- create index 创建索引
- drop index 删除索引
2、 语法
(1)select语句
SELECT 列名称 FROM 表名称
列名可以是*,会查询出所有列
(2)select distinct语句
SELECT DISTINCT 列名称 FROM 表名称
只会查询出值不同的行
(3)where子句
SELECT 列名称 FROM 表名称 WHERE 列 运算符 条件值
为别的语句添加条件,运算符有=,!=,>,<,<=,>=,between,like
条件值如果是字符串用‘‘括起来
like的使用语法是select 列名称 from 表名称 where 列名称 like 匹配条件
匹配条件是‘a%‘,就是筛选出这个列中以a开头的所有行,%是通配符
and和or,用于分隔条件,and是与,or是或
(4)order by语句
SELECT 列名称 FROM 表名称 order by 列名称
会根据列进行升序操作
SELECT 列名称 FROM 表名称 order by 列名称 desc
会根据列进行降序操作
(5)insert into语句
insert into 表名称 (列1,列2) values(值1,值2)
insert into 表名称 values(值1,值2)
(6)update语句
更新某一列
update 表名称 set 列名称=值2 where 列名称=值1
更新某几列
update 表名称 set 列1=值1,列2=值2 where 列1=值3
(7)delete语句
删除某一行
delete from 表名称 where 列1=值1
删除所有行,保留表结构
delete from 表名称
delete * from 表名称
(8)top子句和 top percent子句
选取前2条记录
select 列名称 from 表名称 limit 2
mysql不支持top子句,top percent子句也不支持
(9)in子句
匹配多个值
select 列名称 from 表名称 where 列名称 in (值1,值2)
(10)between子句
mysql的between查询结果会包括值1和值2,数据库不同这个结果可能不同
select 列名称 from 表名称 where 列名称 between 值1 and 值2
在between前加个not,会查询出相反的结果
select 列名称 from 表名称 where 列名称 not between 值1 and 值2
3、
(1)通配符
使用通配符是一般是搭配like子句
%代表任意多字符
_代表任意一个字符
[^asd]/[!asd]除了asd之外的任意一个字符(在mysql中!是没用的,必须要用^)
[asd]asd中的任意一个字符(在mysql中like是不能跟[]搭配的,[]必须要跟regexp搭配)
当使用regexp时,匹配田间就不是%和_,而是^(非),*(匹配前面的子表达式0次或多次),+(匹配前面的子表达式一次或多次),{n}(例如a{2}匹配2个a),{n,m}(例如a{2,3}匹配a最少2个最多3个)
(2)alias别名
表名的别名
select 列名称 from 表名称 as 表别名
列的别名
select 列名称 as 列别名 from 表名
(3)关联2个表
可以通过外键关联
select 表1.列1 表2.列1 from 表1,表2 where 表1主键名=表2列名
也可以通过join:
inner join:在表中存在至少一个匹配,返回该行
left join:从左表返回所有行,即使右表没有匹配
right join:从右表返回所有行,即使左表没有匹配
full join:会返回所有行,即使左右表都没有匹配
(4)合并多个结果集
union语句
合并不重复的值
select语句1 union select语句2
合并不重复的值
select语句1 union all select语句2
(5)把列插入到另一个表中
select 表名称 into 新表名[数据库名] from 旧表名
(6)sql约束
not null 如果不向字段添加值,就无法更新数据或插入数据
unique唯一,但是可为空 建表时在最后一行加上unique key(列名)即可
撤销unique约束alter table 表名称 drop index 列名称
primary key主键
撤销主键使用alter table 表名称 drop primary key
foreign key 外键 foreign key (本表列名) references 其他表名称(其他表主键)
撤销外键约束alter table 表名称 drop foreign key 外键名
check约束 用于约束列中值得范围 check(类名称>0)类中的值要大于0
撤销check约束alter table 表名称 drop constraint 被check约束列名称
defuault默认
将默认值添加到有default约束的列
撤销default约束alter table 表名称 alter 列名称 drop default
(7)索引
create index语句用于创建索引,所有可以使用重复的值,索引值不能是数字
create index 索引名 on 表名称(列名称)
创建唯一索引:2行不能拥有一样的索引值
create unique index 索引名 on 表名称(列名称)
删除索引alter table 表名称 drop index 索引名
(8)改变表结构操作
删除表中所有数据:drop table 表名称
删除表中所有数据,保留表结构 :truncate table 表名称
添加列:alter table 表名称 add 列名称 数据类型
删除列:alter table 表名称 drop column 列名称
改变列数据类型:alter table 表名称 alter column 列名称 新数据类型
(9)auto-increment自增,只有主键才能使用这个约束,每次更新加1,从1开始
改变起始值:alter table 表名称 auto-increment=值1
(10)时间函数
now()当前日期时间
curdate()当前日期
curtime()当前时间
date_format()格式化时间
(11)函数
select 函数名(列名称) from 表名称
avg()平局值
count()行数
max()最高值
min()最低值
sum()总和
group by语句 用于对结果集进行分组,通常用于合计函数,合并相同名称的行
select 列名称 sum(列名称) from 表名称 group by 列名称
having子句:合计函数不能增加where条件判断,要使用having子句
select 列名称,函数名(列名称) from 表名称 having 函数名(列名称)<200
ucase()转为大写
select ucase(列名称) from 表名称
lcase()转为小写
mid()从字段中提取字符
select mid(列名,起始位置,提取长度)from 表名
提取长度属性是可选的
len()返回字段长度
round()格式化小数
select round(列名称,小数位数)from 表名称
以上是关于mysql学习笔记的主要内容,如果未能解决你的问题,请参考以下文章
MySQL - 学习笔记 - 标准SQL函数 Standard SQL Functions