• MYSQL引擎


    mysql视图
    单表视图
    create view new_emp as select * from emp;
    create view new_emp1 as select uid,name,money from emp;
    修改视图=修改源表

    多表视图
    create table tt1(id int,name char(10),did int);
    create table tt2(did int,dname char(10));
    多表查询
    select tt1.id,tt1.name,tt2.did,tt2.dname from tt1,tt2 where tt1.did=tt2.did;
    create view kk as select tt1.id,tt1.name,tt2.did,tt2.dname from tt1,tt2 where tt1.did=tt2.did;
    create view kkk as select tt1.name,tt2.dname from tt1,tt2 where tt1.did=tt2.did;
    视图的作用是什么?//可以从好多张表看信息?


    存储引擎是什么?

    MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。
    例如,如果你在研究大量的临时数据,你也许需要使用内存存储引擎。内存存储引擎能够在内存中存储所有的表格数据

    MyISAM
    mysql> create table t4(id int,name char(10)) engine=myisam;
    mysql> create table t3(id int,name char(10)) engine=myisam;
    [root@www db]# ls t3.*
    t3.frm t3.MYD t3.MYI

    t3.frm 表结构
    t3.MYD 数据
    t3.MYI index信息

    MRG_MYISAM
    create table t10(id int,name char(10)) engine=myisam;
    create table t20(id int,name char(10)) engine=myisam;
    create table t30(id int,name char(10)) union=(t10,t20) engine=mrg_myisam;
    create table t40(id int,name char(10)) union=(t10,t20) INSERT_METHOD=first engine=mrg_myisam;
    mysql> create table t5(id int,name char(8)) union(t3,t4) engine=mrg_myisam; 后面还可以添加 INSERT_METHOD [=] { NO | FIRST | LAST }定义的是插入内容到第一张表还是到最后一张表
    create table t5 (id int,name char(10)) union=(t3,t4) INSERT_METHOD=first engine=mrg_myisam;

    MEMORY
    创建memory引擎表 数据库或者系统重启 数据丢失
    mysql> create table t3(id int,name char(10)) engine=memory;
    mysql> show create table t3; //查看表的存储引擎类型

    黑洞存储引擎
    mysql> create table t2(id int,name char(10)) engine=blackhole;


    MyISAM
    MyISAM是默认存储引擎。它基于更老的ISAM代码,但有很多有用的扩展。(注意MySQL 5.1不支持ISAM)。
    每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名 为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。 MyISAM文件的格式是平台无关的,这意味着你可以将数据和索引文件从一个intel服务器上拷贝到一台PowerPC或者Sun SPARC上,而不会出任何问题。

    主要区别:

      MyISAM是非事务安全型的,而InnoDB是事务安全型的。

      MyISAM锁的粒度是表级,而InnoDB支持行级锁定。

      MyISAM支持全文类型索引,而InnoDB不支持全文索引。

      MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。

      MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦。

      InnoDB表比MyISAM表更安全,可以在保证数据不会丢失的情况下,切换非事务表到事务表(alter table tablename engine=innodb)。

    mysql的配置文件:/etc/my.cnf /usr/my.cnf /usr/local/mysql/my.cnf
    独占表空间和共享表空间
    innodb_file_per_table=1 独立
    innodb_file_per_table=0 共享


    1.外键索引
    外键myisam引擎不支持只能用innodb引擎
    create table dpmnt(id int not null,name char(10) not null,primary key(id)) type = INNODB;
    desc dpmnt;
    +-------+----------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +-------+----------+------+-----+---------+-------+
    | id | int(11) | NO | PRI | NULL | |
    | name | char(10) | NO | | NULL | |
    +-------+----------+------+-----+---------+-------+
    建立外键
    create table emp (id int not null, name char(10) not null,fk_dpmnt int not null ,primary key(id),index (fk_dpmnt),foreign key (fk_dpmnt) references dpmnt(id)) type=innodb;
    desc emp;
    +----------+----------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +----------+----------+------+-----+---------+-------+
    | id | int(11) | NO | PRI | NULL | |
    | name | char(10) | NO | | NULL | |
    | fk_dpmnt | int(11) | NO | MUL | NULL | |
    +----------+----------+------+-----+---------+-------+
    insert into dpmnt values(1,hr);
    insert into dpmnt values(2,'yw');
    insert into emp values(10,'zhb',3);
    ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`db`.`emp`, CONSTRAINT `emp_ibfk_1` FOREIGN KEY (`fk_dpmnt`) REFERENCES `dpmnt` (`id`))

    fk_dpmnt字段的数据必须得是dpmnt表里有的不然报错...

    即使表存在外键约束,MySQL还允许我们删除表,并且不会产生错误。这是删除外键的方法。
    alter table emp drop foreign key emp_ibfk_1;
    删除外键
    添加外键
    alter table emp add CONSTRAINT fk_1 foreign key(did) references dpt(did);

    create table dpt(did int primary key,dname char(10))
    create table emp(id int,name char(10),did int,foreign key (did) references dpt(did) );

    insert into emp values(1,'robin',10);
    insert into emp values(2,'zorro',30);

    alter table emp drop foreign key emp_ibfk_1;
    alter table emp add foreign key (did) references dpt(did);
    alter table emp add CONSTRAINT emp_dpt_fk foreign key (did) references dpt(did);


    create table dpt(did int primary key,dname char(10)) engine=innodb;

    create table emp(id int primary key,name char(30),did int,foreign key(did) references dpt(did)) engine=innodb;
    alter table emp drop foreign key emp_ibfk_1;
    删除外键
    添加外键
    alter table emp add CONSTRAINT fk_1 foreign key(did) references dpt(did);


    级联删除,级联更新
    mysql> create table emp(id int,name char(10),did int,foreign key (did) references dpt(did) ON DELETE CASCADE on update cascade);

    2.表级锁和行级锁
    行级锁:对正在被修改的行进行锁定,其它的用户可以访问被锁定的行以外的行。表级锁:锁定整个表,限其他用户对表的访问

    3.事物的支持
    事务处理是一种机制,用来管理成批执行的sql语句,以保证数据库不包含不完整的操作结果,他们或者为整体执行完成,或者完全不执行(如果没有错误发生整组语句提交到数据库,如果发生错误,则进行回退,以保证数据的安全)

    事务 transaction 指定一组sql语句
    回退 rollback 撤销指定的sql语句(只能回退insert delete update语句)
    提交 commit 提交未存储的sql语句
    保留点 savepoint 事务处理中设置的临时占位符 你可以对它发布回退(与整个事务回退不同)
    create table t11(id int,name char(10)) engine=innodb;
    start transaction;
    delete from t11;

    select * from t11;
    Empty set (0.00 sec)

    rollback;

    select * from t11;
    +------+-------+
    | id | name |
    +------+-------+
    | 1 | zorro |
    | 2 | zorro |
    | 2 | zorro |
    +------+-------+

    提交
    start transaction;
    insert into t11 values(3,'tom');
    select * from t11;
    commit;

    保留点
    start transaction;
    Query OK, 0 rows affected (0.00 sec)

    mysql> insert into t11 values(5,'haha');
    Query OK, 1 row affected (0.01 sec)

    mysql> savepoint insert1;
    Query OK, 0 rows affected (0.00 sec)

    mysql> select * from t11;
    +------+-------+
    | id | name |
    +------+-------+
    | 1 | tom |
    | 2 | jerry |
    | 3 | zorro |
    | 4 | seker |
    | 5 | haha |
    +------+-------+
    5 rows in set (0.00 sec)

    mysql> delete from t11 where id=4;
    Query OK, 1 row affected (0.00 sec)

    mysql> savepoint delete1;
    Query OK, 0 rows affected (0.00 sec)

    mysql> select * from t11;
    +------+-------+
    | id | name |
    +------+-------+
    | 1 | tom |
    | 2 | jerry |
    | 3 | zorro |
    | 5 | haha |
    +------+-------+
    4 rows in set (0.00 sec)

    mysql> delete from t11 where id=1;
    Query OK, 1 row affected (0.00 sec)

    mysql> savepoint delete2;
    Query OK, 0 rows affected (0.00 sec)

    mysql> select * from t11;
    +------+-------+
    | id | name |
    +------+-------+
    | 2 | jerry |
    | 3 | zorro |
    | 5 | haha |
    +------+-------+
    3 rows in set (0.01 sec)

    mysql> rollback to delete1;
    Query OK, 0 rows affected (0.00 sec)

    mysql> select * from t11;
    +------+-------+
    | id | name |
    +------+-------+
    | 1 | tom |
    | 2 | jerry |
    | 3 | zorro |
    | 5 | haha |
    +------+-------+
    4 rows in set (0.00 sec)

  • 相关阅读:
    数据库存储过程分页
    C#.net随机数函数
    文件下载文件名兼容中英文空格
    win7安装SQL2005出现29506错误
    SQL2008清空日志文件
    C#数字类型输出字符串时保留指定小数位数的方法
    对.NET中导出数据到EXCEL的几种方法探讨
    六种删除数据库重复行的方法 .
    修改表联合主键
    增加联合主键
  • 原文地址:https://www.cnblogs.com/yangxiaochu/p/6780078.html
Copyright © 2020-2023  润新知