欢迎投稿

今日深度:

mysql 流程函数 存储引擎 InnoDB简单特性,mysqlinn

mysql 流程函数 存储引擎 InnoDB简单特性,mysqlinnodb


建表及插入数据语句:

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,但是启动的时候被禁用.

创建表的时候,可以使用engine关键字指定该表使用哪个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改成MYISAM怎改?还有DOS中的MYSQL,怎保存数据库,表等对象?

1,mysql中的存储引擎如何设置?------------默认是myisam,建表的时候也指定,例如: create table test(id int)engine=innodb;
2,如果是将INNODB改成MYISAM怎样改?--------------------alter table test engine=myisam;
3,还有DOS中的MYSQL,怎样保存数据库,表等对象?-----------------在dos中执行 create database databasename; create table test(id int);这样就生成了库和表;对应的系统文件在mysql的安装目录的data下,数据库名对应一个文件夹。比如 create database testdb,那么就能在data目录下找到testdb目录;表等对象的文件要看具体的引擎,如果是myisam引擎,那么就会有三个文件,test.frm,test.myi,test.myd三个,innodb的话只有一个test.frm结构文件,数据和索引文件都在 ibdata1表空间里。
4,PHP如何和MYSQL连接?是否非要输入代码?有没有别的简单方法如UI式设置-------------------需要你写连接信息,网上给你找了个php连接mysql的例子,你参考下
<?php
$mysql_server_name='localhost'; //改成自己的mysql数据库服务器
$mysql_username='root'; //改成自己的mysql数据库用户名
$mysql_password='198791'; //改成自己的mysql数据库密码
$mysql_database='mydb'; //改成自己的mysql数据库名

$conn=mysql_connect ($mysql_server_name,$mysql_username,$mysql_password,$mysql_database); //从这句开始向下解释

$sql='insert into book (name,pwd) values ("ggg","ggg");';
//这是一个SQL语句: 向book表中插入一条记录

mysql_query($sql);
//执行SQL语句

mysql_select_db($mysql_database,$conn); //选择上面表所在的数据库(这一句应该在上面一句的前面执行)

$result=mysql_query($sql); //这一句完全是多余的,和上面的那一个是一样的!

mysql_close($conn); //关闭数据库连接
echo "Hello!操作成功!"; //显示提示信息

?>
 

MYSQL中InnoDB是什?

innodb的特色在于支持并发与表间引用MySQL支持多种存储引擎,用户可以方便的选用不同的存储引擎来支持自己的应用,每种不同的存储引擎都有其自己的特性Innodb是其中的一种存储引擎,它的特性是支持事务,并且采用多版本并发控制的方式来提高并发度主要是事务表,当一个事务全部完成,才会执行update.如果一段代码没有完成(及一个事务操作没有完成)它是不会update的,例如:银行转帐,一 笔业务没有完成的时候,突然的断电,或是,网络,系统的原因使你无法完成此交易的话,这个事务是要回滚的此交易之前的状态的,没有完成交易,你银行的 money是不会减少的!缺点是,innoDB的表执行起来速度较慢,但是安全!bbs的表要求的是速度,用的都是myisam的表!不知这样通俗的说, 你是否理解?数据存储引擎为INNODBtype的值可为TYPE = {BDB | HEAP | ISAM | InnoDB | MERGE | MRG_MYISAM | MYISAM }InnoDB是mysql的一种存储引擎,除了innodb还有其它的,例如isam,myisam等.innodb的特色在于支持并发与表间引用。MySQL支持多种存储引擎,用户可以方便的选用不同的存储引擎来支持自己的应用,每种不同的存储引擎都有其自己的特性Innodb是其中的一种存储引擎,它的特性是支持事务,并且采用多版本并发控制的方式来提高并发度。主要是事务表,当一个事务全部完成,才会执行update.如果一段代码没有完成(及一个事务操作没有完成)它是不会update的,例如:银行转帐,一 笔业务没有完成的时候,突然的断电,或是,网络,系统的原因使你无法完成此交易的话,这个事务是要回滚的此交易之前的状态的,没有完成交易,你银行的 money是不会减少的!缺点是,innoDB的表执行起来速度较慢,但是安全!
 

www.htsjk.Com true http://www.htsjk.com/shujukunews/3712.html NewsArticle mysql 流程函数 存储引擎 InnoDB简单特性,mysqlinnodb 建表及插入数据语句: 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)...
评论暂时关闭