建表及插入数据语句:

mysql> create table salary(userid int,salary decimal(9,2));

Query OK, 0 rows affected (0.11 sec)

mysql> insert into salary values(1,1000),(2,2000),(3,3000),(4,4000),(5,5000),(1,

null);

Query OK, 6 rows affected (0.13 sec)

Records: 6  Duplicates: 0  Warnings: 0

1.if(value,t,f)函数:这里觉得高于2000就是'high',其它都是low

mysql> select if(salary>2000,'high','low') from salary;

+------------------------------+

| if(salary>2000,'high','low') |

+------------------------------+

| low                          |

| low                          |

| high                         |

| high                         |

| high                         |

| low                          |

+------------------------------+

6 rows in set (0.00 sec)

2.ifnull(value1,value2)函数:这个函数能够用来将NULL值换成0

mysql> select ifnull(salary,0) from salary;

+------------------+

| ifnull(salary,0) |

+------------------+

|          1000.00 |

|          2000.00 |

|          3000.00 |

|          4000.00 |

|          5000.00 |

|             0.00 |

+------------------+

6 rows in set (0.00 sec)

3.case when [value1] then [result]...else [default] end函数:

mysql> select case when salary<=2000 then 'low' else 'high' end from salary;

+---------------------------------------------------+

| case when salary<=2000 then 'low' else 'high' end |

+---------------------------------------------------+

| low                                               |

| low                                               |

| high                                              |

| high                                              |

| high                                              |

| high                                              |

+---------------------------------------------------+

6 rows in set (0.00 sec)

4.case [expr] when [value1] then [result] ... else [default] end函数:

mysql> select case salary when 1000 then 'low' when 2000 then 'mid' else 'high'e

nd from salary;

+----------------------------------------------------------------------+

| case salary when 1000 then 'low' when 2000 then 'mid' else 'high'end |

+----------------------------------------------------------------------+

| low                                                                  |

| mid                                                                  |

| high                                                                 |

| high                                                                 |

| high                                                                 |

| high                                                                 |

+----------------------------------------------------------------------+

6 rows in set (0.02 sec)

5.关于mysql存储引擎的一些东西:

存储引擎是mysql不同于其它数据库的一个重要特性。用户能够依据实际须要利用这个特性定制自己的存储引擎.

mysql的引擎有:

mysql> show engines \G;

*************************** 1. row ***************************

 Engine: MyISAM

Support: YES

Comment: Default engine as of MySQL 3.23 with great performance

*************************** 2. row ***************************

 Engine: MEMORY

Support: YES

Comment: Hash based, stored in memory, useful for temporary tables

*************************** 3. row ***************************

 Engine: InnoDB

Support: DEFAULT

Comment: Supports transactions, row-level locking, and foreign keys

*************************** 4. row ***************************

 Engine: BerkeleyDB

Support: NO

Comment: Supports transactions and page-level locking

*************************** 5. row ***************************

 Engine: BLACKHOLE

Support: NO

Comment: /dev/null storage engine (anything you write to it disappears)

*************************** 6. row ***************************

 Engine: EXAMPLE

Support: NO

Comment: Example storage engine

*************************** 7. row ***************************

 Engine: ARCHIVE

Support: YES

Comment: Archive storage engine

*************************** 8. row ***************************

 Engine: CSV

Support: NO

Comment: CSV storage engine

*************************** 9. row ***************************

 Engine: ndbcluster

Support: NO

Comment: Clustered, fault-tolerant, memory-based tables

*************************** 10. row ***************************

 Engine: FEDERATED

Support: NO

Comment: Federated MySQL storage engine

*************************** 11. row ***************************

 Engine: MRG_MYISAM

Support: YES

Comment: Collection of identical MyISAM tables

*************************** 12. row ***************************

 Engine: ISAM

Support: NO

Comment: Obsolete storage engine

12 rows in set (0.00 sec)

或者使用这个cmd:

mysql> show variables like 'have%';

+-----------------------+----------+

| Variable_name         | Value    |

+-----------------------+----------+

| have_archive          | YES      |

| have_bdb              | NO       |

| have_blackhole_engine | NO       |

| have_compress         | YES      |

| have_crypt            | NO       |

| have_csv              | NO       |

| have_example_engine   | NO       |

| have_federated_engine | NO       |

| have_geometry         | YES      |

| have_innodb           | YES      |

| have_isam             | NO       |

| have_ndbcluster       | NO       |

| have_openssl               | DISABLED |

| have_query_cache      | YES      |

| have_raid             | NO       |

| have_rtree_keys       | YES      |

| have_symlink          | YES      |

+-----------------------+----------+

17 rows in set (0.00 sec)

disabled说明mysql支持该engine。可是启动的时候被禁用.

创建表的时候,能够使用enginekeyword指定该表使用哪个engine:

mysql> create table ai(i bigint(20) NOT NULL AUTO_INCREMENT,PRIMARY KEY(I)) ENGI

NE=MyISAM DEFAULT CHARSET=GBK;

Query OK, 0 rows affected (0.03 sec)

也能够改动表的引擎:

mysql> alter table ai engine=innodb;

Query OK, 0 rows affected (0.13 sec)

Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table ai \G;

*************************** 1. row ***************************

       Table: ai

Create Table: CREATE TABLE `ai` (

  `i` bigint(20) NOT NULL auto_increment,

  PRIMARY KEY  (`i`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk

1 row in set (0.00 sec)

常见的存储引擎有:

MyISAM,InnoDB,MEMORY,MERGE,NDB

上述引擎中仅仅有InnoDB支持外键。

mysql的默认存储引擎是MyISAM

每一个MyISAM在磁盘上存储成3个文件:

.frm(存储表定义)

.MYD(MYData,存储数据)

.MYI(MYIndex,存储索引)

关于InnoDB的一些特性:

a.自己主动增长字段:

mysql> create table autoincre(i smallint not null auto_increment,name varchar(20

),primary key(i))engine=innodb;

Query OK, 0 rows affected (0.05 sec)

mysql> insert into autoincre values(1,'1'),(2,'2'),(null,'3');

Query OK, 3 rows affected (0.03 sec)

Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from autoincre;

+---+------+

| i | name |

+---+------+

| 1 | 1    |

| 2 | 2    |

| 3 | 3    |

+---+------+

3 rows in set (0.00 sec)

向自增长字段插入记录后。不影响该字段自己添加值.

对于InnoDB表。自己主动增长字段必须是索引,假设是组合索引也必须是组合索引的第一个列.

可是对于MyISAM表,自增长字段能够不是组合索引的第一个列,能够作为第二个列出现:

mysql> create table autoincre_demo(d1 smallint not null auto_increment,d2 smalli

nt not null,name varchar(10),index(d2,d1))engine=myisam;

Query OK, 0 rows affected (0.05 sec)

mysql> insert into autoincre_demo(d2,name)values(2,'2'),(3,'3'),(4,'4'),(2,'2'),

(3,'3'),(4,'4');

Query OK, 6 rows affected (0.00 sec)

Records: 6  Duplicates: 0  Warnings: 0

mysql> select * from autoincre_demo;

+----+----+------+

| d1 | d2 | name |

+----+----+------+

|  1 |  2 | 2    |

|  1 |  3 | 3    |

|  1 |  4 | 4    |

|  2 |  2 | 2    |

|  2 |  3 | 3    |

|  2 |  4 | 4    |

+----+----+------+

6 rows in set (0.00 sec)

自增长字段d1作为组合索引在第二列中出现,自增长字段的记录依照组合索引d2进行排序后递增.

b.mysql的存储引擎中仅仅有InnoDB支持fk:

建表语句:

mysql> create table country(country_id smallint unsigned not null auto_increment

,country varchar(50) not null,primary key(country_id))

    -> engine=innodb default charset=utf8;

Query OK, 0 rows affected (0.14 sec)

mysql> create table city(

    ->  city_id smallint unsigned not null auto_increment,

    ->  country_id smallint unsigned not null,

    ->  primary key(city_id),

    ->  foreign key(country_id) references country(country_id)

    ->  on delete restrict on update cascade

    -> engine=innodb default charset=utf8;

Query OK, 0 rows affected (0.05 sec)

插入记录:

mysql> insert into country(country) values('china');

Query OK, 1 row affected (0.03 sec)

mysql> select * from country;

+------------+---------+

| country_id | country |

+------------+---------+

|          1 | china   |

+------------+---------+

1 row in set (0.00 sec)

mysql> insert into city(country_id) values(1);

Query OK, 1 row affected (0.11 sec)

mysql> select * from city;

+---------+------------+

| city_id | country_id |

+---------+------------+

|       1 |          1 |

+---------+------------+

1 row in set (0.00 sec)

city表依赖country表的country_id字段,删除会出错:

mysql> delete from country where country_id=1;

ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constrai

nt fails (`tom1/city`, CONSTRAINT `city_ibfk_1` FOREIGN KEY (`country_id`) REFER

ENCES `country` (`country_id`) ON UPDATE CASCADE)

如今更新country表中的country_id字段。city表的country_id字段也会被同步更新。这是由于在创建city表的最后加了:on update cascade。即:更新时做级联操作

mysql> update country set country_id=1000 where country_id=1;

Query OK, 1 row affected (0.03 sec)

Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from city;

+---------+------------+

| city_id | country_id |

+---------+------------+

|       1 |       1000 |

+---------+------------+

1 row in set (0.00 sec)

mysql 流程函数 存储引擎 InnoDB简单特性的更多相关文章

  1. MySQL两大存储引擎InnoDB与MyISAM

    1.InnoDB存储引擎 MySQL5.5中InnoDB成为默认的存储引擎.InnoDB是事务型存储引擎,被设计用来处理大量的短期事务.它的性能和自动崩溃恢复特性,使得它在非事务场景中也很流行. 所以 ...

  2. MySQL学习笔记——存储引擎的索引特性

  3. mysql数据库之 存储引擎、事务、视图、触发器、存储过程、函数、流程控制、数据库备份

    目录 一.存储引擎 1.什么是存储引擎? 2.mysql支持的存储引擎 3. 使用存储引擎 二.事务 三.视图 1.什么是视图 2.为什么要用视图 3.如何用视图 四.触发器 为何要用触发器 创建触发 ...

  4. 常用Mysql存储引擎--InnoDB和MyISAM简单总结

    常用Mysql存储引擎--InnoDB和MyISAM简单总结 2013-04-19 10:21:52|  分类: CCST|举报|字号 订阅     MySQL服务器采用了模块化风格,各部分之间保持相 ...

  5. 浅谈MySQL存储引擎-InnoDB&MyISAM

    存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式是不同的.每一种存储引擎都有它的优势和劣势,本文只讨论最常见 ...

  6. MySql的多存储引擎架构, 默认的引擎InnoDB与 MYISAM的区别(滴滴)

    1.存储引擎是什么? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术, ...

  7. MySQL - 两种存储引擎 (MyISAM PK InnoDB) + MVCC

    总结 1.两种存储引擎各有各的有点,MyISAM专注性能,InnoDB专注事务.两者最大的区别就是InnoDB支持事务,和行锁. 2.InnoDB采用MVCC(Multi-Version Concur ...

  8. 转!!MySQL中的存储引擎讲解(InnoDB,MyISAM,Memory等各存储引擎对比)

    MySQL中的存储引擎: 1.存储引擎的概念 2.查看MySQL所支持的存储引擎 3.MySQL中几种常用存储引擎的特点 4.存储引擎之间的相互转化 一.存储引擎: 1.存储引擎其实就是如何实现存储数 ...

  9. MySQL存储引擎 InnoDB/ MyISAM/ MERGE/ BDB 的区别

    MyISAM:默认的MySQL插件式存储引擎,它是在Web.数据仓储和其他应用环境下最常使用的存储引擎之一.注意,通过更改 STORAGE_ENGINE 配置变量,能够方便地更改MySQL服务器的默认 ...

随机推荐

  1. p1315构建双塔 dp

    From easthong ☆构建双塔                 描述 Description     2001年9月11日,一场突发的灾难将纽约世界贸易中心大厦夷为平地,Mr. F曾亲眼目睹了 ...

  2. [ARC055D]隠された等差数列

    题意:对一个等差数列$a_i=A+Bi(0\leq i\leq n-1)$和非负整数$x$,把$a_i$的$10^x$位拿出来可以写成一个字符集为$0\cdots9$的字符串,现在给定这个字符串$d_ ...

  3. 【主席树】BZOJ3524-[Poi2014]Couriers

    [题目大意] 给一个长度为n的序列a.1≤a[i]≤n. m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0. [思路 ...

  4. java开发_数字转换汉语中人民币的大写_完整版

    做这个应用,源于突然的一个想法:看到发票上面的数字要转换成汉语中人民币的大写 于是就有了下面的这些事儿..... 先看看运行效果: ================================== ...

  5. mySql---logback日志写入数据库(mysql)配置

    如题  建议将日志级别设置为ERROR.这样可以避免存储过多的数据到数据中. 1  logback 配置文件(如下) <?xml version="1.0" encoding ...

  6. KD100遥控生成仪

    KD100是KEYDIY公司开发的一个强大的车用/民用遥控器生成工具,所生成的遥控器都具备不重码,质量稳定的特点. 通过采用英飞凌和NXP等公司开发的超级芯片,KD100巧妙的解决了各类型遥控器的兼容 ...

  7. Spring SetFactoryBean实例

    SetFactoryBean 类为开发者提供了一种可在 Spring bean 配置文件创建一个具体的Set集合(HashSet 和 TreeSet). 这里有一个 ListFactoryBean.例 ...

  8. Eclipse开发Java程序入门,HelloWord

    今天看到一个专业的学术程序是Java写的,而我经常用的是Matalb,所以感觉十分不舒服.之前学的Java开发感觉也忘光了,所以感觉,知识必须要总结好,不然容易忘记.这也就是我写这篇文章的原因.希望能 ...

  9. 加载大量的xml数据 使用压缩方法解决(当然较小时也可以压缩)

    如果你的应该程序必须在运行期间加载一个外部大且冗长的XML文件时,这个方案可能是有用的,通过将XML保存为二进制,你可以压缩数据得到一个较小的文件,当然,你可以得到的压缩的数量取决于数据的复杂性,但它 ...

  10. SQL中关于where后面不能放聚合函数(如sum等)的解决办法

    我们在编写较为复杂的SQL语句的时候,常常会遇到需要将sum()放到where后面作为条件查询,事实证明这样是无法执行的,执行会报[此处不允许使用分组函数]异常. 那么如何解决呢,使用HAVING关键 ...