目录
对数据库的操作
-
连接数据库:mysql -u root -p
mysql -u root -p
-
创建数据库:
create database database_name default character set utf8;
-
查看数据库:
show databases;
-
用数据库:
use database_name ;
-
删除数据库:
drop database database_name ;
对表的操作
-
创建表:
create table tablename(字段名1 字段类型1(字段长度),字段名2 字段类型2(字段长度));
-
查看表:
show tables;
-
查看表结构
desc tablename;
-
删除表
drop table tablename;
-
修改表
alter table tablename xxx(操作)
-
修改列名
alter table tablename change 原列名 想改成的列名 列类型;
-
修改表的名字
alter table tablename rename 新表名 ;
-
修改列的类型
alter table tablename modify 列名 想改的类型;
-
增加某列
alter table tablename add 列名 类型;
-
删除某列
alter table tablename drop 列名;
对数据/记录的操作
-
查询记录
select * from 表名;
-
插入表记录
insert into tablename values(值1,值2,...); #值的个数、顺序要和字段的个数、顺序一样 insert into tablename.列名1,tablename.列名2 values(值1,值2);#给某一列添加数据
-
修改表记录
update tablename set 字段名 = 值;
-
删除表记录
delete from tablename;---删除全部表记录(表还在)
-
防止中文乱码
set name gbk;
字段约束
-
主键约束
create table tablename(字段名1 字段类型1(字段长度) primary key auto_increment, 字段名2 字段类型2(字段长度));
-
非空约束
create table tablename(字段名1 字段类型1(字段长度), 字段名2 字段类型2(字段长度) not null );
-
唯一约束
create table tablename(字段名1 字段类型1(字段长度), 字段名2 字段类型2(字段长度) unique );
-
默认约束
sex CHAR(2) DEFAULT '男'
-
检查约束
create table tablename( age INT, CHECK (age>0 AND age<=200) );
-
外检约束
FOREIGN KEY (本表(子表)主键) REFERENCES 外表(主表)名(外表主键)
基础函数
全转小写:lower
SELECT lower(ename) FROM emp;
全转大写:upper
SELECT upper(ename) FROM emp;
获取长度:length
一个字母、数字长度为1,一个汉字为3。跟底层编码表有关
SELECT dname,LENGTH(dname) FROM dept;
concat:拼接字符串
SELECT concat(dname,'hello') FROM dept;
substr:截取字符串
substr(1,2) 1:字段名 2:从那个字符开始 SELECT substr(dname,3) FROM dept;---------从第三个字母后开始截取,直到结束 substr(1,2,3) 1:字段名 2:从那个字符开始 3:截取长度 SELECT substr(dname,3,2) FROM dept;-------从第三个字母后开始截取,截取两个字母
replace:替换字符
### replace(1,2,3):替换字符 1:字段名 把2替换成3 SELECT dname,REPLACE(dname,'a','666') FROM dept;
ifnull:判断是否为空
#ifnull(1,2)----判断1是否为null,为null,替换为2.不为null,不管 SELECT comm,IFNULL(comm,200) FROM emp;
round:四舍五入
SELECT comm,ROUND(comm)FROM emp;
ceil 向上取整
SELECT comm,CEIL(comm) FROM emp;
floor 向下取整
SELECT comm,FLOOR(comm) FROM emp;
时间函数:
-
now()----------------获取当前时间(年月日时分秒)
-
year(now())--------获取当前时间的年份
-
month(now())------获取当前时间的月份
-
day(now())---------获取当前时间的日份
-
hour(now())--------获取当前时间的时份
-
minute(now())-----获取当前时间的分份
-
second(now())-----获取当前时间的秒份
条件查询
distinct:去重
SELECT distinct 字段名 FROM tablename;
where条件:
SELECT * FROM tablename WHERE 字段名1 = 条件1 and 字段名2 = 条件2; SELECT * FROM tablename WHERE 字段名1 = 条件1 or 字段名2 = 条件2; SELECT * FROM tablename WHERE 字段名 in (条件1,条件2)
模糊查询:like
SELECT * FROM tablename WHERE 字段名 LIKE '%o%';#低效 SELECT * FROM tablename WHERE 字段名 LIKE 'o%';#最高效 SELECT * FROM tablename WHERE 字段名 LIKE '%o';#高效 SELECT * FROM tablename WHERE 字段名 LIKE'l__';
null操作空数据
SELECT * FROM tablename WHERE 字段名 IS NULL; SELECT * FROM tablename WHERE 字段名 IS not NULL;
区间范围:between...and...是包含的关系
SELECT * FROM tablename WHERE 字段名 BETWEEN 3000 AND 10000;#等效包含3000、10000
分页:limit
#查询表中前两条信息 SELECT * FROM tablename limit 2; #从第二行,展示两条信息 SELECT * FROM tablename LIMIT 1,2;#从n+1行开始展示,要展示的行数
排序:order by
SELECT * FROM tablename ORDER BY 字段名;#默认升序 SELECT * FROM tablename ORDER BY 字段名 DESC;#降序 #查询的是数字---按照数字排序 #查询的是字母---按照字母的顺序 #查询的是生日---按照数值排序 #查询的是汉字---按照汉字对应在utf8编码表中数字进行排序
聚合函数
查最大值:max
SELECT MAX(字段名) FROM tablename;
查最小值:min
SELECT MIN(字段名) FROM tablename;
查平均值:avg
SELECT AVG(字段名) 平均工资 FROM tablename;
求和:sum
SELECT SUM(字段名) 求和 FROM tablename;
统计个数count
SELECT COUNT(1) FROM tablename;
分组: group by
查询时,出现了混合列(聚合列跟非聚合列)的现象是不行的,必须分组
#查询每个部门的最高薪---部门编号deptno---薪水sal SELECT deptno, MAX(sal) FROM emp GROUP BY deptno; # 非聚合列,聚合列
having:完成分组后过滤
#查询每个部门的人数,人数>1的部门 SELECT deptno,COUNT(1) FROM emp GROUP BY deptno HAVING COUNT(1) >1;
事务
开始事务
start transaction
结束事务之提交事务
commit
结束事务之回滚事务
rollback
索引
查看索引
show index from 表名;
创建单值索引
create index 索引名字 on 表名(字段名);
创建唯一索引
create unique index indexname on tablename(字段名);
创建复合索引
create index indexname on tablename(字段名1, 字段名2);
删除索引
alter table tablename drop index indexname;
使用普通索引,唯一索引
explain select * from tablename where 字段名 = 字段值;
使用复合索引
explain select * from tablename where 字段名1 = 字段值 and 字段名2 = 字段值;
多表联查
笛卡尔积
select * from tablename1,tablename2 where tablename1.字段名 = tablename2.字段名#表关系 and tablename1.字段名2 = 字段值;#业务关系
连接查询
-
内连接-----inner join: 取两个表的交集
SELECT * FROM tablename1 INNER JOIN tablename2 ON tablename1.`deptno` = tablename2.`deptno`#表关系 where tablename1.字段名2 = 字段值;#业务关系
-
外左连接-----left join :左表的所有和右表满足条件的,不满足是null
SELECT * FROM tablename1 left JOIN tablename2 ON tablename1.`deptno` = tablename2.`deptno`#表关系 where tablename1.字段名1 = 字段值;#业务关系
-
外右连接-----right join :右表的所有和左表满足条件的,不满足是null
SELECT * FROM tablename1 right JOIN tablename2 ON tablename1.`deptno` = tablename2.`deptno`#表关系 where tablename1.字段名2 = 字段值;#业务关系
子查询
SELECT * FROM tablename1 WHERE 字段名1 IN (SELECT 字段名1 FROM tablename2 WHERE 字段名2 = '字段值');
视图
创建视图
create view view_name as SQL查询语句
使用视图
select * from view_name;