Category Archives: 数据库相关
酒店地区与分类数据库结构设计
要求:一个城市的酒店有”地区分类”,地区分类包括一般的地区分类,还有此城市的周边县市(也是城市,在这里当做这个比较大的城市的地区)
点击这里看需求:《旅游网站分析——携程网酒店地理位置分类的问题》
设计:
由两个表:城市city和地区area
地区表area:
|
字段 |
类型 |
说明 |
|
Area_id |
Int |
自增主键 |
|
Area_name |
Varchar(50) |
地区名 |
|
City_id |
Int |
城市表外键 |
城市表city
|
字段 |
类型 |
说明 |
|
City_id |
Int |
自增主键 |
|
City_name |
Varchar(50) |
城市名 |
|
City_parent |
Int |
城市外键 |
这样如果要查询一个城市的地区的时候就可以
Select * from area where city_id=my_city_id
+
Select * from city where city_parent= my_city_id
没有什么高超的技巧,却可以实现很实用的业务功能。
自动备份远程mysql服务器数据
现在很多服务器是远程托管,要做备份要先在服务器上导出数据,在下载数据到本地。多处备份,提高服务器物理容灾能力。这个事情不难,麻烦的是每天都做。
所以做个自动备份并下载,思路如下:
1.服务器上使用mysql自带的mysqldump自动备份数据,每天固定时间备份。详见:
简单3步完成mysql自动备份
2.本地使用ftp自动下载,把远程的文件下载下来。详见:
使用bat批处理做ftp自动下载
3.这些都做成计划任何,固定一个闲置的时间如深夜完成,2步骤在1步骤完成后进行。如此如此,每天自动备份远程数据就完成了。
简单3步完成mysql自动备份
因为经常备份,很多个数据库,麻烦,所以找了一个懒方法做Mysql自动备份:
- 使用mysql自带的mysqldump备份工具(Mysqldump用法详解)
- 建立一个批处理,如:
set ymd=%date:~0,10%
md “F:/mysql_bak/%ymd%”
“D:\mysq\bin\mysqldump.exe” –opt -Q databasename –uusername -ppassword > f:\mysql_bak\%ymd%”\databasename.sql
解释,先生成一个以当天日期为格式的文件夹,导出数据库,文中红线不部分用真实sqldump路径,数据库用户名,密码,数据库名替换,如有多个数据库,可写多条语句。
3.加入系统计划任务固定每天执行这个批处理。
简单三步,每天Mysql自动备份数据的超级懒人计划,就完成了。
mysql数据导出,mysqldump.exe详解
MySQL中保留字的处理
9.6. MySQL中保留字的处理
尝试使用一个识别符,例如使用嵌入式MySQL 数据类型或函数名作为表名或列名,例如TIMESTAMP 或GROUP ,会造成一个常见问题。允许你这样操作( 例如,ABS 可以作为一个列名) 。但是,默认情况下,在数调用中在函数名和后面的‘( ’字符之间不允许有空格。该要求使函数调用与列名引用不同。
该行为的不利结果是在某些上下文中省略一个空格会使识别符解释为函数名。例如,该语句合法:
mysql> CREATE TABLE abs (val INT);
但省略abs 后面的空格会造成语法错误,因为省略后该语句好像要调用ABS() 函数:
mysql> CREATE TABLE abs(val INT);
如果SQL 服务器模式包括IGNORE_SPACE 模式值,服务器允许函数调用时在函数名和后面的‘( ’字符之间有空格。这样使函数名被视为保留字。结果是,与函数名相同的识别符必须按照9.2节,“数据库、表、索引、列和别名”中所描述的引起来。SQL 服务器模式按照5.3.2节,“SQL服务器模式”中所描述的进行控制。
限定名中句点后面的字必须为一个识别符,因此不需要将它引起来,即使它是一个保留字。
在MySQL 中,下表中的字显式被保留。其中大多数字进制被标准SQL 用作列名和/ 或表名( 例如,GROUP ) 。少数被保留了,因为MySQL 需要它们,( 目前) 使用yacc解析程序。保留字被引起来后可以用作识别符。
| ADD | ALL | ALTER |
| ANALYZE | AND | AS |
| ASC | ASENSITIVE | BEFORE |
| BETWEEN | BIGINT | BINARY |
| BLOB | BOTH | BY |
| CALL | CASCADE | CASE |
| CHANGE | CHAR | CHARACTER |
| CHECK | COLLATE | COLUMN |
| CONDITION | CONNECTION | CONSTRAINT |
| CONTINUE | CONVERT | CREATE |
| CROSS | CURRENT_DATE | CURRENT_TIME |
| CURRENT_TIMESTAMP | CURRENT_USER | CURSOR |
| DATABASE | DATABASES | DAY_HOUR |
| DAY_MICROSECOND | DAY_MINUTE | DAY_SECOND |
| DEC | DECIMAL | DECLARE |
| DEFAULT | DELAYED | DELETE |
| DESC | DESCRIBE | DETERMINISTIC |
| DISTINCT | DISTINCTROW | DIV |
| DOUBLE | DROP | DUAL |
| EACH | ELSE | ELSEIF |
| ENCLOSED | ESCAPED | EXISTS |
| EXIT | EXPLAIN | FALSE |
| FETCH | FLOAT | FLOAT4 |
| FLOAT8 | FOR | FORCE |
| FOREIGN | FROM | FULLTEXT |
| GOTO | GRANT | GROUP |
| HAVING | HIGH_PRIORITY | HOUR_MICROSECOND |
| HOUR_MINUTE | HOUR_SECOND | IF |
| IGNORE | IN | INDEX |
| INFILE | INNER | INOUT |
| INSENSITIVE | INSERT | INT |
| INT1 | INT2 | INT3 |
| INT4 | INT8 | INTEGER |
| INTERVAL | INTO | IS |
| ITERATE | JOIN | KEY |
| KEYS | KILL | LABEL |
| LEADING | LEAVE | LEFT |
| LIKE | LIMIT | LINEAR |
| LINES | LOAD | LOCALTIME |
| LOCALTIMESTAMP | LOCK | LONG |
| LONGBLOB | LONGTEXT | LOOP |
| LOW_PRIORITY | MATCH | MEDIUMBLOB |
| MEDIUMINT | MEDIUMTEXT | MIDDLEINT |
| MINUTE_MICROSECOND | MINUTE_SECOND | MOD |
| MODIFIES | NATURAL | NOT |
| NO_WRITE_TO_BINLOG | NULL | NUMERIC |
| ON | OPTIMIZE | OPTION |
| OPTIONALLY | OR | ORDER |
| OUT | OUTER | OUTFILE |
| PRECISION | PRIMARY | PROCEDURE |
| PURGE | RAID0 | RANGE |
| READ | READS | REAL |
| REFERENCES | REGEXP | RELEASE |
| RENAME | REPEAT | REPLACE |
| REQUIRE | RESTRICT | RETURN |
| REVOKE | RIGHT | RLIKE |
| SCHEMA | SCHEMAS | SECOND_MICROSECOND |
| SELECT | SENSITIVE | SEPARATOR |
| SET | SHOW | SMALLINT |
| SPATIAL | SPECIFIC | SQL |
| SQLEXCEPTION | SQLSTATE | SQLWARNING |
| SQL_BIG_RESULT | SQL_CALC_FOUND_ROWS | SQL_SMALL_RESULT |
| SSL | STARTING | STRAIGHT_JOIN |
| TABLE | TERMINATED | THEN |
| TINYBLOB | TINYINT | TINYTEXT |
| TO | TRAILING | TRIGGER |
| TRUE | UNDO | UNION |
| UNIQUE | UNLOCK | UNSIGNED |
| UPDATE | USAGE | USE |
| USING | UTC_DATE | UTC_TIME |
| UTC_TIMESTAMP | VALUES | VARBINARY |
| VARCHAR | VARCHARACTER | VARYING |
| WHEN | WHERE | WHILE |
| WITH | WRITE | X509 |
| XOR | YEAR_MONTH | ZEROFILL |
MySQL 允许部分关键字用做未引起来的识别符,因为许多人以前曾使用过它们。下面列出了一些例子:
- ACTION
- BIT
- DATE
- ENUM
- NO
- TEXT
- TIME
- TIMESTAMP
class 惹的祸(解决JS 未定义标识符)
最近遇到一个问题,一个页面,在firefox下运行正常,但在ie下出错,提示未定义标识符和未定义一个实际我已定义的函数。
其他的页面也是类似的定义,但都是ok的。
原来我以为是我加入的一个jQuery的日历插件(datepicker)不兼容性引起的。但是我把日历撤了,问题依然存在。而且我在ie下运行这个日历的demo是ok的。更说明了不是这个插件的问题。但是查找问题比较难,原因是firefox里运行是ok的,而我一般是用firefox的firebug来调试js的。在ie下,我并没有好的方法。按ie的出错提示上网查找也没有找到合适的办法。只能用比较笨的办法,逐段替换。终于我发现了在js中我有个定义为类型的变量 Var class; 注释掉在ie运行ok。我比较奇怪,因为我用dreamwave写js,一般的保留字它会变色。我就是看它没有变色才使用它。在firefox下也是ok的。没想到ie竟对class有不同的解释。我查了js的手册,并没有把“class”列入其中。比较奇怪。
谜底揭开了,但是我想到上一次我在mysql里有一次定义字段名为describe也出错了。我想编程时对保留字应该要比较注意,以免出错和留下一些隐患。
相关链接:
navicat教程之–数据转换
数据转换
General Settings for Data Transfer
一.一般设定
下列指示将引导您完成的过程中建立一个数据转换。请根据您的需要自定义选项。 (见拖放drag and drop)
Source
数据源
默认选中所有的数据库对象。如果您不想要数据转换,取消勾选。
所有勾选的数据库将被数据转换。但是,如果您在创建了转换文件后再新增数据库,新的数据库将不会被转换,除非您重新手动修改目标文件。
如果你希望所有的物体被转移到目标数据库,包括所有新增加的对象,而不用重新修改目标文件。请选择此选项,
Target
目标
Transfer directly to server
勾选此项,直接将数据转入其他数据库。
Transfer to file
勾选此项,数据转入文件

Setting Advanced Data Transfer Properties
二.高级设定
General Options
一般选项
Log to file:(日志文件)
在数据转换过程中,记录每个错误的详细信息(标示成功或错误)。
注意:每次数据转换,此文档都会被覆盖写入。
相关话题:

Continue on errors(错误时继续)
勾选此项,转换时忽略遇到的错误。
Drop tables before create(生成表之前先删除)
勾选此项,转换时如遇已经存在同名数据库/表,先删除旧数据库/表,再创建新的数据库/表。
Create database if not exist(不存在时新建)
只有指定的数据库/表未存在时,才会创建。
Server Options
服务选项
Lock tables before read(读表之前锁定)
在数据转换过程中,读表之前先锁定源数据库所有表,在此数据转换操作结束之前,任何update操作不允许。
Flush log files before starting Data Transfer (数据转换前删掉日志文件)
数据转换之前在转换源端运行FLUSH LOGS语法
您可以参考:Flush

Table Options
表选项
Create tables(创建表)
Creates tables in the target database with this option is on.
勾选此选项,将在目标数据库创建表。
假如此选项未被勾选,而目标数据库又存在此表,那么所有记录会附加到目标数据库表中。
Use DDL from SHOW CREATE TABLE
If this option is on, DDL will be used from show create table.
Create indexes(创建索引)
勾选此选项,将在目标数据库表创建索引。
Include foreign keys(包含外键)
勾选此选项,外键信息也被转换输出。
Include engine/table type(包含引擎类型)
Includes table type with this option is on.
勾选此选项,引擎类型信息也被转换输出。
Include character set(包含字符集设置)
勾选此选项,字符集设置信息也被转换输出。
Include auto increment(包含自动增量)
Includes auto increment in the table with this option is on.
勾选此选项,自动增量信息也被转换输出。
Create triggers(包含触发器信息)
Creates triggers in the target database with this option is on.
勾选此选项,触发器也被转换输出。
Create records(包含所有记录)
Check this option if you require all records to be transferred to the destination database.
勾选此选项,所有记录也被转换输出至目标数据库。
Use complete insert statements(使用完整的insert语法)
Inserts records using complete insert syntax.
勾选此选项,插入数据时采用使用完整的insert语法。如:
INSERT INTO ‘users’ (‘ID Number’, ‘User Name’, ‘User Age’) VALUES (’1′, ‘Peter McKindsy’, ’23′);
INSERT INTO ‘users’ (‘ID Number’, ‘User Name’, ‘User Age’) VALUES (’2′, ‘Johnson Ryne’, ’56′);
INSERT INTO ‘users’ (‘ID Number’, ‘User Name’, ‘User Age’) VALUES (’0′, ‘katherine’, ’23′);
Use extended insert statements(使用延伸的insert语法)
勾选此选项,插入数据时采用使用延伸的insert语法。如:
INSERT INTO ‘users’ VALUES (’1′, ‘Peter McKindsy’, ’23′), (’2′, ‘Johnson Ryne’, ’56′), (’0′, ‘Katherine’, ’23′);
Use delayed insert(延时插入)
勾选此选项,插入数据时采用使用延时插入的insert语法。如:
INSERT DELAYED INTO ‘users’ VALUES (’1′, ‘Peter McKindsy’, ’23′);
INSERT DELAYED INTO ‘users’ VALUES (’2′, ‘Johnson Ryne’, ’56′);
INSERT DELAYED INTO ‘users’ VALUES (’0′, ‘katherine’, ’23′);
Add locks when inserting records(数据插入表前锁定)
数据插入表前锁定目标数据库。
Use hexadecimal format for BLOB
Inserts BLOB data as hexadecimal format.
Message Log
日志信息
The Message Log tab allows you to view the running process indicating success or failure. The messages can be saved as text file.
日志信心标签允许您查看数据转换过程中成功或失败的标示。
此信息可保存至文本文档。

参考:http://www.navicat.com/win_manual/index.html