MySQL

MySQI基本知识

  1. 数据库(Database,简称DB)
    a) 概念;长期存放在计算机内,有组织,可共享的大量数据的集合,是一个数据“仓库”(数据库与数据仓库不同,数据仓库是进行数据分析、整理的,数据库是保存数据库的)
    b) 作用;保存、管理数据
  2. 数据库类型
    a) 关系型数据库(SQL)
    i. MySQL , Oracle , SQL Server , SQLite , DB2
    ii. 关系型数据库中的数据是以表的形式进行保存的,通过各个表之间建立的关系进行各个表之间的数据操作(数据存放在一个服务器中)
    b) 非关系型数据库(NOSQL)
    i. Redis , MongoDB
    ii. 数据可以存放在各个服务器中,方便存放大量的数据,数据是独立存在的
  3. DBMS(数据库管理系统(Database Management System ))
    a) 数据管理软件、科学组织和存在数据、高效第获取和维护数据
  4. MySQL简介(属于oracle公司的产品)
    a) 概念;是现流行的开源、免费的关系型数据库
    b) 特点
    i. 免费、开源数据库
    ii. 小巧、功能齐全
    iii. 使用便捷
    iv. 可运行于Windows或Linux操作系统
    v. 可适用与中小型甚至是大型网站应用
  5. 配置MySQL环境
    a) 文件夹中找到MySQL的bin文件中的mysql.exe文件的路径,复制
    b) 在环境变量中找到系统变量path,在最前面加上路径在加上英文中的分号(原来的路径不能删除)
  6. 数据库的操作(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;退出
  7. 卸载数据库
    a) 卸载MySQL
    b) 找到MySQL的安装的路径,删除MySQL文件
    c) 在c盘子找到隐藏programDate文件,找到MySQL文件,删除
    d) 搜索regedit,打开注册表,找到HKEY_LOCAL_MACHINE打开,找到SYSTEM,选择CorntrolSet和CurrentControlSet打开,选择services找到MySQL删除(前三步没有用的情况下进行第四步)
    MySQL连接
  8. 连接数据库语句
    a) mysql –h 服务器主机地址 –u 用户名 –p用户密码(服务器主机地址是IP或localhost(本机))
    b) p后面不能添加空格
  9. SQL语句
    a) 结构化查询语句分类
    在这里插入图片描述


DDL

  1. 建库
    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;
    在这里插入图片描述
  2. 注释
    a) #加注释内容
  3. 数据库的字符集(就是编码格式)
  4. 数据库校对规则(就是字符比较的规则)
  5. 创建表
    a) 语法
    在这里插入图片描述
    b) 反引号用于区别MySQL保留字与普通字符面引入的
    c) 列为字段
    d) 列与列之间用英文逗号隔开,列反正括号中,反引号可写可不写
    e) 列类型
    i. 约束列中存放的数据类型
    ii. 列类型有;1.数值类型2.字符串类型3.日期和时间型数值类型4.null值
  6. 数值类型
    在这里插入图片描述
  7. 字符串类型
    在这里插入图片描述
    存放数据为音频,视频等时可以用text进行保存也可以用通过存放路径,通过路径进查找相对应的数据
  8. 日期和时间型数值类型
    在这里插入图片描述
  9. null值类型
    a) 理解为“没用值”,或者是“未知值”
    b) null不能进行算术运算,结果仍为null
    f) 列属性
    i. UNSIGNED
  10. 无符号的
  11. 声明该数据列不允许负数
    ii. ZEROFILL
  12. 0填充的
  13. 不足为数的用0来填充,如(int3),5则为005
    iii. AUTO_INCREMENT
  14. 自动增长的,每添加以条数据,自动在一个记录数上加1
  15. 通常用于设置主键,且为整数类型
  16. 可定义起始值和步长(初始值默认为1,步长也为1)
  17. 设置步长和默认值
    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
  18. 默认为NULL ,即没有插入该列的数值
  19. 如果设置为NOT NULL,则该列必须有值
    v. DEFAULT
  20. 默认的
  21. 用于设置默认值(例如性别字段,默认为男,否则为女,若无指定该列的值,默认为男)
  22. 主键;
    a) 唯一区分数据的记录的,主键不能重复,
    b) 设置方法;PRIMARY KEY
  23. 创建表的书写规范
    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
    )
  24. 查看数据库的定义;SHOW CREATE DATABASE school;
  25. 查看数据表;SHOW CREATE TABLE student2;
  26. 显示表结构;DESC student2;
  27. int类型的数据在超过范围时会将数据改成为最大的数据范围
  28. 设置严格检查模式;SET sql_mode=‘strict_trans_tables’;
  29. 表的数据修改
    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数据管理

  1. 外键的作用(一个表中可以存在多个外键,但只能存在一个主键)
    a) 创建外键
    i. 建表时指定外键约束
  2. 在键立表的同时进行建立
  3. 代码
    ii. 建表后修改
  4. 在建立表之后再通过修改表进行添加外键
    b) 删除外键
    i. 删除具有主外键关系的表时,要先删除子表在删除主表
    c) 删除外键,删除表
    d) 代码书写
    CREATE TABLE role (#主表
    roleid int (10) primary key auto_increment,
    rolename varchar(32) not NULL
    );
    create table user(#字表
    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为引用主键的列名)
  5. 存在主键的为主表,存在外键的为子表或从表
  6. 数据库的意义
    a) 数据存储
    b) 数据管理
  7. 管理数据库数据的方法
    a) 通过SQLyog的管理工具进行数据库数据管理
    b) 通过DML语句管理数据库数据
  8. DML(数据操作语言)
    a) 表在默认的情况下,类型是(存储引擎)是innoDB
    b) 用于操作数据库对象中所包含的数据
    c) 包括
    i. INSERT(添加数据语句)
  9. 添加数据语法
    在这里插入图片描述
    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(更新数据语句)
  10. 修改数据
    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(删除数据语句)
  11. condition为筛选条件,如不指定则删除该表的所有列数据
  12. 代码书写;
    delete from grade where gradeid=12;#删除单行
    在这里插入图片描述
  13. truncate命令会完全清空表数据,但标的结构、索引、约束等不会变
    a) 语法书写 ;TRUNCATE TABLE tabl1;(table1为表名)
    b) 清空表数据,效率要比delete高,同时也会清空auto_increment计数器
    在这里插入图片描述
    iv. 两者区别
    a) 相同点;都能删除数据、不删除表结构,但truncate速度更快,不会产生历史记录
    b) 不同点;使用truncate table重新设置auto_increment计数器,使用truncate table不会对事务有影响
  14. 表的类型
    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数据查询语言)

  1. DQL数据查询语言
    a) 查询数据库数据,如select语句
    b) 简单的表单查询或多表的复杂查询和嵌套查询
    c) 数据库语言中最核心、最重要的语句
    d) 使用频率最高的语句

  2. select核心语法
    a) select * from table_name;
    在这里插入图片描述
    b) select中的语法顺序不能改变

  3. 简单查询
    a) 查询指定表的数据
    i. select * from student;查询student的所有列信息(不推荐使用,因为*代码所有列,查询效率低)
    ii. 查询指定的数据列;SELECT studentno,studentname FROM student;(查询student的学号和姓名)
    iii. 查询指定列的数据,并且去除重复项;SELECT DISTINCT studentno FROM student;(关键字DISTINCT)

  4. 默认情况下,查询结果为ALL(ALL可以不写);SELECT ALL studentno FROM student;
    iv. 在查询中也能出现表达式

  5. SELECT @@auto_increment_increment;#查询步长

  6. SELECT VERSION();#查询版本号

  7. 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;(使查询数据更加美观)

  8. 给表取别名是为了在查询多个表的时候更加方便的进行查询

  9. 当在查询不同表的时候遇到不同表中的列名时,通过表的别名可以点出来给别名表的列(多表连接查询的时候)

  10. 别名只是影响查询出来的结果,对表的原来数据不会进行改变
    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;(也是模糊查询)

  11. 模糊查询;使用比较运算符的大都是模糊查询(就只知道范围,不知道确切数据)
    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;

  12. 连接查询
    a) 内连接(inner join);查找两个表中的结果的交集(两个表共同的数据)
    i. 代码书写;select StudentName,GradeName from student INNER JOIN grade on student.GradeId=grade.GradeID;

  13. 语法;查询关键字 要查询表的的列名 from 第一个表名 inner join 第二个表名 on主键=外键
    ii. 等值和非等值连接查询

  14. 等值查询(只返回值相等的);
    selectsubject.SubjectName,grade.GradeName
    from grade ,subject where grade.GradeID=subject.GradeID;

  15. 非等值查询(返回所有的值);
    select SubjectName ,GradeName FROM grade ,subject
    iii. 自身连接查询(本表连接本表)

  16. 自连接的数据来源于本身,书写代码时将本身看成两张一模一样的表进行连接

  17. 代码书写
    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 JOIN subject sub
    ON rs.SubjectNo = sub.SubjectNo;

  18. 排序(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 JOIN subject sub
    ON rs.SubjectNo = sub.SubjectNo
    WHERE subjectname =‘数据库结构-1’
    ORDER BY studentresult DESC ,studentno DESC;

  19. 分页显示(指定一个页面中显示的内容)
    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 JOIN subject 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也可以用来进行筛选指定数量的数据内容

  20. 子查询
    a) 什么是子查询
    i. 在查询语句中的where条件子句中又嵌套了另一个查询语句
    ii. 子查询顺序是由里到外的
    iii. 外层的查询语句是父查询,里层的查询语句是子查询
    在这里插入图片描述
    iv. 当子查询返回的是一个值的时候外查询与子查询的的连接点可以用=号,但不是所有情况都是用=号的
    #查询指定内容的数据(数据库-1) 的所有考试结果(学号,科目标号,成绩),并降序排序
    SELECT studentno,subjectno ,StudentResult
    FROM result WHERE subjectno= (SELECT subjectno FROM subject
    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 FROM subject WHERE subjectname=‘高等数学-1’);
    ii. 多表子查询
    将要求进行分步写出来,然后将数据要求进行填入
    SELECT studentno ,studentname FROM student WHERE studentno IN(
    SELECT studentno FROM result WHERE studentresult>80 AND
    subjectno=(SELECT subjectno FROM subject WHERE subjectname=‘高等数学-1’)

    )
    c) 子查询是从里到外的且返回值一般是集合所以推荐使用in进行各个数据的筛选,从而提高效率

  21. MySQL的函数
    在这里插入图片描述
    a) 这里说的MySQL函数指的是那些MySQL提供的函数,并不包括用户指定的函数
    i. 数学函数

  22. ABS()绝对值函数;ABS(8)8的决定值

  23. CEILING( )大于等于本身的最小整数;ceiling(8.5)大于等于8.5的最小整数

  24. FLOOR()小于等于本身的最大整数;FLOOR(8.5) 小于等于8.5的最大整数

  25. RAND()生成随机数;(默认为0-1之间的数,可以设置种子,但设置相同种子后的随机数是固定的,)

  26. SIGN()判断数据的符号;正数为1,负数为-1,0的返回值是0
    ii. 字符串函数

  27. CHAR_LENGTH();返回的是字符串的长度

  28. concat();合并字符串

  29. INSERT()替换字符串;(1代表替换的开始位置,3代表替换的字符长度,前面的字符串为原来的字符,后面为要替换的字符,如果替换的开始位置不存在则返回原字符串)

  30. LOWER()替换成小写;

  31. UPPER();替换成大写;

  32. left();从左截取指定长度的字符串;

  33. right()从右截取指定长度字符串

  34. replace()指定替换的字符;(将某个字符替换成另一个字符)

  35. substr();截取指定长度

  36. REVERSE();反转内容

  37. CURDATE();获取当前日期

  38. NOW();获取时间和日期
    b) 聚合函数
    在这里插入图片描述

  39. 分组(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)
    FROM subject,result WHERE subject.SubjectNo=result.SubjectNo
    GROUP BY subject.SubjectNo
    HAVING AVG(result.StudentResult)>80;



MySQL事务

  1. 多个SQL语句一起执行(将多条SQL语句当成一条语句),称为事务
  2. 事务中,如果有一个语句出错,其余的语句都不会执行
  3. MySQL的事务处理功能只支持INNODB和BDB数据表类型,对MYZSAM不支持
    在这里插入图片描述
  4. 事务的ACID原则
    a) 原子性;一个事务中存在的多个SQL语句必须同时完成执行,不能单个完成执行
    b) 一致性;事务保持在一个状态(提交前或者提交后,不允许存在其他状态)
    c) 隔离性;每一个事务之间是互不影响的,独立存在的,(影响到了其他事务会被撤回)
    d) 持久性;事务提交后的数据会永久保存,(要再次修改必须重新提交事务)
    在这里插入图片描述
    e) 关闭自动提交set AUTOCOMMIT=0;
    f) 开启自动提交;SET ATUOCOMMIT=1;
    g) MySQL默认情况下是自动提交的,在开心执行事务之前必须将自动提交进行关闭,在执行完成之后将自动提交在开启
  5. 事务的相关操作
    在这里插入图片描述
    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的判断语句可以进行指定条件下的事务回滚
  6. 数据库的索引
    在这里插入图片描述
    a) 有了索引之后的数据能勾搭更加快速的的查询指定内容的数据
    i. 主键索引(PRIMARY KEY)
    在这里插入图片描述
  7. 主键索引与主键一样,且主键索引不允许存在空值,且不能重复(与主键的用法差不多)
    ii. 唯一索引(UNIQUE)
    在这里插入图片描述
  8. 唯一索引可以在一个表中添加多个,确保在每一次添加数据的时候都可以通过索引确保数据的唯一性(也可以用来查询但用唯一索引进行查询的情况不多)唯一索引允许存在空值
  9. 在使用主键进行查询的时候就运用的主键索引与唯一索引
    iii. 常规索引(INDEX)
    在这里插入图片描述
  10. 通过常规索引可以更加快速的提高查询效率,但也不推荐添加过多,因为在进行数据的修改,删除,插入的情况下会造成影响
  11. 在经常被当做查询条件的列推荐添加常规索引
    iv. 全文索引(FULLTEXT)
    在这里插入图片描述
  12. 只能用于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),
    INDEX index (c,d),#在建立列之后进行添加常规索引,且可以添加多个列的索引
    FULLTEXT (e)#在建立列之后进行添加索引,索引不命名
    )ENGINE=MYISAM;#改变表的类型
    ALTER TABLE test1 ADD INDEX(f);#在建立表之后进行修改添加索引
  13. 使用索引
    a) EXPLAIN;解释SQL语句的运行过程
    b) 在添加过索引之后,会自动进行使用索引查询,但全文索引不会
    i. 全文索引里出现的关键字的出现率超过50%是无法生效的
    #使用全文索引进行查找指定内容的数据
    SELECT *FROM student WHERE MATCH (studentname) AGAINST(‘love’);
    MATCH和AGAINST是关键字,不能改变
  14. 显示索引
    a) SHOW INDEX FROM student; #显示指定表单索引
  15. 删除索引
    a) DROP INDEX f_2 ON test1; 删除指定表下的指定索引
    b) ALTER TABLE test1 DROP INDEX f; 删除指定表下的指定索引
    c) ALTER TABLE test1 DROP INDEX PRIMARY KEY;#删除主键索引
  16. 索引的准则
    在这里插入图片描述
  17. 数据库备份
    a) mysqldump -h 主机名 -u 用户名 -p数据库名 >你要导出的位置
  18. 数据库的恢复
    a) mysql -u 用户名 -p 要恢复的数据库名 <要导入的文件


  1. 查询指定表的所有的记录; select * from user\G;(不加\G是没用格式的,加上后有格式)
  2. 修改用户密码;update user set password=password( ’ 12340 ’ ) where user =’root’(修改user表中用户名是root的密码,)
  3. flush privileges;刷新用户权限
  4. now();函数,代表当前时间
    a) 使用;NOW()
  5. CONCAT( );函数,连接字符串(相当于java中的追加)
    a) 使用;CONCAT(‘姓名:’,studentname)
  6. 唯一的索引;UNIQUE INDEX;
    a) 使用;UNIQUE INDEX IdentityCard(IdentityCard)(给IdentityCard这一行加索引,从而到的唯一的要求)
  7. CHAR_LENGTH();返回的是字符串的长度
  8. concat();合并字符串
  9. INSERT()替换字符串;(1代表替换的开始位置,3代表替换的字符长度,前面的字符串为原来的字符,后面为要替换的字符,如果替换的开始位置不存在则返回原字符串)
  10. LOWER()替换成小写;
  11. UPPER();替换成大写;
  12. left();从左截取指定长度的字符串;
  13. right()从右截取指定长度字符串
  14. replace()指定替换的字符;(将某个字符替换成另一个字符)
  15. substr();截取指定长度
  16. REVERSE();反转内容
  17. CURDATE();获取当前日期
  18. NOW();获取时间和日期
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值