MySQL 部分用法--1.在NT上操作mysql(管理员身份运行dos)

启动:NET START mysql                  停止:NET STOP mysql

杀死MySQL服务器:C:\mysql\bin\mysqladmin -u root shutdown

 

2.frm、MYI、MYD  分别是MyISAM  表的表结构\索引\数据文件

control-D断开  \c 取消命令

3.1 语句

连接MySQL服务器 mysql –h 主机名 –u 用户名 –p 用户密码           如果你在一个表上有索引 SHOW INDEX FROM tbl_name生成有关它们的信息

当前是哪个数据库 mysql> SELECT  DATABASE();

当前数据库包含哪些表 mysql> SHOW  TABLES;

查看表结构 mysql> DESCRIBE 表名;

查看服务器上当前存在什么数据库 mysql> SHOW  DATABASES;

如果test数据库存在,尝试存取它 mysql> USE test;// USE语句,必须在一个单行上给出,不需要一个分号

创建数据库 mysql> CREATE  DATABASE 库名;

创建数据库中的表  create table TABLENAME (NAME1 int, NAME2 char(10), …… );

删除数据库前,有提示 mysqladmin drop databasename

直接删除数据库,不提醒 drop database name

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

重命名表:

备份数据库 shell> mysqldump -h host -u root -p dbname >dbname_backup.sql

恢复数据库 shell> mysqladmin -h myhost -u root -p create dbname

表中增加字段

alter table dbname add column userid int(11) not null primary key auto_increment;

 

帮助命令后:     \h := help := \?

? \? 同‘help’。

Print \p 打印当前命令

Clear \c 清除命令。

Prompt \R 改变提示符

Connect \r连接服务器,可选数据库和主机。

Quit \q退出

 

Delimiter \d 设置定界符,

Rehash \# 彻底重建无用信息

Ego \G 发送命令到服务器,直显结果。

Source \. 执行一个SQL脚本,

Exit \q 退出,同quit

Status \s 取得服务器信息

Go \g 发送命令到服务器

Tee \T 设置输出文件,并追加。

Help \h 显示帮助

Use \u 使用另一个数据库。

Notee \t 不能写入输出文件。

Warnings \W 每一条语句后显警告。

Nowarning \w不显警告

 

修改mysql中用户密码

#在控制台上输入

bash$ mysql -u root mysql      #用mysql客户程序

mysql> update user set password=password("new password") where user='hunte';

mysql> flush privileges; //刷新数据库

mysql> quit

 

bash$ mysql -u root mysql

mysql> set password for hunte=password('new password');

mysql> quit

 

bash$ mysqladmin -u root "old password" "new password"

mysql 改了root密码后无法登录:-u和root之间不留空格     mysql   -uroot   -p

 

导入/出

导出表:mysqldump --opt school > school.sql

注释:将数据库school中的表全部备份到school.sql文件,school.sql是一个文本文件,文件名任取。

 

mysqldump --opt school teacher student > school.teacher.student.sql

注释:将数据库school中的teacher表和st?nt表备份到school.teacher.student.sql文件,school.teacher.student.sql是一个文本文件,文件名任取,打开看看你会有新发现。

 

导入表:mysql>create database school;      mysql>use school;

mysql>source school.sql;  (或将school.sql换为school.teacher.sql / school.teacher.st?nt.sql)

 

导出数据库:mysqldump --databases db1 db2 > db1.db2.sql

注释:将数据库dbl和db2备份到db1.db2.sql文件,db1.db2.sql是一个文本文件,文件名任取。(举个例子:mysqldump -h host -u user -p pass --databases dbname > file.dump就是把

 

host上的以名字user,口令pass的数据库dbname导入到文件file.dump中。)

 

导入数据库:mysql < db1.db2.sql

复制数据库:mysqldump --all-databases > all-databases.sql

注释:将所有数据库备份到all-databases.sql文件,all-databases.sql是一个文本文件,文件名任取。

 

导入数据库

mysql>drop database a;   

mysql>drop database b;           

mysql>drop database c;  

mysql>source all-databases.sql;   (或exit退出mysql后 mysql < all-databases.sql)

 

测试:进入安装有MYSQLDUMP的文件夹:

mysqldump -h localhost -u root -p lwf_db shop> d:\shop.sql           

//-h地址 –u用户名 –p数据库

 

查询问题

1.不支持IN和NOT IN

在MySQL中下列语句还不能工作:

SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);

SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2);

 

然而,在很多情况下,你可以重写查询,而不用子选择:

SELECT table1.* FROM table1,table2 WHERE table1.id=table2.id;

SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id where table2.id IS NULL

 

2.MySQL还不支持Oracle SQL的扩展:SELECT ... INTO TABLE ....,相反MySQL支持ANSI SQL句法INSERT INTO ... SELECT ...,基本上他们是一样的。另外,你可使用SELECT INTO OUTFILE...或CREATE TABLE ... SELECT解决你的问题。

 

句法与语法

大小写问题

MySQL在windows下是不区分大小写的;在linux下表名区分大小写;如何让在windows下大小写敏感,相应的更改windows中MySQL的设置就行了。在MySQL的配置文件my.ini中增加一行:lower_case_table_names = 0其中0:区分大小写,1:不区分大小写

 

MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:

1、数据库名与表名是严格区分大小写的;

2、表的别名是严格区分大小写的;

3、列名与列的别名在所有的情况下均是忽略大小写的;

4、变量名也是严格区分大小写的;

 

mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;这样就是错误的大小写必须一致。

 

演示引号和转义如何工作:

mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello';
+-------+---------+-----------+--------+--------+
| hello | "hello" | ""hello"" | hel'lo | 'hello |
+-------+---------+-----------+--------+--------+
 
mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello";
+-------+---------+-----------+--------+--------+
| hello | 'hello' | ''hello'' | hel"lo | "hello |
+-------+---------+-----------+--------+--------+

 

引号/斜线

NUL         ASCII  0。                         用'\0'(一个反斜线和一个ASCII '0')表示它。

\                ASCII  92,    反斜线。用'\\'表示。

'                  ASCII  39,    单引号。用“\'”表示。

"               ASCII  34,    双引号。用“\"”表示。

如果标识符是一个限制词或包含特殊字符用单引号引用。

select @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
+----------------------+------+------+------+
| @t1:=(@t2:=1)+@t3:=4 | @t1  | @t2  | @t3  |
+----------------------+------+------+------+
|                    5 |    5 |    1 |    4 |
+----------------------+------+------+------+

(这里,不得不使用 := 句法,因为 = 是为比较保留的)

 

注释句法

MySQL服务器支持# to end of line、-- to end of line和/* in-line or multiple-line */注释风格:

mysql> select 1+1;     # This comment contins to the end of line

mysql> select 1+1;     -- This comment contins to the end of line

mysql> select 1 /* this is an in-line comment */ + 1;

注意--注释风格要求你在--以后至少有一个空格!

 

语句用法

expr BETWEEN min AND max

如果expr对大于或等于min且expr是小于或等于max,BETWEEN返回1,否则它返回0。如果所有的参数类型是一样得,这等价于表达式(min <= expr AND expr <= max)。第一个参数(expr)决定比较如何被执行。如果expr是一个大小写不敏感的字符串表达式,进行一个大小写不敏感的字符串比较。如果expr是一个大小写敏感的字符串表达式,进行一个大小写敏感的字符串比较。如果expr是一个整数表达式,进行整数比较。否则,进行一个浮点(实数)比较。

mysql> select 1 BETWEEN 2 AND 3;                -> 0

mysql> select 'b' BETWEEN 'a' AND 'c';          -> 1

mysql> select 2 BETWEEN 2 AND '3';              -> 1

mysql> select 2 BETWEEN 2 AND 'x-3';           -> 0  //大小比较,->是返回“真/假”值

 

expr IN (val,...)

如果expr是在IN表中的任何值,返回1,否则返回0。如果所有的值是常数,那么所有的值根据expr类型被计算和排序,然后项目的搜索是用二进制的搜索完成。这意味着如果IN值表全部由常数组成,IN是很快的。如果expr是一个大小写敏感的字符串表达式,字符串比较以大小写敏感方式执行。

mysql> select 2 IN (0,3,5,'wefwf');                   -> 0

mysql> select 'wefwf' IN (0,3,5,'wefwf');        -> 1

expr NOT IN (val,...) 与NOT (expr IN (val,...))相同。

ISNULL(expr) 如果expr是NULL,ISNULL()返回1,否则它返回0。

mysql> select ISNULL(1+1);                                -> 0

mysql> select ISNULL(1/0);                                -> 1

注意,使用=的NULL的值比较总为假!

 

expr IN (val,...)

如果expr是在IN表中的任何值,返回1,否则返回0。如果所有的值是常数,那么所有的值根据expr类型被计算和排序,然后项目的搜索是用二进制的搜索完成。这意味着如果IN值表全部由常数组成,IN是很快的。如果expr是一个大小写敏感的字符串表达式,字符串比较以大小写敏感方式执行。

mysql> select 2 IN (0,3,5,'wefwf');                   -> 0

mysql> select 'wefwf' IN (0,3,5,'wefwf');        -> 1

 

expr NOT IN (val,...) 与NOT (expr IN (val,...))相同。

ISNULL(expr) 如果expr是NULL,ISNULL()返回1,否则它返回0。

mysql> select ISNULL(1+1);                                -> 0

mysql> select ISNULL(1/0);                                -> 1

 

注意,使用=的NULL的值比较总为假!

 

COALESCE(list) 回来list中第一个非NULL的单元。 //coalesce接合      coal煤

mysql> select COALESCE(NULL,1);                   -> 1

mysql> select COALESCE(NULL,NULL,NULL);     -> NULL

 

INTERVAL(N,N1,N2,N3,...)                                                   //interval间隔, 距离

如果N< N1,返回0,如果N< N2,返回1等等。所有的参数被当作整数。为了函数能正确地工作,它要求N1<N2<N3< ...<Nn。这是因为使用二进制搜索(很快)。 //与最先大于第一个数的间隔几个位置。

mysql> select INTERVAL(23, 1, 15, 17, 30, 44, 200);     -> 3

mysql> select INTERVAL(10, 1, 10, 100, 1000);         -> 2

mysql> select INTERVAL(22, 23, 30, 44, 200);          -> 0 

 

ALTER TABLE句法                    

重命名表,从t1到t2

为了改变列a,从INTEGER改为TINYINT NOT NULL(名字一样),并且改变列b,从CHAR(10)改为CHAR(20),同时重命名它,从b改为c

mysql> ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b c CHAR(20);

增加一个新TIMESTAMP列,名为d

mysql> ALTER TABLE t2 ADD d TIMESTAMP;

在列d上增加一个索引,并且使列a为主键

mysql> ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a);

删出列c

mysql> ALTER TABLE t2 DROP COLUMN c;