加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_镇江站长网 (https://www.0511zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL学习

发布时间:2022-12-12 13:35:08 所属栏目:MySql教程 来源:未知
导读: MySQL
一、MySQL安装和卸载
详细步骤请见博客资源中的详细步骤
详细安装教程
完全卸载教程
1.安装完毕之后:管理员模式下进入黑窗口启动mysql
2.用命令 mysql -u root -p 进入mysql管理界面

MySQL

一、MySQL安装和卸载

详细步骤请见博客资源中的详细步骤

详细安装教程

完全卸载教程

1.安装完毕之后:管理员模式下进入黑窗口启动mysql

2.用命令 mysql -u root -p 进入mysql管理界面

3.进入界面后更改root密码

update mysql.user set authentication_string=password(‘123456’) where user=‘root’ and Host = ‘localhost’;

4.刷新权限

flush privileges;

5.修改mysql安装目录下的my.ini文件删除最后一句skip-grant-tables

6.配置好环境之后,不需要进入mysql安装目录即可在任意地方启动

7.重新启动mysql即可正常使用

net start mysql // 启动

net stop mysql //结束

8.安装工具SQLyog

在这里插入图片描述

在这里插入图片描述

二、MySQL语法 1.数据库操作

创建数据库 : create database [if not exists] 数据库名;

删除数据库 : drop database [if exists] 数据库名;

查看数据库 : show databases;

使用数据库 : use 数据库名;

在这里插入图片描述

创建数据表

语法:

create table [if not exists] `表名`(
	`字段名1` 列类型 [属性][索引][注释],
	`字段名2` 列类型 [属性][索引][注释],
	`字段名3` 列类型 [属性][索引][注释],
	#...
	`字段名n` 列类型 [属性][索引][注释],
)[表类型][表字符集][注释];

说明:反引号用于区别MySQL保留字与普通字符而引入的(键盘esc下面的键)

数据值和列类型

列类型:规定数据库中该列存放的数据类型

数值类型

tinyint: 非常小的数据 1字节

smallint : 较小的数据 2字节

mediumint:中等大小的数据 3字节

int: 标准整数 4字节

字符串类型

char[]: 固定长字符串,检索快但废空间 M字符

varchar[]: 可变字符串 变长度

tinytext: :微型文本串

text: 文本串

日期和时间型数据类型

DATE: YYYY-MM-DD,日期格式

TIME: Hh:mm:ss, 时代格式

DATETIME: YY-MM-DD hh:mm:ss

TIMESTAMP:YYYYMMDDhhmmss 格式表示的时间戳

YEAR: YYYY格式的年份值

Null值

未知值/没有值 不要用Null进行算术运算,结果仍未Null

数据字段属性:

Unsigned:无符号 声明该数据列不允许负数

ZEROFILL:0填充的 不足位数的用0来填充,如int(3),则为005

Auto_inCrement:

自动增长的,每添加一条数据,自动在上一个记录数上加1(默认)

通常用于设置主键,且为整数类型,可定义起始值和步长,当前表设置步长时,只影响当前表,set@@auto_increment_increment=5;影响所有使用自增的表(全局)

NULL和NOT NULL:默认为null,如果设置为not null,则该列必须有值

DEFAULT:默认的;用于设置默认值

例如:性别字段:默认‘男’,否则为‘女;若无指定该列的值,则默认值为‘’男’的值

例题:创建一个school数据库,创建学生表(列,字段) ,学号int 登录密码varchar(20) 姓名,性别varchar(2),出生日期(datatime),家庭住址,email 创建表之前 , 一定要先选择数据库

show create database wei //查看数据库的定义

show create table student // 查看数据表的定义

desc student //显示表的结构

在这里插入图片描述

USE wei
CREATE TABLE IF NOT EXISTS `student` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '生日',
`address` VARCHAR(100) DEFAULT NULL COMMENT '地址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
DESC student

数据表的类型:

设置数据表的类型:

create table 表名(

省略一些代码 MySQL注释 #单行注释 /**/ 多行注释)engine = myisam(or innodb)

show engines #查看mysql所支持的引擎类型(表类型)

适用场合:

节约空间及相应速度–MyISAM

安全性,事务处理及多用户操作数据表=InnoDB

数据表的存储位置

MySQL数据表以文件方式存在磁盘中,包括表文件mysql学习,数据文件,以及数据库中的选项文件

位置:Mysql安装目录\data\下存放数据表,目录名对应数据库名,该目录下文件名对应数据表

*.frm - 表结构定义文件

*.MYD - 数据文件(data)

*.MYI - 索引文件(index)

设置数据表字符集

我们可以为数据库,数据表,数据列设定不同的字符集,设定方法为:

创建时通过命令来设置,如果:create table 表名() charset = uft8

如无设定,根据MySQL数据库配置文件my.ini中的参数设定

2.修改数据库

修改表:alter table

修改表名:alter table 旧表名 rename as 新表名

添加字段:alter table 表名 add字段名 列属性[属性]

修改字符:alter table 表名 modify 字段名 列类型[属性] /alter table 表名 change 旧字段名 新字段名 列属性[属性]

删除字符:alter table 表名 drop 字段名

删除数据表

语法:drop table if exists 表

外键:

将一个表的值放入第二个表来表示关联,所使用的值是第一个表的主键值,此时,第二个表中保存这些值的属性成为外键

作用:保持数据一致性,完整性,主要目的是控制存储在外键表中的数据约束,使两张表形成关联,外键只能引用外表中的列的值或适用空值

创建外键

建表时指定外键约束:

创建外键的方式一:创建子表同时创建外键
//年级表
CREATE TABLE `grade`(
`gradeid`INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级ID',
`gradename`VARCHAR(50) NOT NULL COMMENT '年级名称' ,
PRIMARY KEY(`gradeid`) 
)ENGINE= INNODB DEFAULT CHARSET=utf8
//学生信息表(学号,姓名,性别,年级,手机,地址,出生日期,邮箱,身份证号)
CREATE TABLE `student` (
`studentno` INT(4) NOT NULL COMMENT '学号',
`studentname` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`sex` TINYINT(1) DEFAULT '1' COMMENT '性别',
`gradeid` INT(10) DEFAULT NULL COMMENT '年级',
`phoneNum` VARCHAR(50) NOT NULL COMMENT '手机',
`address` VARCHAR(255) DEFAULT NULL COMMENT '地址',
`borndate` DATETIME DEFAULT NULL COMMENT '生日',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
`idCard` VARCHAR(18) DEFAULT NULL COMMENT '身份证号',
PRIMARY KEY (`studentno`),
KEY `FK_gradeid` (`gradeid`),
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
创建外键方式二:创建子表完毕后,修改子表添加外键
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`);

删除外键

操作:删除grade表,删除具有主外键关系的表时,要先删子表,后删主表

删除外键:later table student drop foreign key FK_gradeid;
索引还在,所以要删除索引 : alter table student drop index FK_gardeid;

3.DML语言

数据库的意义:数据存储,数据管理

1.通过sqlyog等管理工具管理数据库数据 -

2.同通过DML语句管理数据库数据

DML:数据库操作语言 用于操作数据库对象中所包含的数据

包括:inset(添加数据语句) updata(更行数据语句) delete(删除数据语句)

添加数据

语法:insert into 表名[(字段1,字段2,字段3…)]VALUES(值1,值2…)

注意:可同时插入多条数据,values后用英文逗号隔开

USE wei
INSERT INTO grade(gradename) VALUES('大二');
//添加的值务必与表结构,数据列,顺序相对应,且数量一致
//一次插入多条数据
INSERT INTO grade(gradename) VALUES('大四'),('研究生');

修改数据

语法:update 表名 set column_name=value[,column_name2 = value2,…][where condition];

注意:column_name为要更改的数据列 condition为筛选条件,如不指定则修改该表的所有列数据

where条件子句

修改年级年级信息
UPDATE grade SET gradename = '高中' WHERE gradeid = 1;

删除数据

语法:delete from 表名[where condition];

注意:condition为筛选条件,如不指定则删除该表的所有列数据

删除最后一个数据
DELETE FROM grade WHERE gradeid = 5

TRUNCATE命令

作用:用于完全清空表数据,但表结构,索引,约束等不变

语法:TURNCATE [table] table_name;

清空年级表 
TRUNCATE grade

注意区别与delete命令:

相同:都能删除数据,不删除表结构,但truncate速度更快

不同:适用truncate table重新设置atuo_increment计时器,适用truncate table不会对事务有影响

测试:

//创建一个测试表
CREATE TABLE `test` (
`id` INT(4) NOT NULL AUTO_INCREMENT,
`coll` VARCHAR(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
//插入几个测试数据
INSERT INTO test(coll) VALUES('row1'),('row2'),('row3');
//删除表数据(不带WHERE条件的DELETE)
DELETE FROM test;
//结论:如不指定WHERE则删除该表的所有数据,自增当前值依然可以从原来基础上进行,会记录日志
//删除表数据(TRUNCATE)
TRUNCATE TABLE test;
DESC test
//结论:TRUNCATE删除数据,自增当前值会恢复到初始值重新开始,不会记录日志
//同样适用DELETE清空不同引擎的数据库数据

4.DQL语言

DQL(数据查询语言)

1.查询数据库数据,如select语句

2.简单的单表查询或夺标的复杂查询和嵌套查询

3.是数据库语言中最核心最重要的语句

4.使用频率最高的语句

select语法

SELECT [ALL | DISTINCT]
{* | table.* | [table.field1[AS alias1][,table.field2[AS alias2]][,...]]}
FROM table_name [AS table_alias]
  [LEFT | RIGHT | INNER JOIN table_name2]  -- 联合查询
  [WHERE ...]  -- 指定结果需满足的条件
  [GROUP BY ...]  -- 指定结果按照哪几个字段来分组
  [HAVING]  -- 过滤分组的记录必须满足的次要条件
  [ORDER BY ...]  -- 指定查询记录按一个或多个条件排序
  [LIMIT {[OFFSET,]ROW_COUNT | row_countOFFSET OFFSET}];
   -- 指定查询的记录从哪条至哪条

[]代表可选,{}代表必选

指定查询字段

查询所有学生信息:
SELECT * FROM student;
SELECT studentno,studentname FROM student;

AS子句作为别名

作用:可给数据列取一个新的别名,给表取一个新的别名,可把经计算或总给的结果用另一个新名称来代替

SELECT studentno AS 学号,studentname AS 姓名 FROM student AS s;
SELECT CONCAT('姓名',studentname)AS 新姓名 FROM student;

distinct关键词使用

作用:去掉select查询返回的记录结果中重复的记录(返回所有列的值都相同,只返回一条)

 # 查看哪些同学参加了考试(学号) 去除重复项
SELECT * FROM result; -- 查看考试成绩
SELECT studentno FROM result; -- 查看哪些同学参加了考试
SELECT DISTINCT studentno FROM result; -- 了解:DISTINCT 去除重复项 , (默认是ALL)

使用表达式的列

数据库中的表达式:一般由文本值,列值,null,函数和操作符等组成

where条件语句

作用:用于检索数据表中符合条件的记录

搜索条件可由一个或多个逻辑表达式组成,结果一般为真或假

逻辑操作符

-- 满足条件的查询(where)
SELECT Studentno,StudentResult FROM result;
-- 查询考试成绩在95-100之间的
SELECT Studentno,StudentResult
FROM result
WHERE StudentResult>=95 AND StudentResult<=100;
-- AND也可以写成 &&
SELECT Studentno,StudentResult
FROM result
WHERE StudentResult>=95 && StudentResult<=100;
-- 模糊查询(对应的词:精确查询)
SELECT Studentno,StudentResult
FROM result
WHERE StudentResult BETWEEN 95 AND 100;
-- 除了1000号同学,要其他同学的成绩
SELECT studentno,studentresult
FROM result
WHERE studentno!=1000;
-- 使用NOT
SELECT studentno,studentresult
FROM result
WHERE NOT studentno=1000;

模糊查询:比较操作符

-- LIKE
-- 查询姓刘的同学的学号及姓名
-- like结合使用的通配符 : % (代表0到任意个字符) _ (一个字符)
SELECT studentno,studentname FROM student
WHERE studentname LIKE '刘%';
-- 查询姓刘的同学,后面只有一个字的
SELECT studentno,studentname FROM student
WHERE studentname LIKE '刘_';
-- 查询姓刘的同学,后面只有两个字的
SELECT studentno,studentname FROM student
WHERE studentname LIKE '刘__';
-- 查询姓名中含有 嘉 字的
SELECT studentno,studentname FROM student
WHERE studentname LIKE '%嘉%';
-- 查询姓名中含有特殊字符的需要使用转义符号 '\'
-- 自定义转义符关键字: ESCAPE ':'
-- IN
-- 查询学号为1000,1001,1002的学生姓名
SELECT studentno,studentname FROM student
WHERE studentno IN (1000,1001,1002);
-- 查询地址在北京,南京,河南洛阳的学生
SELECT studentno,studentname,address FROM student
WHERE address IN ('北京','南京','河南洛阳');
-- NULL 空
-- 查询出生日期没有填写的同学
-- 不能直接写=NULL , 这是代表错误的 , 用 is null
SELECT studentname FROM student
WHERE BornDate IS NULL;
-- 查询出生日期填写的同学
SELECT studentname FROM student
WHERE BornDate IS NOT NULL;
-- 查询没有写家庭住址的同学(空字符串不等于null)
SELECT studentname FROM student
WHERE Address='' OR Address IS NULL;

连接查询

join对比:

inner join:组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集

left join:左表的记录将会全部表现出来,而右表只会显示符合搜索条件的记录,右表记录不足的地方均为null

right join: 左边只会显示符合搜索条件的记录,而右表会全部显示出来,左表记录不足的地方均为null

全连接union:通过union连接的sql它们分别单独取出列数必须相同;不要求合并的列名称相同时,以第一个sql表列名为准

/*
连接查询
   如需要多张数据表的数据进行查询,则可通过连接运算符实现多个查询
内连接 inner join
   查询两个表中的结果集中的交集
外连接 outer join
   左外连接 left join
       (以左表作为基准,右边表来一一匹配,匹配不上的,返回左表的记录,右表以NULL填充)
   右外连接 right join
       (以右表作为基准,左边表来一一匹配,匹配不上的,返回右表的记录,左表以NULL填充)    
等值连接和非等值连接
自连接
*/
-- 查询参加了考试的同学信息(学号,学生姓名,科目编号,分数)
SELECT * FROM student;
SELECT * FROM result;
/*思路:
(1):分析需求,确定查询的列来源于两个类,student result,连接查询
(2):确定使用哪种连接查询?(内连接)
*/
SELECT s.studentno,studentname,subjectno,StudentResult
FROM student s
INNER JOIN result r
ON r.studentno = s.studentno
-- 右连接(也可实现)
SELECT s.studentno,studentname,subjectno,StudentResult
FROM student s
RIGHT JOIN result r
ON r.studentno = s.studentno
-- 等值连接
SELECT s.studentno,studentname,subjectno,StudentResult
FROM student s , result r
WHERE r.studentno = s.studentno
-- 左连接 (查询了所有同学,不考试的也会查出来)
SELECT s.studentno,studentname,subjectno,StudentResult
FROM student s
LEFT JOIN result r
ON r.studentno = s.studentno
-- 查一下缺考的同学(左连接应用场景)
SELECT s.studentno,studentname,subjectno,StudentResult
FROM student s
LEFT JOIN result r
ON r.studentno = s.studentno
WHERE StudentResult IS NULL
-- 思考题:查询参加了考试的同学信息(学号,学生姓名,科目名,分数)
SELECT s.studentno,studentname,subjectname,StudentResult
FROM student s
INNER JOIN result r
ON r.studentno = s.studentno
INNER JOIN `subject` sub
ON sub.subjectno = r.subjectno

自连接

数据表与自身进行连接,需求:从一个包含栏目ID , 栏目名称和父栏目ID的表中 查询父栏目名称和其他子栏目名称

排序和分页

语法 : ORDER BY

ORDER BY 语句用于根据指定的列对结果集进行排序。

ORDER BY 语句默认按照ASC升序对记录进行排序。

如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。

-- 查询 数据库结构-1 的所有考试结果(学号 学生姓名 科目名称 成绩)
-- 按成绩降序排序
SELECT s.studentno,studentname,subjectname,StudentResult
FROM student s
INNER JOIN result r
ON r.studentno = s.studentno
INNER JOIN `subject` sub
ON r.subjectno = sub.subjectno
WHERE subjectname='数据库结构-1'
ORDER BY StudentResult DESC

分页:

-- 每页显示5条数据
SELECT s.studentno,studentname,subjectname,StudentResult
FROM student s
INNER JOIN result r
ON r.studentno = s.studentno
INNER JOIN `subject` sub
ON r.subjectno = sub.subjectno
WHERE subjectname='数据库结构-1'
ORDER BY StudentResult DESC , studentno
LIMIT 0,5
-- 查询 JAVA第一学年 课程成绩前10名并且分数大于80的学生信息(学号,姓名,课程名,分数)
SELECT s.studentno,studentname,subjectname,StudentResult
FROM student s
INNER JOIN result r
ON r.studentno = s.studentno
INNER JOIN `subject` sub
ON r.subjectno = sub.subjectno
WHERE subjectname='JAVA第一学年'
ORDER BY StudentResult DESC
LIMIT 0,10

子查询

什么是子查询?

在查询语句中的WHERE条件子句中,又嵌套了另一个查询语句,嵌套查询可由多个子查询组成,求解的方式是由里及外;子查询返回的结果一般都是集合,故而建议使用IN关键字;

-- 查询 数据库结构-1 的所有考试结果(学号,科目编号,成绩),并且成绩降序排列
-- 方法一:使用连接查询
SELECT studentno,r.subjectno,StudentResult
FROM result r
INNER JOIN `subject` sub
ON r.`SubjectNo`=sub.`SubjectNo`
WHERE subjectname = '数据库结构-1'
ORDER BY studentresult DESC;
-- 方法二:使用子查询(执行顺序:由里及外)
SELECT studentno,subjectno,StudentResult
FROM result
WHERE subjectno=(
   SELECT subjectno FROM `subject`
   WHERE subjectname = '数据库结构-1'
)
ORDER BY studentresult DESC;

5.MySQL函数

数据函数

SELECT ABS(-8); //绝对值

SELECT CEILING(9.4); //向上取整

SELECT FLOOR(9.4); //向下取整

SELECT RAND(); //随机数,返回一个0-1之间的随机数

SELECT SIGN(0); //符号函数: 负数返回-1,正数返回1,0返回0

字符串函数

SELECT CHAR_LENGTH(‘狂神说坚持就能成功’); //返回字符串包含的字符数

SELECT CONCAT(‘我’,‘爱’,‘程序’); //合并字符串,参数可以有多个

SELECT INSERT(‘我爱编程helloworld’,1,2,‘超级热爱’); //替换字符串,从某个位置开始替换某个长度

SELECT LOWER(‘KuangShen’); //小写

SELECT UPPER(‘KuangShen’); //大写

SELECT LEFT(‘hello,world’,5); //从左边截取

SELECT RIGHT(‘hello,world’,5); //从右边截取

SELECT REPLACE(‘狂神说坚持就能成功’,‘坚持’,‘努力’); //替换字符串

SELECT SUBSTR(‘狂神说坚持就能成功’,4,6); //截取字符串,开始和长度

SELECT REVERSE(‘狂神说坚持就能成功’); /*反转

日期和时间函数

SELECT CURRENT_DATE(); //获取当前日期

SELECT CURDATE(); //获取当前日期

SELECT NOW(); //获取当前日期和时间

SELECT LOCALTIME(); //获取当前日期和时间

SELECT SYSDATE(); //获取当前日期和时间

– 获取年月日,时分秒

SELECT YEAR(NOW());

SELECT MONTH(NOW());

SELECT DAY(NOW());

SELECT HOUR(NOW());

SELECT MINUTE(NOW());

SELECT SECOND(NOW());

聚合函数

COUNT() 返回满足Select条件的记录总和数,如 select count(*) 【不建议使用 *,效率低】

SUM() 返回数字字段或表达式列作统计,返回一列的总和。

AVG() 通常为数值字段或表达列作统计,返回一列的平均值

MAX() 可以为数值字段,字符字段或表达式列作统计,返回最大的值。

MIN() 可以为数值字段,字符字段或表达式列作统计,返回最小的值

MD5加密

1.简介:MD5是计算机广泛使用的杂凑算法之一,是杂凑算法的基础原理

2.实现数据加密

//创建一个新的表bo
  CREATE TABLE `bo` (
  `id` INT(4) NOT NULL,
  `name` VARCHAR(20) NOT NULL,
  `pwd` VARCHAR(50) NOT NULL,
  PRIMARY KEY (`id`)
 ) ENGINE=INNODB DEFAULT CHARSET=utf8
 //插入一些数据
  INSERT INTO bo VALUES(1,'wuhu','123456'),(2,'aha','456789')
//对pwd这一些列数据进行加密
 update testmd5 set pwd = md5(pwd);
 //单独对某个用户的密码进行加密
  INSERT INTO bo VALUES(3,'yahu','123456')
 update bo set pwd = md5(pwd) where name = 'yahu';
 //插入新的数据进行加密
  INSERT INTO bo VALUES(4,'aha',md5('123456'));
  //查询登录用户信息(md5对比使用,查看用户输入密码后的面膜进行对比)
   SELECT * FROM testmd5 WHERE `name`='aha' AND pwd=MD5('123456');

数值函数:

abs(x) – 绝对值 abs(-10.9) = 10

format(x, d) – 格式化千分位数值 format(1234567.456, 2) = 1,234,567.46

ceil(x) – 向上取整 ceil(10.1) = 11

floor(x) – 向下取整 floor (10.1) = 10

round(x) – 四舍五入去整

mod(m, n) – m%n m mod n 求余 10%3=1

pi() – 获得圆周率

pow(m, n) – m^n

sqrt(x) – 算术平方根

rand() – 随机数

truncate(x, d) – 截取d位小数

时间日期函数:

– 时间日期函数

now(), current_timestamp(); – 当前日期时间

current_date(); – 当前日期

current_time(); – 当前时间

date(‘yyyy-mm-dd hh:ii:ss’); – 获取日期部分

time(‘yyyy-mm-dd hh:ii:ss’); – 获取时间部分

date_format(‘yyyy-mm-dd hh:ii:ss’, ‘%d %y %a %d %m %b %j’); – 格式化时间

unix_timestamp(); – 获得unix时间戳

from_unixtime(); – 从时间戳获得时间

字符串函数:

length(string) – string长度,字节

char_length(string) – string的字符个数

substring(str, position [,length]) – 从str的position开始,取length个字符

replace(str ,search_str ,replace_str) – 在str中用replace_str替换search_str

instr(string ,substring) – 返回substring首次在string中出现的位置

concat(string [,…]) – 连接字串

charset(str) – 返回字串字符集

lcase(string) – 转换成小写

left(string, length) – 从string2中的左边起取length个字符

load_file(file_name) – 从文件读取内容

locate(substring, string [,start_position]) – 同instr,但可指定开始位置

lpad(string, length, pad) – 重复用pad加在string开头,直到字串长度为length

ltrim(string) – 去除前端空格

repeat(string, count) – 重复count次

rpad(string, length, pad) --在str后用pad补充,直到长度为length

rtrim(string) – 去除后端空格

strcmp(string1 ,string2) – 逐字符比较两字串大小

聚合函数:

count()

sum();

max();

min();

avg();

group_concat()

其他常用函数:

md5();

default();

6.事务和索引

事务:将一组SQL语句放在同一批次内去执行,如果一个SQL语句出错,则该批次内所有的SQL都将被取消执行,MySQL事务数理只支持InnoDB和BDB数据表类型

事务的原则:

原子性:要么全部完成,要么全部不完成

一致性:事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少

隔离性:隔离状态执行事务,是它们好像是系统在给定时间内执行的唯一操作

持久性:在事务完成以后,该事务对数据库所作的更改便持久的保持在数据库之中,并不会被回滚

基本语法

-- 使用set语句来改变自动提交模式
SET autocommit = 0;   /*关闭*/
SET autocommit = 1;   /*开启*/
-- 注意:
--- 1.MySQL中默认是自动提交
--- 2.使用事务时应先关闭自动提交
-- 开始一个事务,标记事务的起始点
START TRANSACTION  
-- 提交一个事务给数据库
COMMIT
-- 将事务回滚,数据回到本次事务的初始状态
ROLLBACK
-- 还原MySQL数据库的自动提交
SET autocommit =1;
-- 保存点
SAVEPOINT 保存点名称 -- 设置一个事务保存点
ROLLBACK TO SAVEPOINT 保存点名称 -- 回滚到保存点
RELEASE SAVEPOINT 保存点名称 -- 删除保存点

测试:

A在线买一款价格为500元商品,网上银行转账.
A的银行卡余额为2000,然后给商家B支付500.
商家B一开始的银行卡余额为10000
//创建数据库shop和创建表account并插入2条数据
CREATE DATABASE `shop`CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `shop`;
CREATE TABLE `account` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(32) NOT NULL,
`cash` DECIMAL(9,2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO account (`name`,`cash`)
VALUES('A',2000.00),('B',10000.00)
//转账实现
SET autocommit = 0; //关闭自动提交
START TRANSACTION;  //开始一个事务,标记事务的起始点
UPDATE account SET cash=cash-500 WHERE `name` = `A`;
UPDATE account SET cash=cash+500 WHERE `name` = `B`;
COMMIT; //提交事务
SET autocommit = 1;  //恢复自动提交

索引

索引的作用:提高查询速度,确保数据的唯一性,可以加速表和表之间的连接,实现表与表之间的参照完整性,使用分组和排序子句进行数据检索时,可以显著减少分组和排序的时间,全文检索字段进行搜索优化

分类

主键索引,唯一索引,常规索引,全文索引

主键索引:某一个属性组能唯一标识一条记录,最常见的的索引类型,确保数据记录的唯一性

唯一索引:避免同一个表中某数据列中的值重复,主键索引只能由一个,唯一索引可能有多个

常规索引:快速定位特定数据,index和key关键词都可以设置常规索引

全文索引:快速定位特定数据

备份

– 导出 -w可携带备份条件

导出一张表 – mysqldump -uroot -p123456 school student >D:/a.sql mysqldump -u用户名 -p密码 库名 表名 > 文件名(D:/a.sql)导出多张表 – mysqldump -uroot -p123456 school student result >D:/a.sql mysqldump -u用户名 -p密码 库名 表1 表2 表3 > 文件名(D:/a.sql)导出所有表 – mysqldump -uroot -p123456 school >D:/a.sql mysqldump -u用户名 -p密码 库名 > 文件名(D:/a.sql)导出一个库 – mysqldump -uroot -p123456 -B school >D:/a.sql mysqldump -u用户名 -p密码 -B 库名 > 文件名(D:/a.sql)

(编辑:应用网_镇江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!