MySQI基本知识
- 数据库(Database,简称DB)
a) 概念;长期存放在计算机内,有组织,可共享的大量数据的集合,是一个数据“仓库”(数据库与数据仓库不同,数据仓库是进行数据分析、整理的,数据库是保存数据库的)
b) 作用;保存、管理数据 - 数据库类型
a) 关系型数据库(SQL)
i. MySQL , Oracle , SQL Server , SQLite , DB2
ii. 关系型数据库中的数据是以表的形式进行保存的,通过各个表之间建立的关系进行各个表之间的数据操作(数据存放在一个服务器中)
b) 非关系型数据库(NOSQL)
i. Redis , MongoDB
ii. 数据可以存放在各个服务器中,方便存放大量的数据,数据是独立存在的 - DBMS(数据库管理系统(Database Management System ))
a) 数据管理软件、科学组织和存在数据、高效第获取和维护数据 - MySQL简介(属于oracle公司的产品)
a) 概念;是现流行的开源、免费的关系型数据库
b) 特点
i. 免费、开源数据库
ii. 小巧、功能齐全
iii. 使用便捷
iv. 可运行于Windows或Linux操作系统
v. 可适用与中小型甚至是大型网站应用 - 配置MySQL环境
a) 文件夹中找到MySQL的bin文件中的mysql.exe文件的路径,复制
b) 在环境变量中找到系统变量path,在最前面加上路径在加上英文中的分号(原来的路径不能删除) - 数据库的操作(cmd中)
a) net start mysql ;开启数据库(mysql为MySQL数据库的名字)
b) net stop mysql ;停止数据库(mysql为MySQL数据库的名字)
c) mysql -uroot -pkgc;登录数据库(root为用户名,kgc为密码)
d) show databases; ;显示数据库
e) select version ();显示数据版本号
f) use mysql; ;使用数据库(mysql为数据库名)
g) show tables; ;查看数据库表
h) 帮助寻找命令;?加命令的关键字
i) exit;退出 - 卸载数据库
a) 卸载MySQL
b) 找到MySQL的安装的路径,删除MySQL文件
c) 在c盘子找到隐藏programDate文件,找到MySQL文件,删除
d) 搜索regedit,打开注册表,找到HKEY_LOCAL_MACHINE打开,找到SYSTEM,选择CorntrolSet和CurrentControlSet打开,选择services找到MySQL删除(前三步没有用的情况下进行第四步)
MySQL连接 - 连接数据库语句
a) mysql –h 服务器主机地址 –u 用户名 –p用户密码(服务器主机地址是IP或localhost(本机))
b) p后面不能添加空格 - SQL语句
a) 结构化查询语句分类
DDL
- 建库
a) 命令行操作数据库
b) 创建数据库
i. CREATE DATABASE [IF NOT EXISTS] 数据库名(带中括号的为可写可不写的内容,[IF NOT EXISTS]当不存存在新建数据库名时创建)
ii. 代码
#创建数据库
CREATE DATABASE IF NOT EXISTS school;
c) 删除数据库
i. DAOP DATABASE [IF EXISTS]数据库名([IF EXISTS]当存存在数据库时删除)
ii. 代码
#删除数据库
DROP DATABASE IF EXISTS school;
d) 查看数据库
i. SHOW DATAVASES;
e) 使用数据库
i. USE 数据库名
ii. 代码
#使用某个数据库
USE school;
- 注释
a) #加注释内容 - 数据库的字符集(就是编码格式)
- 数据库校对规则(就是字符比较的规则)
- 创建表
a) 语法
b) 反引号用于区别MySQL保留字与普通字符面引入的
c) 列为字段
d) 列与列之间用英文逗号隔开,列反正括号中,反引号可写可不写
e) 列类型
i. 约束列中存放的数据类型
ii. 列类型有;1.数值类型2.字符串类型3.日期和时间型数值类型4.null值 - 数值类型
- 字符串类型
存放数据为音频,视频等时可以用text进行保存也可以用通过存放路径,通过路径进查找相对应的数据 - 日期和时间型数值类型
- null值类型
a) 理解为“没用值”,或者是“未知值”
b) null不能进行算术运算,结果仍为null
f) 列属性
i. UNSIGNED - 无符号的
- 声明该数据列不允许负数
ii. ZEROFILL - 0填充的
- 不足为数的用0来填充,如(int3),5则为005
iii. AUTO_INCREMENT - 自动增长的,每添加以条数据,自动在一个记录数上加1
- 通常用于设置主键,且为整数类型
- 可定义起始值和步长(初始值默认为1,步长也为1)
- 设置步长和默认值
CREATE TABLE tabl1(
id INT(4) PRIMARY KEY AUTO_INCREMENT,
name
VARCHAR(20) NOT NULL
) AUTO_INCREMENT=100;#设置默认初始值为100,只影响当前表
SET @@auto_increment_increment=5;#设置步长为5,影响所有的表
iv. NULL 与NOT NULL - 默认为NULL ,即没有插入该列的数值
- 如果设置为NOT NULL,则该列必须有值
v. DEFAULT - 默认的
- 用于设置默认值(例如性别字段,默认为男,否则为女,若无指定该列的值,默认为男)
- 主键;
a) 唯一区分数据的记录的,主键不能重复,
b) 设置方法;PRIMARY KEY - 创建表的书写规范
a) create table if not exists 表名(
类名 类型 属性 ,
类名 类型 属性 ,
类名 类型 属性
)
b) 代码书写
CREATE TABLE IF NOT EXISTS student(#创建表的关键字眼student 为表名
id INT(4) PRIMARY KEY AUTO_INCREMENT COMMENT ‘主键’,#设置主键,默认id长度为4,每次递增,插入注释为主键
pwd VARCHAR(20)NOT NULL DEFAULT’123456’,#设置密码,默认为123456,长度为20
name
VARCHAR(20) DEFAULT’匿名’ NOT NULL,#设置姓名,长度为20,默认为匿名
sex VARCHAR(2) NOT NULL DEFAULT ‘女’#设置性别默认为女,长度为2
birthday DATETIME,#设置时间
address VARCHAR(100),#设置家庭住址长度为100
email VARCHAR(50)#设置email长度为50
) - 查看数据库的定义;SHOW CREATE DATABASE school;
- 查看数据表;SHOW CREATE TABLE student2;
- 显示表结构;DESC student2;
- int类型的数据在超过范围时会将数据改成为最大的数据范围
- 设置严格检查模式;SET sql_mode=‘strict_trans_tables’;
- 表的数据修改
a) 修改指定字段的属性
i. 代码
alter table 表名 modify 字段名 列属性;
alter table new_students modify address varchar(32) not null;
b) 修改字段名和字段属性
i. 代码
alter table 表名 change 旧字段名 新字段名 列属性 ; alter table new_students change address addr varchar(32) not null default’china’;
c) 删除字段
i. 代码
alter table 表名 drop 字段名;
alter table new_students drop addr;
d) show tables ;展示当前数据库中的所有的表
e)
MySQL数据管理
- 外键的作用(一个表中可以存在多个外键,但只能存在一个主键)
a) 创建外键
i. 建表时指定外键约束 - 在键立表的同时进行建立
- 代码
ii. 建表后修改 - 在建立表之后再通过修改表进行添加外键
b) 删除外键
i. 删除具有主外键关系的表时,要先删除子表在删除主表
c) 删除外键,删除表
d) 代码书写
CREATE TABLE role (#主表
roleid int (10) primary key auto_increment,
rolename varchar(32) not NULL
);
create tableuser
(#字表
userid int(10) primary key auto_increment,
username varchar(32) not null,
roleid int(10) not null,
constraint fk_roleid foreign key(roleid1) references role(roleid)#设置外键
);
(roleid1为建立外键的列名 roleid2为引用主键的列名) - 存在主键的为主表,存在外键的为子表或从表
- 数据库的意义
a) 数据存储
b) 数据管理 - 管理数据库数据的方法
a) 通过SQLyog的管理工具进行数据库数据管理
b) 通过DML语句管理数据库数据 - DML(数据操作语言)
a) 表在默认的情况下,类型是(存储引擎)是innoDB
b) 用于操作数据库对象中所包含的数据
c) 包括
i. INSERT(添加数据语句) - 添加数据语法
a) 字段或值之间用英文的逗号隔开
b) “字段1,字段2,……”该部分可省略,但添加的值务与表结构数据列顺序相对应,且数量一致(给表中所有的列进行添加值)
c) 可同时插入多条数据,values后用英文逗号隔开
d) 代码书写
#使用语句添加数据
INSERT INTO grade (gradename) VALUES(‘大一’);#指定插入行的数据
INSERT INTO grade VALUES(2,‘大二’);#插入每一行的数据
INSERT INTO grade (gradename) VALUES(‘大三’),(‘大四’);#添加多个数据
INSERT INTO student #同时添加多个对应的数据
VALUES (1002,‘zhangs2’,2,1,‘13911765003’,‘null’,NOW(),‘null’,‘36541298741002630’);
ii. UPDATE(更新数据语句) - 修改数据
a) column_name 为要更改的数据列
b) value为为修改后的数据,可以为变量,具体值、表达式或者嵌套的SELECT结果
c) condition为筛选条件,如不指定则修改表的所有列数据
d) 语法
e) WHERE中的运算符(有条件地从表中筛选数据)
f) 代码书写
#修改单个数据
UPDATE student SET address=‘china’#修改地址
WHERE studentno=‘1000’;#指定对象进行修改
#修改多个数据
UPDATE student SET address=‘china’,email =‘2442907@163.com’#修改地址和email
WHERE studentno=‘1002’;#指定对象进行修改
#条件可以使用运算符
UPDATE student SET sex=1#指定修改内容
WHERE studentno =1000 OR studentno=1002 OR studentno=10001 #指定修改的数据对象(or是或)
UPDATE student SET sex=2#指定修改内容
WHERE studentno >=1000 AND studentno<=10001 #指定修改的数据对象的范围(and是和)
#指定区间也可以用; WHERE studentno BETWEEN 1000 AND 10001进行修改
UPDATE student SET sex=1#指定修改内容
WHERE studentno BETWEEN 1000 AND 10001
#使用函数
UPDATE student SETstudentname=CONCAT(‘姓名:’,studentname)
iii. DELETE(删除数据语句) - condition为筛选条件,如不指定则删除该表的所有列数据
- 代码书写;
delete from grade where gradeid=12;#删除单行
- truncate命令会完全清空表数据,但标的结构、索引、约束等不会变
a) 语法书写 ;TRUNCATE TABLE tabl1;(table1为表名)
b) 清空表数据,效率要比delete高,同时也会清空auto_increment计数器
iv. 两者区别
a) 相同点;都能删除数据、不删除表结构,但truncate速度更快,不会产生历史记录
b) 不同点;使用truncate table重新设置auto_increment计数器,使用truncate table不会对事务有影响 - 表的类型
a) 表在默认的情况下是innoDB类型的(值放在内存中)
i. 在innoDB类型的表下,使用delete进行删除数据,重启数据库后,对数据的自增会重新开始计算
ii. 代码书写
#-------默认情况的存储引擎-------------------------
CREATE TABLE IF NOT EXISTS tab1(
id INT(4) PRIMARY KEY AUTO_INCREMENT,
coll VARCHAR(20) NOT NULL
)ENGINE=INNODB;
b) 表可以改变数据存储类型为myisam类型(值放在文件中)
i. 在myisam类型的表下,使用delete进行删除数据,重启数据库后,对数据的自增不会重新开始计算
ii. 代码书写
#-------myisam存储引擎----------------------------
CREATE TABLE IF NOT EXISTS tab2(
id INT(4) PRIMARY KEY AUTO_INCREMENT,
coll VARCHAR(20) NOT NULL
)ENGINE=MYISAM;
c)
DQL语句(Date Query Language数据查询语言)
-
DQL数据查询语言
a) 查询数据库数据,如select语句
b) 简单的表单查询或多表的复杂查询和嵌套查询
c) 数据库语言中最核心、最重要的语句
d) 使用频率最高的语句 -
select核心语法
a) select * from table_name;
b) select中的语法顺序不能改变 -
简单查询
a) 查询指定表的数据
i. select * from student;查询student的所有列信息(不推荐使用,因为*代码所有列,查询效率低)
ii. 查询指定的数据列;SELECT studentno,studentname FROM student;(查询student的学号和姓名)
iii. 查询指定列的数据,并且去除重复项;SELECT DISTINCT studentno FROM student;(关键字DISTINCT) -
默认情况下,查询结果为ALL(ALL可以不写);SELECT ALL studentno FROM student;
iv. 在查询中也能出现表达式 -
SELECT @@auto_increment_increment;#查询步长
-
SELECT VERSION();#查询版本号
-
SELECT 100*3-1;#查询运算结果
v. 使用表达式进行修改数据(没有保存的数据中,要保存要通过修改语句进行保存);SELECT studentno, studentResult+1 AS ‘提分后’ FROM result;
b) 取别名(关键字AS,也可以省略不写)
i. 为指定查询出来的数据取别名(列);SELECT studentno AS 学号,studentname AS 姓名 FROM student;(AS为关键字)
ii. 为指定查询出来的表取别名;SELECT studentno AS 学号,studentname AS 姓名 FROM student AS s;
iii. 为查询结果取别名;SELECT CONCAT(‘姓名;’,studentname)AS 新姓名 FROM student;(使查询数据更加美观) -
给表取别名是为了在查询多个表的时候更加方便的进行查询
-
当在查询不同表的时候遇到不同表中的列名时,通过表的别名可以点出来给别名表的列(多表连接查询的时候)
-
别名只是影响查询出来的结果,对表的原来数据不会进行改变
c) where条件查询语句
i. 语法要求
数据类型为数值才能使用算术运算符,相同的数据类型之间才能进行比较
ii. 满足条件不是指定数据时查询(也可以将!换成not,但not必须写在where之后)
SELECT studentno ,studentresult FROM result
WHERE studentno !=1000;
iii. 满足指定数据大小的查询;(也可将and换成&&进行查询)
SELECT studentno ,studentresult FROM result WHERE studentresult>=95 AND studentresult <=100;(也是模糊查询) -
模糊查询;使用比较运算符的大都是模糊查询(就只知道范围,不知道确切数据)
a) link模糊查询
i. 获取以某个字符开头的所有数据(关键字link,link通常与%和_进行搭配,或取以某个字符开头但后面有两个或以上的用_进行代替,即 ’李_ _ ’)
SELECT studentno,studentname FROM student
WHERE studentname LIKE’李%’;
ii. 获取以某个字符开头的但后面只有一个字符的所有数据
SELECT studentno,studentname FROM student
WHERE studentname LIKE’李’;
iii. 获取数据中包含某个字符的
SELECT studentno,studentname FROM student
WHERE studentname LIKE’%李%’;
iv. 获取含有特殊字符的数据(通过\进行转义)
SELECT studentno,studentname FROM student
WHERE studentname LIKE’%%%’;
v. 自定义转义符;通过ESCAPE关键字进行自定义
#定义自定义的转义符
SELECT studentno,studentname FROM student
WHERE studentname LIKE’%:%%’ ESCAPE ‘:’;
b) in模糊查询(在指定数据范围查询)
i. select StudentName from student where studentno in (1001,1002,1003);(获取指定范围内中的数据内容)
ii. 使用in进行查询的效率会更高,更加简洁
c) null查询
i. is null 查询(查询数据为null的)
SELECT studentno ,studentname FROM student
WHERE address is null;
ii. is not null查询(查询数据不为null的)
SELECT studentno ,studentname FROM student
WHERE address IS NOT NULL;
iii. 字符串与null是有区别的(字符串没有写是空字符串,不是null)
SELECT studentno ,studentname FROM student
WHERE loginpwd=’’;#查询字符串没有写的数据
d) 精确查询;(知道确切的数据)
#精确查询
SELECT studentno ,studentresult FROM result
WHERE studentno=1000; -
连接查询
a) 内连接(inner join);查找两个表中的结果的交集(两个表共同的数据)
i. 代码书写;select StudentName,GradeName from student INNER JOIN grade on student.GradeId=grade.GradeID; -
语法;查询关键字 要查询表的的列名 from 第一个表名 inner join 第二个表名 on主键=外键
ii. 等值和非等值连接查询 -
等值查询(只返回值相等的);
selectsubject
.SubjectName,grade.GradeName
from grade ,subject
where grade.GradeID=subject
.GradeID; -
非等值查询(返回所有的值);
select SubjectName ,GradeName FROM grade ,subject
iii. 自身连接查询(本表连接本表) -
自连接的数据来源于本身,书写代码时将本身看成两张一模一样的表进行连接
-
代码书写
SELECT a.categoryname AS ‘父栏目’, b.categoryname AS’子栏目’
FROM category AS a ,category AS b
WHERE a.categoryid =b.pid ;
b) 外连接(out join)
i. 左连接(left join);以左表作为基准,右表一一匹配,匹配不上的,返回左表记录,右表以null填充(不管右表中有没有,左表的数据都会显示出来)
SELECT StudentName,StudentResult
from student LEFT JOIN result on student.Studentno =result.StudentNo
where StudentResult is null;
ii. 右连接(right join);右连接的右边的表为右表,以右表作为基准,左表一一匹配,匹配不上的,返回右表记录,左表以null填充(不管右表中有没有,左表的数据都会显示出来)
SELECT StudentName,StudentResult
from student RIGHT JOIN result on student.Studentno =result.StudentNo ;
c) 三种连接的区别
d) 多表联查(如果还有更多的表,继续添加inner join便可)
SELECT st.studentno,studentname,subjectname,studentresult
FROM student st
INNER JOIN result rs
ON st.StudentNo
= rs.StudentNo#中间方与其余几张表有关系的表,必须在表连接完成后才能连接下一张表
INNER JOINsubject
sub
ON rs.SubjectNo = sub.SubjectNo; -
排序(order by 排序条件)
a) 排序关键字 order by,排序条件可以设置多个,第一个相同的情况下就走第二个排序条件
b) 排序默认是升序排序的(ASC)(不写默认就是ASC)
c) 排序降序是要手动进行设置的(DESC)
SELECT st.studentno,studentname,subjectname,studentresult
FROM student st
INNER JOIN result rs
ON st.StudentNo
= rs.StudentNo
INNER JOINsubject
sub
ON rs.SubjectNo = sub.SubjectNo
WHERE subjectname =‘数据库结构-1’
ORDER BY studentresult DESC ,studentno DESC; -
分页显示(指定一个页面中显示的内容)
a) 特点;能提高用户体验、能功提供查询和网络传输效率
b) 分页只能写在查询的最后面,并且只能写一次,要查看第几页就要limit 指定的起始和显示的条数
c) 分页也是通过下标来查找指定的起始行的
d) 起始行等于页数减一乘与显示的行数
limit (当前页码-1)*页容量,也容量
limit 5 offset 0 与limit 0 ,5是一样的
i. 代码
SELECT st.studentno,studentname,subjectname,studentresult
FROM student st
INNER JOIN result rs
ON st.StudentNo
= rs.StudentNo
INNER JOINsubject
sub
ON rs.SubjectNo = sub.SubjectNo
WHERE subjectname =‘数据库结构-1’
ORDER BY studentresult DESC
#limit 0,5;# 第一页#0为从那条数据开始(起始行,第一行下标为0,)5为要显示的数据条数
LIMIT 5,5;# 第二页()每次只能出现一页,要看第几页就要写limit
e) limit也可以用来进行筛选指定数量的数据内容 -
子查询
a) 什么是子查询
i. 在查询语句中的where条件子句中又嵌套了另一个查询语句
ii. 子查询顺序是由里到外的
iii. 外层的查询语句是父查询,里层的查询语句是子查询
iv. 当子查询返回的是一个值的时候外查询与子查询的的连接点可以用=号,但不是所有情况都是用=号的
#查询指定内容的数据(数据库-1) 的所有考试结果(学号,科目标号,成绩),并降序排序
SELECT studentno,subjectno ,StudentResult
FROM result WHERE subjectno= (SELECT subjectno FROMsubject
WHERE subjectname=‘数据库结构-1’)
ORDER BY StudentResult DESC;
b) 使用子查询时将要求细化,然后在进行一一查询
i. 连接查询和子查询套用
#------------------连接查询和子查询2--------------------
SELECT s.studentno,studentname FROM student s
INNER JOIN result r
ON s.studentno=r.StudentNo
WHERE StudentResult>80 AND subjectno=
(SELECT subjectno FROMsubject
WHERE subjectname=‘高等数学-1’);
ii. 多表子查询
将要求进行分步写出来,然后将数据要求进行填入
SELECT studentno ,studentname FROM student WHERE studentno IN(
SELECT studentno FROM result WHERE studentresult>80 AND
subjectno=(SELECT subjectno FROMsubject
WHERE subjectname=‘高等数学-1’))
c) 子查询是从里到外的且返回值一般是集合所以推荐使用in进行各个数据的筛选,从而提高效率 -
MySQL的函数
a) 这里说的MySQL函数指的是那些MySQL提供的函数,并不包括用户指定的函数
i. 数学函数 -
ABS()绝对值函数;ABS(8)8的决定值
-
CEILING( )大于等于本身的最小整数;ceiling(8.5)大于等于8.5的最小整数
-
FLOOR()小于等于本身的最大整数;FLOOR(8.5) 小于等于8.5的最大整数
-
RAND()生成随机数;(默认为0-1之间的数,可以设置种子,但设置相同种子后的随机数是固定的,)
-
SIGN()判断数据的符号;正数为1,负数为-1,0的返回值是0
ii. 字符串函数 -
CHAR_LENGTH();返回的是字符串的长度
-
concat();合并字符串
-
INSERT()替换字符串;(1代表替换的开始位置,3代表替换的字符长度,前面的字符串为原来的字符,后面为要替换的字符,如果替换的开始位置不存在则返回原字符串)
-
LOWER()替换成小写;
-
UPPER();替换成大写;
-
left();从左截取指定长度的字符串;
-
right()从右截取指定长度字符串
-
replace()指定替换的字符;(将某个字符替换成另一个字符)
-
substr();截取指定长度
-
REVERSE();反转内容
-
CURDATE();获取当前日期
-
NOW();获取时间和日期
b) 聚合函数
-
分组(group by )
a) 通过指定的分组条件进行分组
i. 书写代码
SELECT GradeName ,COUNT(StudentNo)
FROM grade ,student WHERE grade.GradeID =student.GradeId
GROUP BY grade.GradeID;
b) 分组后查询having;
i. 书写代码
SELECT SubjectName ,MAX(result.StudentResult),MIN(result.StudentResult),AVG(result.StudentResult)
FROMsubject
,result WHEREsubject
.SubjectNo=result.SubjectNo
GROUP BYsubject
.SubjectNo
HAVING AVG(result.StudentResult)>80;
MySQL事务
- 多个SQL语句一起执行(将多条SQL语句当成一条语句),称为事务
- 事务中,如果有一个语句出错,其余的语句都不会执行
- MySQL的事务处理功能只支持INNODB和BDB数据表类型,对MYZSAM不支持
- 事务的ACID原则
a) 原子性;一个事务中存在的多个SQL语句必须同时完成执行,不能单个完成执行
b) 一致性;事务保持在一个状态(提交前或者提交后,不允许存在其他状态)
c) 隔离性;每一个事务之间是互不影响的,独立存在的,(影响到了其他事务会被撤回)
d) 持久性;事务提交后的数据会永久保存,(要再次修改必须重新提交事务)
e) 关闭自动提交set AUTOCOMMIT=0;
f) 开启自动提交;SET ATUOCOMMIT=1;
g) MySQL默认情况下是自动提交的,在开心执行事务之前必须将自动提交进行关闭,在执行完成之后将自动提交在开启 - 事务的相关操作
a) 事务的声明;START TRANSACTION
b) 事务的提交;COMMIT
c) 事务的撤回(恢复);ROLLBACK
i. 事务的整体写法
#关闭自动提交
SET autocommit=0;
#事务开启
START TRANSACTION;
UPDATE account SET cash=cash-500 WHERE NAME=‘a’;#修改数据
UPDATE account SET cash=cash+500 WHERE NAME=‘b’;
COMMIT;#提交事务
ROLLBACK;#事务回滚
SET autocommit=1;#开启自动提交
事务的提交和事务的回滚不能同时使用,通过java的判断语句可以进行指定条件下的事务回滚 - 数据库的索引
a) 有了索引之后的数据能勾搭更加快速的的查询指定内容的数据
i. 主键索引(PRIMARY KEY)
- 主键索引与主键一样,且主键索引不允许存在空值,且不能重复(与主键的用法差不多)
ii. 唯一索引(UNIQUE)
- 唯一索引可以在一个表中添加多个,确保在每一次添加数据的时候都可以通过索引确保数据的唯一性(也可以用来查询但用唯一索引进行查询的情况不多)唯一索引允许存在空值
- 在使用主键进行查询的时候就运用的主键索引与唯一索引
iii. 常规索引(INDEX)
- 通过常规索引可以更加快速的提高查询效率,但也不推荐添加过多,因为在进行数据的修改,删除,插入的情况下会造成影响
- 在经常被当做查询条件的列推荐添加常规索引
iv. 全文索引(FULLTEXT)
- 只能用于myisam类型的数据表,且数据类型为文本类型的数据,在大型数据集的时候推荐使用
b) 索引的添加
CREATE TABLE test1(
id INT(4) PRIMARY KEY,#添加主键索引
testno VARCHAR (11) UNIQUE,#添加唯一索引
c VARCHAR(50),
d VARCHAR(20),
e TEXT,
f VARCHAR(50),
INDEXindex
(c,d),#在建立列之后进行添加常规索引,且可以添加多个列的索引
FULLTEXT (e)#在建立列之后进行添加索引,索引不命名
)ENGINE=MYISAM;#改变表的类型
ALTER TABLE test1 ADD INDEX(f);#在建立表之后进行修改添加索引 - 使用索引
a) EXPLAIN;解释SQL语句的运行过程
b) 在添加过索引之后,会自动进行使用索引查询,但全文索引不会
i. 全文索引里出现的关键字的出现率超过50%是无法生效的
#使用全文索引进行查找指定内容的数据
SELECT *FROM student WHERE MATCH (studentname) AGAINST(‘love’);
MATCH和AGAINST是关键字,不能改变 - 显示索引
a) SHOW INDEX FROM student; #显示指定表单索引 - 删除索引
a) DROP INDEX f_2 ON test1; 删除指定表下的指定索引
b) ALTER TABLE test1 DROP INDEX f; 删除指定表下的指定索引
c) ALTER TABLE test1 DROP INDEX PRIMARY KEY;#删除主键索引 - 索引的准则
- 数据库备份
a) mysqldump -h 主机名 -u 用户名 -p数据库名 >你要导出的位置 - 数据库的恢复
a) mysql -u 用户名 -p 要恢复的数据库名 <要导入的文件
- 查询指定表的所有的记录; select * from user\G;(不加\G是没用格式的,加上后有格式)
- 修改用户密码;update user set password=password( ’ 12340 ’ ) where user =’root’(修改user表中用户名是root的密码,)
- flush privileges;刷新用户权限
- now();函数,代表当前时间
a) 使用;NOW() - CONCAT( );函数,连接字符串(相当于java中的追加)
a) 使用;CONCAT(‘姓名:’,studentname) - 唯一的索引;UNIQUE INDEX;
a) 使用;UNIQUE INDEXIdentityCard
(IdentityCard
)(给IdentityCard这一行加索引,从而到的唯一的要求) - CHAR_LENGTH();返回的是字符串的长度
- concat();合并字符串
- INSERT()替换字符串;(1代表替换的开始位置,3代表替换的字符长度,前面的字符串为原来的字符,后面为要替换的字符,如果替换的开始位置不存在则返回原字符串)
- LOWER()替换成小写;
- UPPER();替换成大写;
- left();从左截取指定长度的字符串;
- right()从右截取指定长度字符串
- replace()指定替换的字符;(将某个字符替换成另一个字符)
- substr();截取指定长度
- REVERSE();反转内容
- CURDATE();获取当前日期
- NOW();获取时间和日期