首页 > 数据库 >MySQL_4

MySQL_4

时间:2022-09-03 21:49:16浏览次数:52  
标签:index -- students SELECT MySQL 字符串 select

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

相关文章

  • 常用MySQL语句
    1.客户端登录在终端输入mysql-u[用户名]-p[密码] 2.数据库级别操作//创建数据库createdatabase[dbname];//查看数据库列表showdatabases;//选择数据......
  • Mysql第一部分
    MySQL基础-01一、数据库的基本概念1.为什么要学数据库?我们如果想将一些数据实现永久化存储,可以怎么做呢?没错。使用IO流的技术将数据保存到本地文件中但是接下来我有这......
  • 【MySQL】order by引起的慢查询问题总结
    最近遇到了一个SQL没有走索引导致出现慢查询的问题,SQL本身很简单,两张表联合查询然后进行排序和分页,由于涉及到一些业务,这里以用户表和订单表为例,用户表数据在35W左右,订单表......
  • 今天开始学习mysql,遂先安装了Mysql 5.6.19 64bit 版本的数据库,结果安装成功了,但是使用
    Linuxmysql5.6:ERROR1045(28000):Accessdeniedforuser'root'@'localhost'(usingpassword:NO)-潇湘隐者-博客园 https://www.cnblogs.com/kerrycode/p/38......
  • Linux 设置Apche+MySQL开机启动
    Linux下将Apache(httpd)新增为系统服务及开机自启动第2页_服务器应用_Linux公社-Linux系统门户网站 https://www.linuxidc.com/Linux/2012-11/74517p2.htmLinux设置Ap......
  • MySQL_1
    MySQL1.注释2.单行注释--:两个横线后面就是注释在Navicat中,ctrl+/快速注释在Navicat中按ctr+shiftl+/选中SQL代码取消注释3.常用数据类型整数:int,有符......
  • MySQL_2
    1.字段的别名通过字段名as别名的语法,可以给字段起一个别名,别名可以是中文,as可以省略字段名as别名和字段名别名结果是一样的--通过as给字段起一个别名selectcar......
  • 4.2 安装与配置mysql模块
    在使用mysql模块操作mysql数据库之前,必须先对mysql模块进行必要的配置步骤如下:constmysql=require('mysql')constdb=mysql.createPool({host:'127.0.0.1......
  • Docker基础知识 (8) - 使用 Docker 部署 SpringBoot + MariaDB(MySQL)项目
    本文在“ Docker基础知识(7)-使用Docker部署SpringBoot项目”里的SpringbootWebDocker项目的基础上,添加JDBC、MariaDB和MyBatis相关依赖包和数据库操作代......
  • django中操作mysql数据库
    1.准备工作(django连接数据库)1.本机电脑下载好mysql数据库2.打开django,修改setting.py中的DATABASES配置项DATABASES={'default':{'ENGINE':'django.d......