代码改变世界

My SQL 使用小记

2012-07-27 08:29  音乐让我说  阅读(633)  评论(0编辑  收藏  举报

以下是我自己整理的 MySQL 小记,方便下次温习。

 

MySQL 学习 Pdf 文档(Fish li):点击下载 

阿里巴巴 Java 开发手册(里面有 MySQL 规范):点击下载

 

1. My SQL 连接字符串,如果是连接本地的话:Server=localhost;Database=HelloWorld;Uid=root;Pwd=root;

或者:Data Source=localhost;Initial Catalog=HelloWorld;User ID=root;Password=root;Pooling=True;charset=utf8;MAX Pool Size=2000;Min Pool Size=1;Connection Lifetime=30;


2. My SQL 中 建立一个自动增长的主键,和插入一条记录,

select last_insert_id(); 用来得到 插入完数据以后,自动增长的数据的SQL语句

例子如下:

注意:AUTO_INCREMENT 表示自动增长,AUTO_INCREMENT=1000 表示种子数。插入记录时,insert into 表名(/* 这里必须填完整 */) values(/* 这里的值和上面的列名一一对应 */)


create table Topic
(
       ID int AUTO_INCREMENT NOT NULL primary key,
        'Name' varchar(50) NOT NULL,
        CategoryId int NOT NULL,
        CoverImageFilePath varchar(250) NULL,
        Description varchar(200) NULL,
        IsShow bit NOT NULL,
        CreateOn datetime NOT NULL,
        CreateBy varchar(50) NULL      
);

alter table Topic AUTO_INCREMENT=1;

select * from Topic;


insert into 'Test'('Name')
values('bruce')


ALTER TABLE `HelloWorld_hd`.`topic`   ADD CONSTRAINT `FK_Topic_CategoryId_Category_ID`  FOREIGN KEY (`ID` )  REFERENCES `HelloWorld_hd`.`category` (`ID` )  ON DELETE NO ACTION  ON UPDATE NO ACTION, ADD INDEX `FK_Topic_CategoryId_Category_ID` (`ID` ASC) ;


3. SQL Server 中用 getDate() 表示当前时间,My SQL 中用 now()

4. MySql 使用参数化查询,关键符号为 ?


MySqlConnection conn = new MySqlConnection(connstr);
            conn.Open();
            MySqlCommand cmd = new MySqlCommand("select count(1) from qyexam_notice where title=?title",conn);
            cmd.Parameters.Add(new MySqlParameter("?title", "《测试》2011/12/14 10:47:00开始"));
            object obj = cmd.ExecuteScalar();
            conn.Close();


5. 如果 Product 表的 CategoryId 引用了 Category 表的 ID,那么删除 Category 表的某条记录,假设这条记录已经被 Product 表的某条记录关联了,那么执行 ExecuteNonQuery 时,将抛出异常,在删除多条时,也会抛出异常。而在 SQL Server 中不会,只不过受影响的行数为零。

异常信息:Cannot delete or update a parent row: a foreign key constraint fails (`HelloWorld_hd`.`topic`, CONSTRAINT `FK_Topic_CategoryId_Category_ID` FOREIGN KEY (`CategoryId`) REFERENCES `category` (`ID`) ON DELETE NO ACTION ON UPDATE NO ACTION)

 

6. MySql 中字符串拼接用 concat ,而在 sql server 中直接用 +

本文通过实例介绍了MySQL中的concat函数的使用方法,比如select concat('11','22','33')。
MySQL中concat函数
使用方法:
CONCAT(str1,str2,…)  

返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。

 


7> MySQL 数据库文件一般存储在,如果是 Windows 7,那么在 C:\ProgramData\MySQL\MySQL Server 5.5\data  里面。如果是 XP,一般在 C:\Documents and Settings\All Users\Application Data\MySQL


8> MySQL 备份数据库,用 mysqldump 命令。


9> MySQL 中 and 的优先级大于 or 。比如 select * from product where categoryId = 1001 or categoryId=1002 and Id=8899  ,那么上面的 SQL 语句等于 select * from product where categoryId = 1001 or (categoryId=1002 and Id=8899 )


10> MySQL 中不支持 nvarchar 、guid 类型


11> select if(1>2,'true','false') 结果为 false, 相当于 C# 中的三元运算符。


12> SQL Server 中的 IsNull(exp, result) 大致相当于 MySQL 中的 IfNull。但有不同。SQL Server 中 如果 exp 成立,则结果为 result,而 MySQL 中的 IfNull(exp, result) 表示如果 exp 不为 null,则返回 exp,否则返回 result。


13> MySQL 中的 NULLIF(expr1,expr2)  : 如果expr1 = expr2 成立,那么返回值为NULL,否则返回值为expr1。这和CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END 相同。


14> select ascii('a');    结果为 97。  意思:返回参数字符串最左边的一个字符的数值,结果从 0 到 255。如果参数为空字符串,将返回 0。


15> 手动设置某个表的 编码,比如下面。但最好建库的时候,就设置默认的编码:ALTER SCHEMA `HelloWorld_newsmanagement`  DEFAULT CHARACTER SET utf8 ;

-- 设置全局的默认编码
create database DBHelloWorld;
use DBHelloWorld;
ALTER SCHEMA DBHelloWorld  DEFAULT CHARACTER SET utf8;


-- 设置某个表的默认编码
DROP TABLE IF EXISTS NewsFrom;
CREATE TABLE NewsFrom (
  `Id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键Id',
  `Name` varchar(32) NOT NULL COMMENT '名称',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='文章来源表,表示让用户快速给某篇文章选择来源。';

 

16> 注意:MySql 中建库、建表、建存储过程时最好是小写,以免因为大小写而导致调用失败。 比如:刚刚我建立了一个 proc_newsCategory_hier 存储过程,创建成功后,其实 MySql 就自动把它转换为小写了,导致调用的时候,MySql 老是报错: Procedure or function '`proc_newscategory_hier`' cannot be found in database '`newsmanagement`'.   所以:经验是 数据库的名称、连接字符串中 Initial Catalog=newsmanagement 一定要全部小写。

 

17> ADO.NET 中 new MySqlParameter("?categoryId", id)  参数的符号 "?" 可以加,也可以不加。

 

18> 推荐一款数据库管理的客户端工具:Navicat Premium,它支持 MSSQLServier、Oracle、MySql 等数据库,大小才 30 几 MB。

 

19> MySQL 解析 XML 字符串

 

SELECT ExtractValue('<root><row>1</row><row>2</row></root>', '//row');

 

 20> 在mysql中查询一个数据库中的所有表

查所有数据库:show databases

use (填数据库名字)databasename

查所有表:show tables;

 

21>

以后会时常更新....

谢谢浏览!