首页 > 数据库技术 > 详细

mysql - 所有笔记

时间:2019-03-19 14:30:45      阅读:137      评论:0      收藏:0      [点我收藏+]
注:
凡是带select 的不会修改表中的数据 只是将数据列出来

在数据中查询null 不能用等号 要用 xx is null 

如果null  参与计算 那么返回的只会是 null



查询一个字段:
    select name from class;
查询多个字段:(逗号隔开)
    select name,name,name from class;
//name:查询的字段  class:查询的表名
计算:
    select name,age*10 from class;
    select name,age*10 size from class;

带有条件的查询:

等于:= ; 不等于:<>/!=; 

between ..and.. :两个值之间 

is null :为null(is not null不为空)

并且: and;     

或者: or; 
(and和or同时存在and优先级高 解决优先级问题可以加 ()括号) 

in: 包含,相当于多个 or (not in :不在这个范围中)

not : not可以非取,主要用在 is 或者 in 中 

模糊查找:like

like %p% : 百分号是一个占位符 意思是从 0 到 n 个任意字符
    //like p% 以p 开始的     like%p 以p结尾的    

like _p% : 下划线代表任意一个字符
    //__p% 第二个字母为p 的字符     %p_ 倒数第二个字母为p的字符


    select name,age from class where age = 15;
    //找到age 为 15 的数据

    select name,age from class where age between 15 and 20;
    //找到age 为 1520 的数据
    //注: between 中 第一个数字 必须 小于 第二个数字


排序(默认升序):
排序采用 order by 子句 ,order by 后面跟上排序字段 多个用逗号隔开
如果where子句存在 那么 order by 必须排在 whrer 语句的后面

    select users.sal from emp order by sal asc; //asc  升序
        //users里面的sal
    select users.sal from emp order by sal desc;//desc 降序    

    select * from emp order by sal asc;(所有的)
如果前面相等 后面 的按照ename 的降序排序
    select users.sal from emp order by sal asc, ename desc; //asc  降序



数据处理函数/单行处理函数
    lower :  转换小写
select lower(ename) as ename from emp;
          //as xx 重命名

    upper :  转换大写
select upper(要转换的列名称) as  from 要转换的列名称 要转换的表名称;    

    substr : 截取字符串
select substr(被截取的字符串.起始下标.截取长度) from emp;

    length : 取长度
select length(ename) from emp;

    trim : 去除前后空白
select ename from emp where enmae = trim(  zs  );

    round : 四舍五入 (两个参数 : 要四舍五入的数字 , 四舍五入的位数)
select round(123.456,1); //结果: 123.5

    rand : 生成随机数
select rand();
    生成100以内的数字
        select round(rand()*100);

    ifnull : 可以将null转换成一个值 (空值处理函数)
select ename.ifnull(comm,0) as comm from emp;
    //把comm为空的 设置为 0 并且 将 表名称 改为 comm

//年薪
    select ename.(sal + ifnull(comm,0)) * 12 as yearsal from emp;
            月薪+补助





查看版本号:select version();

查看表的创建语句: show create table users;




str_to_date(日期字符串,日期格式)

str_to_date 函数通常使用在插入操作中, 字段是date类型,不接受字符串varchar类型,
需要通过该函数将varchar变成date在出入数据,才能成功

%Y    年
%m    月
%d    日
%H    时
%i    分
%s    秒

MYSQL默认的日期格式 : %y-%m-%d;
select ename,hiredate from emp where hiredate = 1981-12-17;

调整格式:
select ename,hiredate from emp where hiredate = str_to_date( 1981-12-17,%Y-%m-%d);

//查询1981-12-17 入职的人



date_format(时期类型数据,日期格式)
    
data_format// 将日期类型data转成特定的日期字符串varchar

select ename,date_format(hiredate,%m-%d-%y) as hiredate from emp;



分组函数:
    分组函数不能直接使用 where 语句中    

sum(); //求和  (自动忽略 null(空值))
    select sum(age) from class;z


max(); //最大值 (自动忽略 null(空值))
    select max(age) from class;

    
min(); //最小值 (自动忽略 null(空值))
    select min(age) from class;


avg(); //平均值 (自动忽略 null(空值))
    select avg(age) from class;


count(); //统计数据 在这个字段(age)中 数据不为空的总和 (自动忽略 null(空值))
    select count(age) from class;


count(*);//满足这个条件的 记录总和 (个数)
    select count(*) from class where age is null;


distinct //查询结果中 去除重复记录 ( 只能出现所有字段的最前方 ) 
    select distinct age from class;




having : 
    havingwhere 功能都是为了完成数据的过滤
    havingwhere 后面都是添加条件
    wheregroup by 之前完成过滤
    havinggroup by 之后完成过滤


分组查询:
    order by : 表示通过哪个或者哪些字段进行 排序
 
    group by : 表示通过哪个或者哪些字段进行 分组
        //分组的第一列会进行排序 (从小到大,从a-b)
        //如果有where 在 group by 之前 就会无法执行
    
select   
    job,avg(m)   job列,age(m) m的平均值
from             
    class 
group by          写在后面
    job
having             
     avg(m) > 1500;



一个完整的 DQL 语句总结:

以下关键词顺序不能换:

    select
        ...
    from 
        ...
    where
        ...
    group by 
        ...
    having
        ...
    order by 
        ...

执行顺序:
    1.from        从某张表中检索数据
    2.where        经过某条件进行过滤
    3.group by     然后分组
    4.having    分组后如果不够继续过滤
    5.select    查询出来
    6.order by    排序输出



连接查询:
    查询数据的时候都只是从一张表中检索数据,被称为单表查询
    
    在实际开发中,数据并不是储存在一张表中的,实在多张表中
    
    这些表 和 表 之间存在关系, 我们要检索数据的时候需要将
    
    多张表联合起来取得有效数据,这种夺标查询被称为
                        连接查询 或 跨表查询


SQL92语法: 内连接中的等值连接
    select e.ename,d.dname from emp e, dept d where e.deptno = d.deptno;//后面可以继续加 and..
        (要查询表内数据的名字)  (要查询的表)    (过滤条件)
        
        //过滤条件是 :两个表中都有对应的 相同 序号 而且 一一相对

    //在跨表查询的时候 给 表内的数据名起个特殊的名字 : e.enmae , d.dname , c.cxxx;

SQL99语法: 内连接中的 等值连接 (用的多)

优点: 表连接独立出来了 , 结构更清晰  如果还需条件的话还可以继续 where 进行过滤

两种写法都一样:

完整写法 :  select e.ename,d.dname from emp e inner join dept d on e.deptno = d.deptno;

     分解: select a.表一中某一列名字,b.表二某一列名字 from 表一名字 a inner join 表二名字 b on 过滤项
    
inner可省略 : select e.ename,d.dname from emp e join dept d on e.deptno = d.deptno;//可以继续 where...
                        //on是表连接的条件




select name,age from class1 name having age <20;

select name,age from class1 name having age <20;



查询一个班级的总人数:
    可以通过 sex(性别) 来查询

1 = 男 , 2 = 女;

mysql> select sex,count(*) as people from class1;
+------+--------+
| sex  | people |
+------+--------+
| 1    |      6 |
+------+--------+



多张表进行连接的语法格式:

select 
    xxx
from
    a
join
    b
on
    条件
join
    c
on
    条件;

原理:
    a 先和 join b 进行连接 结束后 a 在和 c 进行连接

select a.xx,b.xx,c.xx from class a join class b on a.d = b.d join class c on xx between xxx and xxx




update:


如果我们需要修改或更新 MySQL 中的数据,我们可以使用 SQL UPDATE 命令来操作:

语法: 
    UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]

update table(表格名字) set field1(列名) = new value1(当前列的新内容) where(后面判断) peo = 1;




update 语句可用来修改表中的数据, 简单来说基本的使用形式为:

update 表名称 set 列名称=新值 where 更新条件;



union:

操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];

参数:

    expression1, expression2, ... expression_n: 要检索的列。

    tables: 要检索的数据表。

    WHERE conditions: 可选, 检索条件。

    DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。

    ALL: 可选,返回所有结果集,包含重复数据。





with rollup :

    WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)。

mysql> SELECT name, SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;
+--------+--------------+
| name   | singin_count |
+--------+--------------+
| 小丽 |            2 |
| 小明 |            7 |
| 小王 |            7 |
| NULL |           16 |


其中记录 NULL 表示所有人的登录次数。

我们可以使用 coalesce 来设置一个可以取代 NUll 的名称,coalesce 语法:


select coalesce(a,b,c);

参数说明:如果a==null,则选择b;如果b==null,则选择c;如果a!=null,则选择a;如果a b c 都为null ,则返回为null(没意义)


mysql> SELECT coalesce(name, 总数), SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;
+--------------------------+--------------+
| coalesce(name, 总数) | singin_count |
+--------------------------+--------------+
| 小丽                   |            2 |
| 小明                   |            7 |
| 小王                   |            7 |
| 总数                   |           16 |





left join:

    会将查询列中 左边的 所有项显示 即使 没有对应的 值(如果没有对应的值的话会显示 nullright join :

    会将查询列中 右边的 所有项显示 即使 没有对应的 值(如果没有对应的值的话会显示 null)

mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a RIGHT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
+-------------+-----------------+----------------+
| a.runoob_id | a.runoob_author | b.runoob_count |
+-------------+-----------------+----------------+
| 1           | 菜鸟教程    | 10             |
| 2           | 菜鸟教程    | 10             |
| 3           | RUNOOB.COM      | 20             |
| 4           | RUNOOB.COM      | 20             |
| NULL        | NULL            | 22             |
+-------------+-----------------+----------------+
    





事务:

    begin 开始一个事务


    rollback 事务回滚


    commit 事务确认




alter :
    
修改默认值:
     ALTER TABLE testalter_tbl(表名) ALTER i(表列名) SET DEFAULT(设置默认值) 1000;
    
删除字段默认值:
     ALTER TABLE testalter_tbl(表名) ALTER i(表列名) DROP(删除) DEFAULT(删除表中 i 的 deffault 这一项 (设置完后会 null)

修改表名:
     ALTER TABLE testalter_tbl RENAME TO alter_tbl;


alter其他用途:

修改存储引擎:修改为myisam

alter table tableName engine=myisam;

删除外键约束:keyName是外键别名

alter table tableName drop foreign key keyName;

修改字段的相对位置:这里name1为想要修改的字段,type1为该字段原来类型,first和after二选一,这应该显而易见,first放在第一位,after放在name2字段后面

alter table tableName modify name1 type1 first|after name2;








子查询:
    子查询就是 select嵌套select

子查询:(where 后面 使用子查询)
select ename,sal from emp where sal > (select avg(sal) from emp)


子查询:(from 后面 使用子查询)  技巧: 将查询结果当做临时表

select 
    t.deptno,t.avgsal,s.grade
from 
    (select deptno,avg(sal) as avgsal from enp group by deptno) t   //当做临时表t 
join
    salgrade s
on
    t.avgsal between s.losal and s.hisal;








limit:
    1.limit 用来获取一张表中的部分数据
    
    2.limit 只能在mysql数据库中存在

语法: limit 起始下标,要获取的长度
    默认从零开始 , 零表示 表中的 第一条记录 

示:
找出员工表中的前五条数据:
    select ename from emp limit 5;  等同  select ename from emp limit 0,5;

    5表示从表中记录下标0开始,取五条 


找出年龄最大的3个人:
    select name,age  from class1 order by age  desc limit 5;
+------+------+
| name | age  |
+------+------+
| dy   | 30   |
| vc   | 25   |
| bb   | 20   |
| aa   | 17   |
| ls   | 14   |
+------+------+



mysql 中通用的分页(只适合于Mysql数据库管理系统)

select 
    t.*  // t 表中的全部
from         
    t    // t 表
order by
    t.x sal/desc //t 表中的某一个字段 升序/降序
limit
    (pageNo - 1) *  pageSize,pageSize;


解析:
每一页显示三条数据
    起始下标,获取的长度

第一页: 0,3
第二页: 3,3
第三页: 6,3
第四页: 9,3
...





约束(constraint):    约束是对表中的数据的限制条件

约束语句:
    非空约束    not null
    唯一性约束    unique
    主键约束    primary key    简称:pk
    外键约束    foreign key    简称:fk
    检查约束    目前Mysql不支持,oracle数据库支持



一.非空约束:
    not null 约束字段,不能为Null值,必须给定具体的数据
    

示:     创建表,给字段添加非空约束(创建用户表,用户名不能为空)
    
    drop table if exists t_user;    //如果没有 t_user 这个表就删除 如果有就 不删除
    
    create table t_user(
        id int(10),
        name varchar(32) not null,//限制不能为空
        email varchar(128)    
    );

    insert into t_user(id,name,email) values (1,jack,111@qq.com);

        如果这里 name为空的话 会报错 (not null的限制)



二.唯一性约束    
    unique 约束的字段具有唯一性,不可重复
    
示:    创建用户,保证邮箱唯一
     列级约束:    
    drop table if exists t_user;
    create table t_user(
        id int(10),
        name varchar(32) not null,
        email varchar(128) unique     //email 这个字段中的内容 不能有重复的
    );
    insert into t_user(id,name,email) values (1,jack,jack@qq.com);
                        当email重复时就会无法执行(会报错)
    insert into t_user(id,name,email) values (2,zs,jack@qq.com);



示:
     表级约束:
    drop table if exists t_user;
    create table t_user(
        id int(10),
        name varchar(32) not null,
        email varchar(128),
        unique(email)    //单独分离出来
    );

    //使用表级约束给多个字段联合添加约束
    drop table if exists t_user;
    create table t_user(
        id int(10),
        name varchar(32) not null,
        email varchar(128),
        unique(name,email)    //这段意思是 name和email 两个字段 联合起来不能重复
    );
    
    insert into t_user(id,name,email) values(1,abc,abc@qq.com);    //输出结果:ok
    insert into t_user(id,name,email) values(2,abcd,abc@qq.com);//输出结果:ok
                    name和email 可以单独 的 可以重复 但是一旦联合起来 就不能重复
    insert into t_user(id,name,email) values(3,abc,abc@qq.com); //输出结果:no



给约束起名字:
    如果需要需要删除某个约束 , 那么就需要通过 一个名字找到对应的约束进行删除
步骤:
    1.创建名字
    create table t_user(
        id int(10),
        name varchar(32) not null,
        email varchar(128),
起名字:        constraint t_user_email_upique unique(name,email)
        //约束的英文词  //给约束起的名字 //约束(要约束的字段)
    );

    2.使用下面这个库
    use information_schema;  

    3.找到  TABLE_CONSTRAINTS    注: 这张表中专门存储约束信息
    
    4.查询 desc TABLE_CONSTRAINTS  的表结构

    5.找到    constraint_name(所有约束的名字)

    6.执行这个语句 :
    select constraint_name from table_constraints where table_name=t_user;
          当 表名字等于 t_user 的时候  查询 其中的 constraint_name 表约束






not nullunique 的联合使用  //既不能为空,也不能重复

示:
    drop table exists t_user;
    create table t_user(
        id int(10),
        name varchar(32) not null unique
    );




三.主键约束 primary key  简称pk
    
    1.主键涉及到的术语:
        主键约束
        主键字段
        主键值
    2.三者关系:
        表中的 某个字段 添加 主键约束 后,该字段 被称为主 键字段,
        主键字段中出现的 每一个数据 都被称为 主键值

用法:    给一个字段添加主键约束,被称为单一主键

    //列级定义方式
    drop table if exists t_usre;
    create table t_user(
        in int(10) primary key; //添加主键
        name varchar(32)
    );
    

    //表级约束
    drop table if exists t_usre;
    create table t_user(
        in int(10),
        name varchar(32),
        primary key(id); //添加主键
    );    

    //单一主键  标记主键  起名:
    drop table if exists t_usre;
    create table t_user(
        in int(10),
        name varchar(32),
        constraint t_user_id_pk(这是表名) primary key(id); //添加主键
    );    
    
    注:    给多个字段联合添加一个主键约束,被称为符合主键
        但: 无论是 单一主键 还是 复合主键 ,一张表中主键约束只能有一个
 
    复合主键(表级约束):
        drop table if exists t_usre;
        create table t_user(
            in int(10),
            name varchar(32),
            primary key(id,name); //添加主键
        );

    复合主键(表级约束 起名字):
        drop table if exists t_usre;
        create table t_user(
            in int(10),
            name varchar(32),
            constraint t_user_id_pk(这是表名) primary key(id,name); //添加主键
        );    
    

    3.给某个字段添加 primary key 后,该字段不能重复,并且也不能为空,
    效果和 not null upique 约束相同,但是本质不一样,主键字段还会默认添加"索引-index"

    4.一张表应该有主键字段,"主键值"是当前行数据的唯一标识,"主键值"是当前行数据的身份证号
    即使表中两行记录相关的数据是一样的,但是由于主键值不同,我们可以认为这是两条不同完全的数据


    5.主键根据性质分类:
        自然主键:(用的多)
            主键值若是一个自然数,这个自然数和当前表的业务没有任何关系,这种主键叫做自然主键

        业务主键:
            主键值和当前表中业务紧密相关的,这种主键叫做业务主键,当业务主键发生改变的时候,
            主键值通常会受到影响        


    6.在mysql数据库管理系统中提供了一个自增的数字,专门用来自动生成主键值,
    主键值不需要维护,也不需要用户提供,自动生成,这个自增的数字默认从1开始,以此递增1,2,3,4...
        
        drop table if exists t_usre;
        create table t_user(
            in int(10) primary key auto_increment, //添加主键的自增值(auto_increment)
            name varchar(32),
        );
        insert into t_user(name) values(jack);
        insert into t_user(name) values(jack);
        insert into t_user(name) values(jack);
        select * from t_user;
        
    
        

三: 外键约束 foreign key  简称fk

    1.外键涉及到的术语:
        外键约束
        外键字段
        外键值

    2.三者关系:
        某个字段添加外键约束后,该字段称为外键字段
        外键字段中的每一个数据都是外键值

    3.外键也分为 : 单一外键(给一个字段添加外键约束) 和 符合外键(给多个字段添加一个外键约束)

    4.一张表中可以有多个外键字段

    理解:
        为了保证a表中的className数据都来自 b表中的 class 字段中的数据,
        有必要给a表中className 字段添加外键约束,className字段被称为 外键字段,
        该字段 中 的值 被称为外键值

    
    注:
        外键值可以是null
        
        外键字段去引用一张表中的某个字段的时候,被引用的字段必须有unique约束

        有了外键引用之后,表分为父表和子表,被引用的是父表,引用的表示子表,
        创建表时先创建父表,再创建子表,删除数据的时候,先删子表中的数据,在删父表中的数据
        插入数据的时候 先插入父表中的数据,在插入子表中的数据



示:
    drop table if exists t_student;

    drop table if exists t_class;

    create table t_class(
        
        cno int(3) primary key,

        cname varchar(128) not null unique

    );

    create table t_student(
    
        sno int(3) primary key,
        
        sname varchar(128) not null unique,
    
        classno int(3),

        constraint t_student_classno_fk foreign key(classno) references t_class(cno)
        //起的名字        这是一个外键  引用的是 t_class 表中的 cno
    
);



    insert into t_class(cno,cname) values(100,one);

    insert into t_class(cno,cname) values(200,two);

    insert into t_class(cno,cname) values(300,three);

    insert into t_student(sno,sname,classno) values (1,jack,100);
 
       insert into t_student(sno,sname,classno) values (2,ls,100);

     insert into t_student(sno,sname,classno) values (3,whh,200);

    insert into t_student(sno,sname,classno) values (4,xm,200);

    insert into t_student(sno,sname,classno) values (5,cq,300);

    insert into t_student(sno,sname,classno) values (6,ff,300);

    insert into t_student(sno,sname,classno) values (7,cc,300);








内连接 与 外链接 的区别:


    内连接:
        a表 和 b表 只能 将 够匹配的 数据匹配出来 不匹配的数据 就不会显示

    外链接:
        a表 和 b表 会将 能够匹配的 和 不能够匹配 的数据全部查询出来 
    





# mysql 数据类型
1. varchar(长度) :
    varchar(3)表示存储的数据不能超过三个字符长度

两者区别:    varchar 会根据数据的实际长度进行分配 节省空间 但是分配的时候 需要执行判断程序 ,效率低
        char 不需要动态分配空间 给多少就 使用多少  效率高 但是对导致空间浪费0

2. char(长度):
    char(3) 表示存储的数据不能超过三个字符长度

3. int: 整数型
    int(3) 表示最大可以储存999

4. bigint: 长整型
    对应java的 long类型

5. float : 浮点型单精度

6. double : 浮点型双精度

7. data : 日期类型
    在实际开发中为了通用,一般不使用日期类型,采用字符春代替日期的比较多

8. blob : binary large object 二级制大对象
    专门存储图片声音视频等数据
    存储图片很常见,但是存储大的视频 一般都是提供一个视频的连接地址

9. clob : character large object 字符大对象
    可以存储比较大的文本, 4G+ 的字符串可以存储


    


    
not in : 不会自动忽略空值

in : 会自动忽略空值

如果在 not in 的查询结果中有空值 那么,会影响查询结果, 需要手动 排空值

加个判断:    where 名字 is not null




# 数据库导出
window 的 dos 命令下:


//导出整个数据库
    mysqldump 库名>D:\库名.sql-u root -p123;
            //路径

//导出指定库下的指定表
    mysqldump 库名 表名>D:\库名.sql -u root -p123



//导入  登陆Mysq数据库管理系统之后执行:
                source D:\库名.sql





级联更新和级联删除:(谨慎使用)
    在删除父表中数据的时候,级联删除子表中的数据    on delete cascade
        删除外链约束:
            alter table t_student drop foreign key t_student_classno_fk;
    
        添加外链约束:
            alter table t_student add 
            constraint t_student_classent_fk
            foreign key(classno) references t_class(cno) on delete cascade;


    在更新父表中数据的时候,级联更新子表中的数据    on update cascade
    



数据库设计三范式:

注:
   设计数据库表的时候所依据的规范:
    
    1.要求有主键,并且要求每一个字段原子性不可再分

    2.要求所有非主键字段完全依赖主键,不能产生部分依赖
    
    3.所有非转字段和主键字段之间不能产生传递依赖




# 事务

1.事务只和 数据操作有关系
    要么全部执行
    要么全部不执行

注:    在事务进行过程中,未结束之前,DML语句是不会更改底层数据库文件中的数据,
    只是将历史操作记录一下,在内存中完成记录,只有在事务结束的时候,而且是
    成功结束的时候才会修改底层硬盘中文件的数据;
    

2.事务四个特征(ACID):
    原子性:
        事务是最小的工作单元
    一致性:
        事务要求所有的DML(数据操作)语句操作的时候,必须是同时成功,或者同时失败
    隔离性:
        事务A和事务B之间具有隔离
    持久性:
        是事务的保证,事务终结的标志 (内存中的数据持久到硬盘文件中)


3.术语(不是SQL语句):
    开始事务:
        start transaction
    事务结束:
        end transaction
    提交事务:
        commit transaction
    回滚事务:
        rollback transaction

4.和事务有关的SQL语句:
    begin;        开始
    commit;        提交
    rollback;     回滚


5.事务开始的标志,事务结束的标志:
    开始:
        任何一条DML语句(insert update delete)执行,标志事务的开始。

    结束:
        注:提交 或者 回滚 任何一条语句 都会结束 事务

    提交:成功的结束,将所有的MDL语句操作历史纪录和底层硬盘文件中的数据来一次同步。
    回滚:失败的结束,将所有的DML语句操作历史记录全部清空;
        




可以隐藏表的字段


create view deptview as select deptno as a.dname as b.loc as c from dept;

------------------------|
a    b    c            |
            |
xxx    xxx    xxx    |
            |
------------------------|


 create view myview as DQL

    //只能跟查询语句







索引需要维护!

什么情况下需要添加索引:
    1.该字段数据量庞大
    2.该字段很少进行DML操作[DML操作多的话,索引需要不断的维护,效率低下]
    3.该字段经常出现在where条件中

创建索引:    //添加unique 表示dept表中的dname字段添加一个唯一性约束
    1.create unique index 索引名 on 表名(列名);
        create unique index dept_dname_index on dept(ename);

    2.alter talble 表名 add unique index 索引名 (列名);
        create index test_index on emp(sal);



删除索引:
    1.drop index index_name on table_name; //删掉table_name 中的索引index_name

    2.alter table table_name drop index index_name; //删掉table_name 中的索引index_name
    
    3.alter table table_name drop primary key;  //删除primary key 索引时使用,
                            因为一个表只可能只有一个primary key 索引





# 引擎

myisam : 适合大量的数据 读而少量数据更新的混合操作 , myisam 表的另一种适用情形是适用压缩的读表
        不支持事务

innodb : 如果查询中包含较多的数据更新操作,应使用 innodb;
        支持事务,并且mysql崩溃后 会有数据保存(备份);

memory : 可以使用 memory 来存储给非永久的需要的数据,或者是能够从基于磁盘的表中重新生成的数据;

 

mysql - 所有笔记

原文:https://www.cnblogs.com/chaoqi/p/10558121.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!