MySQL 内置函数
1.concat拼接字符串函数
- concat(参数1,参数2,参数3,参数n)
- 参数可以是数字,也可以是字符串
- 把所有的参数连接成—个完整的字符串
select concat(12,34,'ab');
2.length返回字符串字符的个数
- 一个utf8格式的汉字,length返回3
-- 例2:计算字符串' abc'的长度
select length( 'abc');
-- 例3:计算字符串'我和你'的长度
SELECT length(C'我和你');
-- 例4:计算字符串'我和you’的长度
SELECT length('我和you' );
3.mysql内置函数可以在where条件后面使用
-- 例4:查询表 students中name长度等于9(三个utf8格式的汉字〉的学生信息
SELECT * from students where length(name) = 9;
4.left从字符串左侧截取指定数量字符
- left(字符串, n)
- n代表从字符串左侧截取n个字符
-- 例5:截取字符串'我和你abc'的左端3个字符
select left('我和你abc',3);
-- 例6:截取字符串'我和你abc'的左端4个字符
select left('我和你abc ',4);
-- 例6:截取字符串' abc我和你'的左端4个字符
select left( 'abc我和你',4);
-- 这个的结果为:abc我
- left 函数不分中文和英文
5.right从字符串右侧截取指定数量的字符
- rigth(字符串, n)
- n代表从字符串右侧截取n个字符
-- 例5:截取字符串"我和你abc'的右端3个字符
select right('我和你abc',3);
-- 例5:截取字符串'我和你abc'的右端4个字符
select right('我和你abc',4);
6.substring从字符串指定位置截取指定数量字符
- substring(字符串,起始位置, n)
- 起始位置从1开始
- n代表截取的数量
-- 例7:截取字符串'我和你abc'从第2个字符开始的3个字符
select substring('我和你abc ',2,3);
-- 例7:截取字符串'我和你abc'从左侧开始的3个字符
select substring('我和你abc',1,3);
-- 例7:截取字符串'我和你abc'从第4个字符开始的1个字符
select substring('我和你abc ',4,1);
7.内置函数可以用在select显示的字段名中
-- 例8:截取students表中所有学生的姓
SELECT left(name,1) from students ;
SELECT substring(name,1,1) from students;
-
练习
-- 练习1:查询students表的card 字段,截取出生年月阳,显示李白的生日 SELECT substring(card,7,8) from students where name = '李白'; -- 练习2:查询students表的所有学生信息,按生日从大到小排序 SELECT * from students ORDER BY substring(card,7,8);
8.ltrim去除字符串左侧空格
- ltrim(带空格的字符串)
-- 例1:去除字符串' abcd '左侧空格
SELECT 1trim( ' abcd ');
9.rtrim去除字符串右侧空格
- rtrim(带空格的字符串)
-- 例1:去除字符串’abcd '右侧空格
SELECT rtrim( 'abcd ');
select concat (rtrim(' abcd '),'测试字符");
10.trim去除字符串两个空格
- trim(带空格的字符串)
-- 例1:去除字符串" abcd '两侧空格
SELECT trim( ' abcd ');
11.round四舍五入
- round(数字,d)
- d代表要保留的小数位,省略d默认为0
-- 例1:1.653四舍五入,保留整数位
SELECT round(1.653);
-- 例2: 1.653四舍五入,保留2位小数
SELECT round(1.653,2);
-
案例
-- 例3:查询students表中学生的平均年龄,并四舍五入,保留两位小数 SELECT round(avg(age),2) from students;
12.rand随机数
-
rand()
- 每次运行会产生一个从0到1之间的浮点数
-
经常用rand对—个张进行随机排序
- order by rand()
select rand();
-- 小技巧:从学生表中随机抽出一个学生
SELECT * from students order by rand() LIMIT 1;
13.current_date返回系统日期
- current_date()
14.current_time返回系统时间
- current_time()
15.返回系统日期与时间
- now()
select current_date();
select current_time() ;
select now();
- 日期和时间函数的案例
-- 插入记录时,插入系统当前时间
create table a (id int,indate datetime);
insert into a values (1,"2010-09-10 12:01:02");insert into a values (1,now();
select * from a;
16.存储过程
- 例1:创建存储过程stu(),查询students表所有学生信息
CREATE PROCEDURE stu()
BEGIN
SELECT * from students;
end
- 调用存储过程stu
call stu();
- 删除存储过程,删除的时候不用写名字后面的()
DROP PROCEDURE stu;
drop PROCEDURE if EXISTS stu;
17. 视图
-
视图本身就是对查询(select语句)的封装
-
视图可以理解为一张只读的表,针对视图只能用select,不能用delete和update
-- 创建一个视图,查询所有男生信息
CREATE VIEw stu_nan as
SELECT * from students where sex ='男';
-- 使用视图
SELECT * from stu_nan INNERJOIN scoreson stu_nan.studentNo = scor es.studentNo;
-- 删除视图
drop VIEW stu_nan;
DROP view if EXISTS stu_nan;
18.事务
- 事务是多条更改数据操作的sql语句集合
- 一个集合数据有一致性,要么就都失败,要么就都成功
- begin --- 开始事务
- rollback --- 回滚事务,放弃对表的修改
- commit --- 提交事务,对表的修改生效
没有写 begin 代表没有事务,没有事务的表操作都是实时生效。
如果只写了begin,没有rollback,也没有commit,系统退出,结果是rollback
回滚事务的操作
-- 例1:开启事务,
-- 删除students 表中studentNo 为001的记录,
-- 同时删除 scores表中studentNo 为001的记录,
-- 回滚事务,两个表的删除同时放弃
-- 开始事务
begin;
DELETE from students where studentNo = '001';
DELETE from scores where studentNo = '001';
-- 回滚事务,放弃更改
ROLLBACK;
- 如果开始一个事务,执行了begin,之后,没有rollback也没有commit,中间系统出问题了.默认会执行rollback
提交事务
-- 例2:开启事务,
-- 删除students表中 studentNo 为 001的记录,
-- 同时删除scores表中 studentNo 为001的记录,
-- 提交事务,使两个表的删除同时生效
begin;
DELETE from students where studentNo = '001';
DELETE from scores where studentNo = '001';
-- 提交事务,一旦提交事务,两个删除操作同时生效
commit;
14.索引
-
index
- 给表建立索引,目的是加快select查询的速度
- 如果一个表记录很少,几十条,或者几百条,不用索引
- 表的记录特别多,如果没有索引,select语句效率会非常低
创建索引
- create index 索引名 on 表名(字段)
- 如果字段为字符串,需要写明创建表字段的时候字符串的长度
-- 例1:为表students 的age字段创建索引,名为age_index
CREATE index age_index on students (age);
-- 例2:为表 students 的name字段创建索引,名为name_index
CREATE INDEx name_index on students (name(10));
调用索引
- 不需要显示的写调用索引的语句,只要where条件后面用到的字段建立了索引,那么系统会自动调用
-- where条件后面的字段,数据库系统会自动查找是否有索引--这里会自动调用age_index
select * from students where age = 30;
-- 自动调用name_index
SELECT * from students where name = '李白';
-- 不会调用任何索引,因为sex字段没有索引
SELECT * from students where sex ='女';
查看索引
- show index from 表名
- 对于主键,系统会自动建立索引
-- 查看students表的索引
show index from students;
删除索引
- drop index 索引名 on 表名
show index from students;
-- 删除索引age_index
drop index age_index on students ;
-- 删除索引name_index
drop index name_index on students;
索引的优缺点
- 提高select的查询速度
- 降低update,delete和insert语句的执行速度。
- 项目中80%以上是select,所以index必须的
- 在实际工作中如果涉及到大量的数据修改操作,修改之前可以把索引删除,修改完成后再把索引建立起来
MySQL 命令行
基于命令行的mysql
- mysgl -h mysql服务器的地址-u用户名-p
- -h 如果是使用本机的mysgl,-h可以省略
mysql登录之后的常用命令
-
show databases
- 显示系统所有的数据库
-
use数据库名
- 使用指定的—个数据库
-- 使用mydb数据库
use mydb
-
show tables
- 查看指定数据库有多少表
-
如果命令行默认字符集与数据库默认字符集不同
- 在windows默认字符集是gbk
- set names gbk
- 告诉mysql,客户端用的字符集是gbk
选择了数据库以后就可以查看数据库有多少表
-
在命令行中每条sql语句用;结尾
-
可以通过desc表名查看一个表的字段结构
- desc students
- 查看students每个字段的定义
-
在命令行下创建和删除数据库
- create database数据库名default charset字符集
-- 创建一个数据库mytest,认字符集为utf8
create database mytest default charset utf8;
-- 删除数据库mytest
drop database mytest
drop database if exists mytest;
标签:index,--,students,SELECT,MySQL,字符串,select
From: https://www.cnblogs.com/lzy5967/p/16653717.html