转自:http://zhumeng8337797.blog.163.com/blog/static/1007689142011279194234/
在NT上操作mysql
启动:NET START mysql 停止:NET STOP mysql
杀死MySQL服务器:C:\mysql\bin\mysqladmin -u root shutdown
frm、MYI、MYD 分别是 MyISAM 表的表结构\索引\数据文件
control-D断开 \c
取消命令
3.1 语句
mysql –h 主机名 –u 用户名 –p 用户密码 连接MySQL服务器 | |
如果你在一个表上有索引,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 |
重命名表: | 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; |
直接删除数据库,不提醒 | drop database name //drop database if exists school; //如果存在SCHOOL则删除 |
|
|
帮助命令后: \h := help := \?
? | \? | 同‘help’。 | | \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> CREATE DATABASE 库名;
//――――――――――――――――――――――――――――
创建数据库表
1.
CREATE TABLE shop (
Article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,
dealer CHAR(20) DEFAULT '' NOT NULL,
price DO LE(16,2) DEFAULT '0.00' NOT NULL,
PRIMARY KEY(article, dealer) ) ;
// UNSIGNED ZEROFILL unsigned表明数据类型是无符号的数值类型。zerofill用零来填充。
INSERT INTO shop VALS(1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45),(3,'C',1.69),(3,'D',1.25),(4,'D',19.95);
2.
create table teacher (
id int(3) auto_increment not null primary key,
name char(10) not null, address varchar(50) default '深圳', year date ) ;
//每个记录自动加一: auto_increment
insert into teacher vals('','glchengang','深圳一中','1976-10-10'),('','jack','深圳一中','1975-12-23');
SELECT article, dealer, price FROM shop ORDER BY price DESC
LIMIT 1 // LIMIT子句只得到的第一行
3.2 学习使用
3.2.1 修改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
3.2.2导入/出
导出表:mysqldump --opt school > school.sql
注释:将数据库school中的表全部备份到school.sql文件,school.sql是一个文本文件,文件名任取。
mysqldump --opt school teacher st?nt > school.teacher.st?nt.sql
注释:将数据库school中的teacher表和st?nt表备份到school.teacher.st?nt.sql文件,school.teacher.st?nt.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)
测试:
1.进入安装有MYSQLDUMP的文件夹:
mysqldump -h localhost -u root -p lwf_db shop> d:\shop.sql //-h地址 –u用户名 –p数据库
3.2.3查询问题
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解决你的问题。
3.3 句法与语法
3.3.1 大小写问题
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;这样就是错误的大小写必须一致。
3.3.2 演示引号和转义如何工作:
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 |
+-------+---------+-----------+--------+--------+
3.3.3 引号/斜线
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 |
+----------------------+------+------+------+
(这里,不得不使用 := 句法,因为 = 是为比较保留的)
3.3.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;
注意--注释风格要求你在--以后至少有一个空格!
3.3.5语句用法
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的值比较总为假!
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句法 OPTIMIZE TABLE tbl_name回收闲置的空间。 | |
重命名表,从t1到t2 | mysql> 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), ADDPRIMARY KEY (a); |
删出列c | mysql> ALTER TABLE t2 DROP COLUMN c; |
v