MysqlLimit出现误差?

在一段更新数据库的代码中,居然出现了虚假的更新动作。

数据库用的是MySql,测试环境是局域网,4核机器,Mysql无事务机制,无存储过程;PHP5.2.x。

 

这段代码需要更新超过300条记录。

每次更新完自己后,需要调用JobManage::synchroJobStatus做同步,同步过程中有一次数据库操作。

 

 < php
$ibegin=0;
while (true) {
$sql = "SELECT JI_ID FROM tb_job_info WHERE JI_CompanyID={$companyID} LIMIT {$ibegin},100";
$jobList = DB::sql($sql, DBName_company);

 if (empty($jobList)) {
	break;
 }

foreach ($jobList as $job){
	$data = array(
		'JS_IsAdminChecked'   => $status,
		'JS_AdminCheckedRemark' => $remark,
		'JS_AdminCheckedTime' => time(),
	);

$where = array('JS_JobID' => $job["JI_ID"]);
$statusInfo = DB::getRow('tb_job_status', $where, DBName_company,'JS_JobID');
if(empty($statusInfo)){
	$iRnt = $this->addJobStatus($job['JI_ID'],$status,$remark);
	if($iRnt<0){
		return 0;
	}
}
$iRtn += DB::edit('tb_job_status', $data, $where, DBName_company);
$statusInfo = array_merge($statusInfo,$data);

$data = array(
	'LC_Type' => $isAdminCheck,
	'LC_AdminID'=>$checkAdminID,
	'LC_CheckStatus' => $status,
	'LC_HitWords'  => $remark,
	'LC_UpdateTime' => time()
);
$where = array('LC_CompanyID' => $companyID,'LC_JobID' =>$job["JI_ID"]);
$exist = DB::getRow('tb_log_checkjob',$where,DBName_company,'LC_CompanyID');
if(!empty($exist)){
	DB::edit('tb_log_checkjob',$data,$where,DBName_company);
}else{
	$data = array_merge($data,$where,array('LC_AddTime' => time()));
	$result = DB::add('tb_log_checkjob',$data,DBName_company);
}

JobManage::synchroJobStatus($statusInfo);
}

 $ibegin+=100;

 }
 >

更新的语句关键是这条:DB::edit(‘tb_job_status’, $data, $where, DBName_company);

 上面的问题是:

1.查询数据库,一轮300多条记录中,有100多条记录的该语句没有生效。
2.这条语句每次都返回了更新成功。

3.数据能够完整的读取,没有遗漏。

 

经过修改:

 < php
//$ibegin=0;
//while (true) {
$sql = "SELECT JI_ID FROM tb_job_info WHERE JI_CompanyID={$companyID}";// LIMIT {$ibegin},100";
$jobList = DB::sql($sql, DBName_company);

 //if (empty($jobList)) {
//	break;
 //}

foreach ($jobList as $job){
	$data = array(
		'JS_IsAdminChecked'   => $status,
		'JS_AdminCheckedRemark' => $remark,
		'JS_AdminCheckedTime' => time(),
	);

$where = array('JS_JobID' => $job["JI_ID"]);
$statusInfo = DB::getRow('tb_job_status', $where, DBName_company,'JS_JobID');
if(empty($statusInfo)){
	$iRnt = $this->addJobStatus($job['JI_ID'],$status,$remark);
	if($iRnt<0){
		return 0;
	}
}
$iRtn += DB::edit('tb_job_status', $data, $where, DBName_company);
$statusInfo = array_merge($statusInfo,$data);

$data = array(
	'LC_Type' => $isAdminCheck,
	'LC_AdminID'=>$checkAdminID,
	'LC_CheckStatus' => $status,
	'LC_HitWords'  => $remark,
	'LC_UpdateTime' => time()
);
$where = array('LC_CompanyID' => $companyID,'LC_JobID' =>$job["JI_ID"]);
$exist = DB::getRow('tb_log_checkjob',$where,DBName_company,'LC_CompanyID');
if(!empty($exist)){
	DB::edit('tb_log_checkjob',$data,$where,DBName_company);
}else{
	$data = array_merge($data,$where,array('LC_AddTime' => time()));
	$result = DB::add('tb_log_checkjob',$data,DBName_company);
}

JobManage::synchroJobStatus($statusInfo);
}

 //$ibegin+=100;

 //}
 >

 

问题不再存在· · 

何种原因,导致这个错误出现呢?

初步断定 Limit 出现了这个误差!

具体如何产生的,还有待分析。

 

c#带参数的sql语句写入mysql,

下面是别人解决问题的总结:

问题解决了。总结一下:
1.mysql数据库驱动有两种:mysql-connector-odbc和mysql-connector-net,
前者不支持参数,后者支持,这是我测试的结果;
2.参数变量使用跟SqlServer一样,只需把@变为?,
如,mysql中写为:insert into test values ( id, title, type,now())”;
3.使用mysql-connector-net驱动很简单,到网上下载mysql-connector-net-5.2.3-src,
解压后,把mysql.data.dll添加到项目的bin文件夹即可使用;
4.连接本机mysql数据库方法例子如下—mysql-connector-net:

1)Using Web.config

<connectionstrings>
<add name=”WhateverName” connectionString=”server=localhost;user id=root; password=yourPassword;database=yourDatabase;;charset=utf8;“/>
</connectionstrings>

charset=utf8字符集

2)using statements

using MySql.Data.MySqlClient;

下面附上测试通过的代码:
string connStr = WebConfigurationManager.
ConnectionStrings[“WhateverName”].ConnectionString;
MySqlConnection conn = new MySqlConnection(connStr);
if (conn != null)
conn.Open();
else
return;

string SQL_INSERT_TOPIC = “insert into test values (null, title, type,now())”;
string PARM_TITLE = ” title”;
string PARM_TYPE = ” type”;
MySqlParameter[] parms = new MySqlParameter[]
{
new MySqlParameter(PARM_TITLE,MySqlDbType.VarChar,80),
new MySqlParameter(PARM_TYPE,MySqlDbType.VarChar,1)
};
parms[0].Value = “welcome to beijing”;
parms[1].Value = “C”;

MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = SQL_INSERT_TOPIC;

foreach (MySqlParameter pram in parms)
cmd.Parameters.Add(pram);

cmd.ExecuteNonQuery();
conn.Close();

5.连接本机mysql数据库方法例子如—mysql-connector-odbc

 

转自:

http://dotnetperls.com/Content/OdbcConnection-Example.aspx

MYSQL导入导出.sql文件

一.MYSQL的命令行模式的设置:
桌面->我的电脑->属性->环境变量->新建->
PATH=“;path\mysql\bin;”其中path为MYSQL的安装路径。
二.简单的介绍一下命令行进入MYSQL的方法:
1.C:\>mysql -h hostname -u username -p
按ENTER键,等待然后输入密码。这里hostname为服务器的名称,如localhost,username为MYSQL的用户名,如root。
进入命令行后可以直接操作MYSQL了。
2.简单介绍一下MYSQL命令:
   mysql->CREATE DATABASE dbname;//创建数据库
   mysql->CREATE TABLE tablename;//创建表
   mysql->SHOW DATABASES;//显示数据库信息,有那些可用的数据库。
  mysql->USE dbname;//选择数据库
   mysql->SHOW TABLES;//显示表信息,有那些可用的表
   mysql->DESCRIBE tablename;//显示创建的表的信息
三.从数据库导出数据库文件:
1.将数据库mydb导出到e:\mysql\mydb.sql文件中:
打开开始->运行->输入cmd    进入命令行模式
c:\>mysqldump -h localhost -u root -p mydb >e:\mysql\mydb.sql
然后输入密码,等待一会导出就成功了,可以到目标文件中检查是否成功。
2.将数据库mydb中的mytable导出到e:\mysql\mytable.sql文件中:
c:\>mysqldump -h localhost -u root -p mydb mytable>e:\mysql\mytable.sql
3.将数据库mydb的结构导出到e:\mysql\mydb_stru.sql文件中:
c:\>mysqldump -h localhost -u root -p mydb –add-drop-table >e:\mysql\mydb_stru.sql
四.从外部文件导入数据到数据库中:
从e:\mysql\mydb2.sql中将文件中的SQL语句导入数据库中:
1.从命令行进入mysql,然后用命令CREATE DATABASE mydb2;创建数据库mydb2。
2.退出mysql 可以输入命令exit;或者quit;
3.在CMD中输入下列命令:
c:\>mysql -h localhost -u root -p mydb2 < e:\mysql\mydb2.sql
然后输入密码,就OK了。
五.下面谈一下关于导入文件大小限制问题的解决:
默认情况下:mysql 对导入文件大小有限制的,最大为2M,所以当文件很大时候,直接无法导入,下面就这个问题的解决列举如下:
1.在php.ini中修改相关参数:
影响mysql导入文件大小的参数有三个:
    memory_limit=128M,upload_max_filesize=2M,post_max_size=8M
修改upload_max_filesize=200 M  这里修改满足你需要的大小,
可以同时修改其他两项memory_limit=250M  post_max_size=200M
这样就可以导入200M以下的.sql文件了。

MySQL资源设置

max_connections=500
wait_timeout=10
max_connect_errors = 100

连接最大个数是在第一行中进行管理的。与 Apache 中的 MaxClients 类似,其想法是确保只建立服务允许数目的连接。要确定服务器上目前建立过的最大连接数,请执行

SHOW STATUS LIKE ‘max_used_connections’。

第 2 行告诉 mysqld 终止所有空闲时间超过 10 秒的连接。在 LAMP 应用程序中,连接数据库的时间通常就是 Web 服务器处理请求所花费的时间。有时候,如果负载过重,

连接会挂起,并且会占用连接表空间。如果有多个交互用户或使用了到数据库的持久连接,那么将这个值设低一点并不可取!

最后一行是一个安全的方法。如果一个主机在连接到服务器时有问题,并重试很多次后放弃,那么这个主机就会被锁定,直到 FLUSH HOSTS 之后才能运行。默认情况下,

10 次失败就足以导致锁定了。将这个值修改为 100 会给服务器足够的时间来从问题中恢复。如果重试 100 次都无法建立连接,那么使用再高的值也不会有太多帮助,

可能它根本就无法连接。

mysqldump导出数据到mssql

mysqldump -u root -ppassword --no-create-db --no-create-info --complete-insert --compatible=mssql 
 --default-character-set=utf8 --skip-opt --compact  --extended-insert=false  
 dbname tablename|sed "s/\\\'/''/g">tablename.sql

 

–no-create-db 不输出建database的脚本

–no-create-info 不输出创建table的脚本

–complete-insert   完整的插入,输出每个字段(如: insert into table(field1,field2,….) values(value1,value2,…))

–compatible=mssql 教本兼容格式,这里是mssql 这样教本里就会把table的名字和字段名用“号引起来,而不是mssql不能识别的`号。

–default-character-set=utf8 默认编码

–compact 输出尽量少的信息

–extended-insert=false  禁用它,可以每行生成一句insert语句。否则只输出一个insert,如:insert into table values(value1,value2,…),(value1,value2,…),…(value1,value2,..)。这种格式sqlserver不识别。

 

 

mysql中用\转义 字符串里的 单引号等字符,而sqlserver的字符串中两个单引号表示一个单引号。没找到mysqldump指定转义字符的选项。有个fields-escaped-by选项,但只有在输出文本格式的时候有用,输出sql语句的时候不能用。

 

所以只好用sed替换一下。

 

sed "s/\\\'/''/g"

 

ibatis新手上路

概念:

iBATIS , 又是一个O/R Mapping的解决方案(例如 hibernate的ORM 也是解决方案之一.)

网上很多人便将其称为ORM , 但是用过的人, 应该都会觉得并不恰当.

与其称之为一个OR Mapping , 倒不如叫它SQL Mapping…

iBATIS 的特点是小巧, 简单. 但是要求需要熟悉SQL , 不像hibernate那样, 可以让你一句sql 都不用写

同时, 我觉得要写挺多的配置文件的. 可能会比较繁琐.

sample

还是拿最简单的 User 类来测试. User.java  

public class User {  

 

    private int id;  

    private String username;  

    private String userpwd;  

    private String userdesc;  

 

        //Sets and Gets…  



public class User {

private int id;

private String username;

private String userpwd;

private String userdesc;

        //Sets and Gets…

接下来… 马上看看… dao里面的一个方法有多简单~~ UserDao.java

 

Java代码 

public static List getAllUsers() throws SQLException {  

                  

               SqlMapClient sqlMap = Utils.getSqlmap();  

       try {  

            List li = sqlMap.queryForList(“getAllUsers”);  

              

       } catch (SQLException e) {  

               e.printStackTrace();  

        }  

        return li;  



public static List getAllUsers() throws SQLException {

               

               SqlMapClient sqlMap = Utils.getSqlmap();

try {

List li = sqlMap.queryForList(“getAllUsers”);

} catch (SQLException e) {

e.printStackTrace();

}

return li;

是的, dao里面的一个方法只需要这么几句话.

看看怎么实现的吧…

首先, 我们需要一个跟 User 类对应的 配置文件 User.xml(名字相同并不是硬性规定, 只是方便管理)

Xml代码 

< xml version=”1.0″ encoding=”UTF-8″  > 

<!DOCTYPE sqlMap PUBLIC “-//ibatis.apache.org//DTD SQL Map 2.0//EN”  

   “http://ibatis.apache.org/dtd/sql-map-2.dtd”> 

 

<sqlMap namespace=”User”> 

 

        <typeAlias alias=”user” type=”pojo.User”/> 

 

   <select id=”getAllUsers” resultClass=”user”> 

       select * from user order by id;   

    </select> 

</sqlMap> 

< xml version=”1.0″ encoding=”UTF-8″  >

<!DOCTYPE sqlMap PUBLIC “-//ibatis.apache.org//DTD SQL Map 2.0//EN”

   “http://ibatis.apache.org/dtd/sql-map-2.dtd”>

<sqlMap namespace=”User”>

        <typeAlias alias=”user” type=”pojo.User”/>

<select id=”getAllUsers” resultClass=”user”>

select * from user order by id;

</select>

</sqlMap>

接下来, 需要一个另一个配置文件, 将User.xml 加入 其中, 同时还要在里面配置数据源—- 即数据库的连接等等…   SqlMapConfig.xml

Xml代码 

< xml version=”1.0″ encoding=”UTF-8″ > 

 

<!DOCTYPE sqlMapConfig PUBLIC “-//ibatis.apache.org//DTD SQL Map Config 2.0//EN”  

    “http://ibatis.apache.org/dtd/sql-map-config-2.dtd”> 

<sqlMapConfig> 

      

   <properties resource=”sqlmap.properties”/> 

         

    <transactionManager type=”JDBC”> 

        <dataSource type=”SIMPLE”>      

           <property name=”JDBC.Driver” value=”${jdbc.driverClassName}” /> 

            <property name=”JDBC.ConnectionURL” value=”${jdbc.url}” /> 

           <property name=”JDBC.Username” value=”${jdbc.username}” /> 

            <property name=”JDBC.Password” value=”${jdbc.password}” /> 

       </dataSource> 

   </transactionManager> 

    <sqlMap resource=”sql/User.xml” /> 

 

</sqlMapConfig> 

< xml version=”1.0″ encoding=”UTF-8″ >

<!DOCTYPE sqlMapConfig PUBLIC “-//ibatis.apache.org//DTD SQL Map Config 2.0//EN”

“http://ibatis.apache.org/dtd/sql-map-config-2.dtd”>

<sqlMapConfig>

<properties resource=”sqlmap.properties”/>

<transactionManager type=”JDBC”>

<dataSource type=”SIMPLE”>   

<property name=”JDBC.Driver” value=”${jdbc.driverClassName}” />

<property name=”JDBC.ConnectionURL” value=”${jdbc.url}” />

<property name=”JDBC.Username” value=”${jdbc.username}” />

<property name=”JDBC.Password” value=”${jdbc.password}” />

</dataSource>

</transactionManager>

<sqlMap resource=”sql/User.xml” />

</sqlMapConfig>

在这里, 我们把数据库的相关参数保存在了另一个文件中, sqlmap.properties

Java代码 

jdbc.driverClassName=com.mysql.jdbc.Driver  

jdbc.url=jdbc:mysql://localhost:3306/myblog  

jdbc.username=root  

jdbc.password=netjava 

jdbc.driverClassName=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/myblog

jdbc.username=root

jdbc.password=ipanel

这样做的好处, 相信大家也明白..  下次我们再写一个项目的时候, 只需要把这个文件copy 过去, 改掉其中的数据库连接就ok啦 ,  也算是资源的充分利用吧..

至此, 所有的配置文件 都已经上场, 当然上面写的都是最简单的测试, 看起来比较没有那么繁琐, 实际应用时候, 可能最麻烦的地方就是在 配置文件的 sqlmap 的编写…

前面 UserDao.java 的方法中, 有这么一句

Java代码 

1.SqlMapClient sqlMap = Utils.getSqlmap(); 

SqlMapClient sqlMap = Utils.getSqlmap();

Utils 类 就是我们抽取其中的初始化的代码, 单独写成一个类, 当然还是方便重用哈.同时采用的是单实例模式, 相当环保.

  Utils.java

Java代码 

1.public class Utils{  

2.      

3.    private static SqlMapClient sqlMapper;   

4.    public static synchronized SqlMapClient getSqlmap()   

5.    {     

6.          if(sqlMapper==null)   

7.          {   

8.              try {   

9.                  Reader reader = Resources.getResourceAsReader(“SqlMapConfig.xml”);   

10.                  sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);   

11.                  reader.close();   

12.                } catch (IOException e) {   

13.                    e.printStackTrace();   

14.                }   

15.          }   

16.            return sqlMapper;   

17.    }   

18.} 

public class Utils{

private static SqlMapClient sqlMapper;

    public static synchronized SqlMapClient getSqlmap()

    {  

          if(sqlMapper==null)

          {

              try {

                  Reader reader = Resources.getResourceAsReader(“SqlMapConfig.xml”);

                  sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);

                  reader.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

          }

            return sqlMapper;

    }

}

好了,  所有的相关文件都已经上场..  当然, 加上 iBATIS的 jar包是前提 , 还是提醒下, 要注意版本问题…

UserDao 是怎样操作数据库的

首先 , Utils 通过SqlMapConfig.xml里面的配置, 连接到数据库, 取得SqlMap , 同时User.xml 将Sql查询映射成java中可以调用的bean, 通过SqlMap 调用这些bean 就是在执行想对应的sql语句…

  • 大小: 23.1 KB

mysql获取本周本月数据

单纯sql 的 datediff() getDate() 函数在 mysql 中不能使用

mysql里统计本月、本周记录,在sql语句后加上以下条件即可

month(outdate)=month(curdate()) and
year(outdate)=year(curdate()) and
week(outdate)=week(curdate());

 

mysql命令

测试环境:mysql 5.0.45

【注:可以在mysql中通过mysql> SELECT VERSION();来查看数据库版本】

整理:leo

一、连接MYSQL。

格式: mysql -h主机地址 -u用户名 -p用户密码

1、连接到本机上的MYSQL。

首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码.

如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>

2、连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:

mysql -h110.110.110.110 -u root -p 123;(注:u与root之间可以不用加空格,其它也一样)

3、退出MYSQL命令: exit (回车)

二、修改密码。

格式:mysqladmin -u用户名 -p旧密码 password 新密码

1、给root加个密码ab12。首先在DOS下进入目录mysql\bin,然后键入以下命令

mysqladmin -u root -password ab12

注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。

2、再将root的密码改为djg345。

mysqladmin -u root -p ab12 password djg345

三、增加新用户。

(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)

格式:grant select on 数据库.* to 用户名@登录主机 identified by “密码”

1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用root用户连入MYSQL,然后键入以下命令:

grant select,insert,update,delete on *.* to [email=test1@”%]test1@”%[/email]” Identified by “abc”;

但增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见2。

2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),

这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。

grant select,insert,update,delete on mydb.* to [email=test2@localhost]test2@localhost[/email] identified by “abc”;

如果你不想test2有密码,可以再打一个命令将密码消掉。

grant select,insert,update,delete on mydb.* to [email=test2@localhost]test2@localhost[/email] identified by “”;

下篇我是MYSQL中有关数据库方面的操作。注意:你必须首先登录到MYSQL中,以下操作都是在MYSQL的提示符下进行的,而且每个命令以分号结束。

一、操作技巧

1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。

也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就OK。

2、你可以使用光标上下键调出以前的命令。

二、显示命令

1、显示当前数据库服务器中的数据库列表:

mysql> SHOW DATABASES;

注意:mysql库里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。

2、显示数据库中的数据表:

mysql> USE 库名;

mysql> SHOW TABLES;

3、显示数据表的结构:

mysql> DESCRIBE 表名;

4、建立数据库:

mysql> CREATE DATABASE 库名;

5、建立数据表:

mysql> USE 库名;

mysql> CREATE TABLE 表名 (字段名 VARCHAR(20), 字段名 CHAR(1));

6、删除数据库:

mysql> DROP DATABASE 库名;

7、删除数据表:

mysql> DROP TABLE 表名;

8、将表中记录清空:

mysql> DELETE FROM 表名;

9、显示表中的记录:

mysql> SELECT * FROM 表名;

10、往表中插入记录:

mysql> INSERT INTO 表名 VALUES (”hyq”,”M”);

11、更新表中数据:

mysql-> UPDATE 表名 SET 字段名1=’a’,字段名2=’b’ WHERE 字段名3=’c’;

12、用文本方式将数据装入数据表中:

mysql> LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE 表名;

13、导入.sql文件命令:

mysql> USE 数据库名;

mysql> SOURCE d:/mysql.sql;

14、命令行修改root密码:

mysql> UPDATE mysql.user SET password=PASSWORD(’新密码’) WHERE User=’root’;

mysql> FLUSH PRIVILEGES;

15、显示use的数据库名:

mysql> SELECT DATABASE();

16、显示当前的user:

mysql> SELECT USER();

三、一个建库和建表以及插入数据的实例

drop database if exists school; //如果存在SCHOOL则删除

create database school; //建立库SCHOOL

use school; //打开库SCHOOL

create table teacher //建立表TEACHER

(

id int(3) auto_increment not null primary key,

name char(10) not null,

address varchar(50) default ‘深圳’,

year date

); //建表结束

//以下为插入字段

insert into teacher values(”,’allen’,’大连一中’,’1976-10-10′);

insert into teacher values(”,’jack’,’大连二中’,’1975-12-23′);

如果你在mysql提示符键入上面的命令也可以,但不方便调试。

(1)你可以将以上命令原样写入一个文本文件中,假设为school.sql,然后复制到c:\\下,并在DOS状态进入目录\\mysql\\bin,然后键入以下命令:

mysql -uroot -p密码 < c:\\school.sql

如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你只要将//的注释去掉即可使用)。

(2)或者进入命令行后使用 mysql> source c:\\school.sql; 也可以将school.sql文件导入数据库中。

四、将文本数据转到数据库中

1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用\\n来代替.例:

3 rose 大连二中 1976-10-10

4 mike 大连一中 1975-12-23

假设你把这两组数据存为school.txt文件,放在c盘根目录下。

2、数据传入命令 load data local infile “c:\\school.txt” into table 表名;

注意:你最好将文件复制到\\mysql\\bin目录下,并且要先用use命令打表所在的库。

五、备份数据库:(命令在DOS的\\mysql\\bin目录下执行)

1.导出整个数据库

导出文件默认是存在mysql\bin目录下

mysqldump -u 用户名 -p 数据库名 > 导出的文件名

mysqldump -u user_name -p123456 database_name > outfile_name.sql

2.导出一个表

mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名

mysqldump -u user_name -p database_name table_name > outfile_name.sql

3.导出一个数据库结构

mysqldump -u user_name -p -d –add-drop-table database_name > outfile_name.sql

-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table

4.带语言参数导出

mysqldump -uroot -p –default-character-set=latin1 –set-charset=gbk –skip-opt database_name > outfile_name.sql

sqlalert添加、修改、删除字段语法实例

sql alert 添加、修改、删除字段语法实例

sql alert 添加、修改、删除字段语法实例
alter table 的语法如下:

alter table “table_name”
主键

   alter table tabelname add new_field_id int(5) unsigned default 0 not null auto_increment ,add primary key (new_field_id);
//增加一个新列

   alter table t2 add d timestamp;
alter table infos add ex tinyint not null default ‘0’;
//删除列

   alter table t2 drop column c;
//重命名列

   alter table t1 change a b integer;

//改变列的类型

   alter table t1 change b b bigint not null;
alter table infos change list list tinyint not null default ‘0’;

//重命名表

   alter table t1 rename t2;
加索引

   mysql教程> alter table tablename change depno depno int(5) not null;
mysql> alter table tablename add index 索引名 (字段名1[,字段名2 …]);
mysql> alter table tablename add index emp_name (name);
加主关键字的索引

mysql> alter table tablename add primary key(id);
加唯一限制条件的索引

  mysql> alter table tablename add unique emp_name2(cardnumber);
删除某个索引

   mysql>alter table tablename drop index emp_name;
修改表:

增加字段:

   mysql> alter table table_name add field_name field_type;
修改原字段名称及类型:

   mysql> alter table table_name change old_field_name new_field_name field_type;
删除字段:

   mysql> alter table table_name drop field_name;
  
  
   alter table 语句
alter table 语句用于在已有的表中添加、修改或删除列。

sql alter table 语法
如需在表中添加列,请使用下列语法:

alter table table_name
add column_name datatype
要删除表中的列,请使用下列语法:

alter table table_name
drop column column_name
注释:某些数据库教程系统不允许这种在数据库表中删除列的方式 (drop column column_name)。

要改变表中列的数据类型,请使用下列语法:

alter table table_name
alter column column_name datatype
原始的表 (用在例子中的):
persons 表:

id lastname firstname address city
1 adams john oxford street london
2 bush george fifth avenue new york
3 carter thomas changan street beijing
sql alter table 实例
现在,我们希望在表 “persons” 中添加一个名为 “birthday” 的新列。

我们使用下列 sql 语句:

alter table persons
add birthday date
请注意,新列 “birthday” 的类型是 date,可以存放日期。数据类型规定列中可以存放的数据的类型。

新的 “persons” 表类似这样:

id lastname firstname address city birthday
1 adams john oxford street london  
2 bush george fifth avenue new york  
3 carter thomas changan street beijing  
改变数据类型实例
现在我们希望改变 “persons” 表中 “birthday” 列的数据类型。

我们使用下列 sql 语句:

alter table persons
alter column birthday year
请注意,”birthday” 列的数据类型是 year,可以存放 2 位或 4 位格式的年份。
drop column 实例
接下来,我们删除 “person” 表中的 “birthday” 列:

alter table person
drop column birthdaypersons