mysql说明怎么写 mysql语句怎么写

MySQL NULL值处理详细说明

在讲null之前,我们先看一个例子

在容城等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站制作、做网站、外贸营销网站建设 网站设计制作按需制作,公司网站建设,企业网站建设,品牌网站建设,成都全网营销,外贸营销网站建设,容城网站建设费用合理。

表数据如下:

然后我们想查出所有名字不为'chen'的其它行记录,我们有可能这样写:

但是结果好像不太如我们所愿,id为1的那条记录没有被查出来,null肯定和'chen'不相等呀,为什么会查不出呢?

NUll值对于新手来说非常容易混淆,经常会被认为null与空字符串''是一样的,但事实上,这两者是非常不一样,NULL表示的是“a missing unknown value”,而字符串''是一个确定的值,这本质上就已经不一样了。

举个例子:

第一条insert语句认为这个手机号还不确定是多少,是a missing unknown phone number

第二条代表这个手机号码是确定的,它的手机号码为空字符串

为了处理和null相关的比较,在mysql中可以用is null、is not null、=、isnull()来测试比较,不能用如=、、来和null值比较测试,任何值(包括和null本身)与null对比和函数运算操作结果都为null

如下三个例子可以说明问题:

但是呢,凡事都有个例外:

当用distinct、group by、order by时,此时不同的null值被视为相等计算。

最重要的是,在mysql中,0和null代表假,其它的任何值都代表真

所以回头看最开始的例子,当我们的where条件为name!='chen'时,它与id=1的行进行比较,即测试:

'chen'!='chen'

这个测试结果为0,为假,所以id=1这一行就不会被查出来。接下来再测试:

'zhang'!='chen'

这个测试结果为1,为真,所以id=2这一行就可以被查出来。接下来再测试:

NULL!='chen'

这个测试结果为NULL,为假,所以id=3这一行就不会被查出来。

所以最终的结果就只有id=2这一行的数据被查出来了。

那如果要达到我们的目地怎么办?

推荐用第一种方法。

因为mysql对了null列的查找是有查询优化的:

而第二种在列上加上函数的查询时索引是不起作用的。

其它注意事项

mysql备注说明只能是1到8?

1. 给字段添加注释

-- alter table  sc modify column 字段名  int not null comment  '只能是1-8';

2.MySQL 所有的存储引擎都不支持 CHECK 约束,MySQL中可以写 CHECK 约束,但会忽略它的作用,因此 CHECK 并不起作用,因此实现对数据约束有两种方法:

在 MySQL 种约束,如使用 ENUM 类型 或者 触发器 。

CREATE TABLE person(

id tinyint(4) NOT NULL AUTO_INCREMENT,

name varchar(16) NOT NULL,

sex enum('男','女') NOT NULL

PRIMARY KEY (id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在应用程序里面对数据进行检查再插入。

谁给个php操作mysql类并有详细使用说明或例子

下面这个,是针对php5的一个简单数据库封装类,适合学习,其他的如删除、更新等操作,你可以自己加上:

?php

class Mysql{ //首先定义一个类,首写字母大写

public $host;//服务器名,访问修饰符PUBLIC证明$host是一个公共的属情在类的内部外部都可访问,可以被继承

public $user;//用户名,是公共的属性

private $pass;//密码,问修饰符private证明$pass是私有的.只能在类的内部使用且不能被继承.

public $dbname;//数据库名,也是公共的属性.

//__construct声名这是一个造函数,定义一些初始的信息.有三个参数

public function __construct($host,$user,$pass,$dbname){

$this-host = $host;

$this-user = $user;

$this-pass = $pass;

$this-dbname = $dbname;

$link = @mysql_connect($this-host,$this-user,$this-pass)

or die("error");

@mysql_select_db($this-dbname,$link)

or die("error2");

}

//定义数据库的查寻和显示函数

function myQuery($sql){

$result = mysql_query($sql);

if(!$result){

echo "error3";

exit;

}

$num = mysql_num_rows($result);

if($num){

echo "NO".$num;

}

while($row = mysql_fetch_assoc($result)){

echo 'trtd bgcolor="#fffddd"pre'.htmlspecialchars(stripslashes($row['body']))."pre/td/tr";

}

}

}

$rutt = new Mysql('localhost','root','ssss','calvin');//实例化一个类...记住这里的参数是和构造函数的参数一样的...

$rutt-myQuery('select * from calvin_body');//运行数据库查寻并显示的函数..

?

MySQL 常用命令及参数说明

sync-binlog=0: 关闭通过MySQL服务器将二进制日志刷入磁盘,MySQL服务器依赖于操作系统每秒将二进制日志刷新到磁盘。这个设置提供了最好的性能,但是当碰到断电或系统崩溃的时候,可能会造成服务器提交的事务没有被同步到二进制日志中。

sync-binlog=1: 开启在事务提交前将二进制日志刷入磁盘。这是最安全的设置,但是这对磁盘读写会造成负面影响。当碰到断电或系统崩溃的时候,丢失的事务只是进入准备状态,这个操作允许自动恢复程序去回滚这些事务,保证了没有事务会从二进制日志中丢失。

sync-binlog=N: 每向二进制日志文件写入N条SQL或N个事务后,则把二进制日志文件的数据刷新到磁盘上;

innodb_flush_log_at_trx_commit=0: log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行。该模式下在事务提交的时候,不会主动触发写入磁盘的操作。

innodb_flush_log_at_trx_commit=1: 完全遵从ACID,每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去。

innodb_flush_log_at_trx_commit=2: 每次事务提交时MySQL都会把log buffer的数据写入log file,但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。


文章题目:mysql说明怎么写 mysql语句怎么写
转载注明:http://myzitong.com/article/docioip.html