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 �Ch 主机名 �Cu 用户名 �Cp 用户密码 如果你在一个表上有索引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则删除
重命名表:mysql > alter table t1 rename t2;
备份数据库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地址 �Cu用户名 �Cp数据库
查询问题
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到t2mysql> ALTER TABLE t1 RENAME 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;