MySQL_3复杂语句

七、外键(有主从关系的表,删除数据时先删主表再删从表;插入数据时先插主表再插从表)
  1、添加外键约束
    alter table 需要建立外键的表B add [constraint 外键名字] foreign key(需要建立外键的字段名B.Aid) references 主键表A(主键字段名A.ids);
    ALTER TABLE student ADD CONSTRAINT fk_GradeID FOREIGN KEY(GradeID) REFERENCES grade(GradeID);
  2、删除外键
    ALTER TABLE student DROP foreign key FK_studentNo;
    ALTER TABLE student DROP index FK_studentNo;
八、子查询
  1、in和not in获取多条记录
    SELECT * FROM subject WHERE classHour IN(100,110,120);
  2、exists和not exists判断是否存在记录
  3、in和exists
    区别:如果内表比外表数据多,使用exists();如果外表比内表数据多,使用in()
    原因:in()是在内存里遍历比较,内存比较快;而exists需要查询数据库,查询数据库消耗的性能高
  4、is null和is not null判断是否为空
    SELECT* FROM student WHERE address="" OR address IS NULL;
  5、from后嵌套子查询,必须起别名
    SELECT * FROM (SELECT studentName,phone,sex FROM student)stu;
  6、连接查询
   (1)内连接:取交集inner join
   (2)外连接:
     #左连接:以左表为主left jon
     #右连接:以右表为主right join
   (3)自连接:将一张表看成多张表来做连接。例:职员信息表,查询表中的每个职员的上司
     SELECT c.a_name,p.a_name FROM employees p INNER JOIN employees c ON p.a_id=c.p_id;
九、事务
  1、四个特性
    原子性:要么全部成功,要么全部失败
    一致性:确保事务提交前后的状态
    隔离性:每个事务彼此独立,互不影响
    持久性:事务一旦提交,数据被永远修改并保留
  2、步骤
    关闭自动提交:set autocommit=0;    #0关闭,1开启
    开启事务:start/begin transaction;
    执行sql语句:
    提交:commit
    回滚:rollback
    开启自动提交:set autocommit=1;
十、视图(主要用于查询)
  1、创建视图
    CREATE VIEW 视图名 AS(select语句,字段不能重复)
  2、删除视图
    DROP VIEW [IF EXISTS] 视图名称
  3、查询视图
    SELECT * FROM 视图名称 [WHERE]
十一、索引
  1、索引的作用:提高数据库的检索速度,改善数据库性能
  2、索引的分类
    #唯一索引:不允许有重复的键值,它的列允许有空值
    #主键索引:是唯一索引的特殊类型,他的每个值是非空,唯一
    #复合索引:将多个列组合作为索引
    #全文索引:用于在大量文本文字中搜索字符串,它的效率大大高于sql的like关键字的效率
    #空间索引:
    #普通索引:只为那些最常出现在查询条件(where)或排序条件(order by)的数据列创建索引,它的列允许插入重复值和空值
  3、索引增删改查
   (1)显示索引
      SHOW INDEX FROM test;
   (2)添加索引
      ALTER TABLE 表名 ADD PRIMARY KEY(字段名);   #主键
      ALTER TABLE 表名 ADD UNIQUE KEY(字段名);   #唯一键
      ALTER TABLE 表名 ADD INDEX 索引名(字段1,字段2);    #复合(常规)索引
      ALTER TABLE 表名 ADD FULLTEXT(字段名);   #全文索引,数据库引擎需为MYISAM
      CREATE INDEX 索引名 ON 表名(字段1,字段2);   #复合(常规)索引
      CREATE TABLE news(
        id INT(4) PRIMARY KEY,   #主键索引
        tilte VARCHAR(10) UNIQUE,    #唯一索引
        c VARCHAR(50),
        D VARCHAR(20),
        E TEXT,
        #UNIQUE key(tilte)
        INDEX index_c(c,d),     #常规索引
        FULLTEXT(e)   #全文索引
      )ENGINE=MYISAM
   (3)删除索引
      DROP INDEX 索引名 ON 表名;
      ALTER TABLE 表名 DROP INDEX 索引名;
   (4)删除主键索引
      ALTER TABLE 表名 DROP PRIMARY KEY;
   (5)查询全文索引
      SELECT * FROM 表名 WHERE MATCH(title,content) AGAINST (‘查询字符串’);
十二、分类
  1、数据库分类
    关系型数据库(sql)
     Mysql   oracle  sqlserver  sqlite  DB2
    非关系型数据库(NoSql)
     Redis  MongoDB
  2、数据库系统的分类
    数据库管理系统(DBMS)
    数据库系统(DBS)
    数据库管理员(DBA)
  3、结构化查询分类
    DDL(数据定义语言):定义和管理数据对象,例:数据库,数据表。
    DML(数据操作语言):insert update delete
    DQL(数据查询语言):select
    DCL(数据控制语言):grant commit rollback
  4、给表字段单独设置字符集:CHARACTER SET utf8
    给表单独设置字符集:CHARSET=utf8
    设置表类型:ENGINE=INNODB
    设置步长:auto_increment=5
十三、存储过程
十四、数据库恢复和备份
  方式一,使用工具
  方式二,mysql命令
   备份:mysqldump -uroot -p123456 数据库名[表名1][表名2]…>路径
   恢复:
     1、mysql -uroot -p123456 数据库名>路径
     2、mysql -uroot -p123456
       [use school]
       source 路径
  方式三,使用sql语句
   备份
     SELECT studentNo,studentName INTO OUTFILE ‘d:/ss.sql’ FROM student
   恢复
     CREATE TABLE stutab(id INT(4),sname VARCHAR(20));
     LOAD DATA INFILE ‘d:/ss.sql’ INTO TABLE stutab(id,sname);
十五、权限控制
  1、创建普通用户
    create user ‘创建的用户名’ @‘localhost’ [identified by ‘密码’];
    GRANT ALL ON bankDB.* TO ‘bankMaster’ @‘localhost’;
  2、方式二,创建用户同时授权
    GRANT ALL ON bankDB.* TO ‘bankMaster’@‘localhost’ IDENTIFIED BY ‘123456’
    GRANT INSERT,SELECT ON Myschool.stutab TO ‘bankMaster’@‘localhost’ IDENTIFIED
  3、删除用户
    DROP USER ‘bankMaster’@‘localhost’
  4、修改当前登录密码
    SET PASSWORD=PASSWORD(‘0000’);
  5、修改其他用户的密码
    SET PASSWORD FOR ‘bankMaster’@‘localhost’=PASSWORD(‘8888’);

猜你喜欢

转载自blog.csdn.net/weixin_43779785/article/details/88100494
今日推荐