mysql 常用命令
2012-04-25 20:44
253 查看
相关文章
mysql常用命令集 http://www.360doc.com/content/10/0608/01/276520_31866098.shtml
启动/停止mysql服务
net stop mysql
net start mysql
连接本地主机:
shell>mysql -u root -p
连接远程主机
shell>mysql -h 111.111.111.111 -u root -p xxx
授权使用:
mysql>create database testdb;
mysql>grant all on testdb.* to user identified by 'pwd'
此时默认是本地主机localhost登录,ip地址是127.0.0.1,所以如果用客户端登录会出错。解决办法是给客户端的ip地址授权。
mysql>grant all on *.* to root@111.111.111.111 identified by 'pwd'
第一个*表示所有数据库,第二个表示该数据中的所有表。
mysql>grant select/insert/update/delete/create on testdb.* to user@111.111.111.111 identified by 'pwd'
全局管理权限:
FILE: 在MySQL服务器上读写文件。
PROCESS: 显示或杀死属于其它用户的服务线程。
RELOAD: 重载访问控制表,刷新日志等。
SHUTDOWN: 关闭MySQL服务。
数据库/数据表/数据列权限:
ALTER: 修改已存在的数据表(例如增加/删除列)和索引。
CREATE: 建立新的数据库或数据表。
DELETE: 删除表的记录。
DROP: 删除数据表或数据库。
INDEX: 建立或删除索引。
INSERT: 增加表的记录。
SELECT: 显示/搜索表的记录。
UPDATE: 修改表中已存在的记录。
特别的权限:
ALL: 允许做任何事(和root一样)。
USAGE: 只允许登录--其它什么也不允许做。
删除授权:
mysql>revoke all privileges on *.* from root@"%";
mysql>delete from user where user="root" and host="%";
mysql>flush privileges;
备份数据库
shell>mysqldump -h host -u user -p dbname >dbname_backup.sql
恢复数据库
shell>mysqladmin -h host -u user -p create dbname
shell>mysql -h host -u user -p dbname<dbname_backup.sql
显示当前数据库版本和时间
mysql>select version(), current_date;
库操作
mysql>create database dbname;
mysql>show databases;
mysql>drop database dbname;
mysql>use dbname;
查看当前数据库:
mysql>select database();
表操作
显示所有表
mysql>show tables;
显示表的所有字段
mysql>desc tablename;
删除表
mysql>drop table tablename;
清空表
mysql>delete from tablename;
重命名表
mysql>alter table name1 rename name2
mysql>rename table tablename1 to tablename2;
创建表:
mysql>create table user (
id int(11) not null auto_increment,
name varchar(60) not null ,
state int(11) not null default 0,
time timestamp not null default current_timestamp on update current_timestamp,
primary key(id),
unique key(email),
unique key(name))engine=Innodb default charset='utf8';
常见字段:
给表插入新数据
mysql>insert into tablename values (1,'1@3','hell'),(2,'4@3','tor');
修改表中数据
mysql>update tablename set name = 'huhuchen' where id = 1;
增加表中字段:
mysql>alter table tablename add state int(11) defualt 0;
修改表中字段:
mysql>alter table tablename change user_id user_id int(12) not null;
删除表中某个字段:
mysql>alter table tablename drop column colname;
删除表中特定行
mysql>delete from tablename where id = 1;
将表结构生成sql语句
mysql>show create table tablename;
表查询
select [all | distinct | distinctrow ] from tablename;
all:返回所有满足条件的记录,缺失默认为all。
distinct:如果有多个选择数据的字段有重复,则只返回一个。
distinctrow:如果有重复记录(行),只返回一个。
top:显示头尾若干记录。显示百分比时,用字句top N percent
mysql>select distinct name from user;
mysql>select count(distinct(id)) from user where name = "huhuchen";
count(expr):
返回SELECT语句检索到的行中非NULL值的数目。
若找不到匹配的行,则COUNT() 返回 0 。
查询表中前几行(实现top的效果):
mysql>select * from tablename limit 0,2;
where字句指定查询条件比较:
<> 不等于
!>不大于
!<不小于
and
mysql>select * from user where user_id = 1111 and name = "dddddd";
not
mysql>select * from user where not user_id = 12222;
范围
between and / not between and
指定要搜索的闭区间
mysql>select * from user where id between 20 and 50;
mysql>select * from user where not in between 20 and 50;
in /not in (实现或运算)
匹配列表中的任何一个值,in字句可以用or连接额的一系列条件代替。
mysql>select * from user where user_id in (10255299,10023322)
mysql>select * from user where user_id not in (10255299, 1000000)
like(模式匹配)
like运算符检验一个包含字符串数据的字段值是否匹配某一特定的模式。
like使用的通配符含义:
mysql>select * from user where name like "huhuch*";
排序
order by
mysql>select * from user order by id desc;
分组
group by
mysql>select count(id) from user where state = 0 group by date(time);
集合函数:
sum
count
avg
max
min
first
last
另外一份:
基本概念:数据,数据库,数据库管理系统,数据库系统。数据和关于数据的解释是不可分的,数据的解释是指对数据的说明,数据的含义称为语义,数据和其语义是不可分的。
数据结构化是数据库和文件系统的根本区别。
关系模型:关系,元组,属性,主码,域,分量,关系模型。
关系模型由关系数据结构,关系操作集合和关系完整性约束三部分构成。
sql语言集数据查询、数据操作、数据定义和数据控制功能于一体。
数据查询:SELECT
数据定义:CREATE,DROP,ALTER
数据操纵:UPDATE, DELETE, INSERT
数据控制:GRANT,REVOKE
定义、删除、修改基本表:
定义表:
CREATE TABLE huhuchen (id int(10) NOT NULL AUTO_INCREMENT, name VARCHAR(20) NOT NULL, PRIMARY KEY(id));
修改表:
ALTER TABLE huhuchen ADD email VARCHAR(60) NOT NULL;
ALTER TABLE huhuchen CHANGE email email VARCHAR(60) NOT NULL DEFAULT 0;
ALTER TABLE huhuchen DROP email;
删除表:
DROP TABLE huhuchen;
建立与删除索引
建立索引
CREATE UNIQUE INDEX mydex ON huhuchen(name);
CREATE CLUSTER INDEX idindex ON huhuchen(id ASC);
聚簇索引:索引项的顺序和表中记录的物理顺序一致的索引组织。一个表最多只能建立一个聚簇索引,建立该索引后,更新索引列时,往往导致表中记录的物理数据的次序变更,代价较大,所以经常更新的列不宜建立聚簇索引。
删除索引
DROP INDEX mydex ON huhuchen;
查询:
SELECT [ALL|DISTINCT] <目标表达式>
FROM <table or view name>
[WHERE <条件表达式>]
[OROUP BY <列名1> [HAVING <条件表达式> ]]
[ORDER BY <列名2> [ASC|DESC]]
单表查询:
SELECT id, name FROM user;
SELECT * FROM user;
SELECT name, 'age', age FROM user;
SELECT name, 'age', age+10 FROM user;
SELECT name NAME, 'age' AGE, age+10 NEW_AGE FROM user;
SELECT DISTINCT age FROM user;
WHERE字句常用查询条件:
比较:=,<,>,>=,<=,!=,<>,!>,!<
范围:BETWEEN AND, NOT BETWEEN AND
集合:IN, NOT IN
字符匹配:LIKE, NOT LIKE
空值:IS NULL, IS NOT NULL
多重条件:AND ,OR
SELECT * FROM user WHERE NOT age > 20;
SELECT * FROM user WHERE age NOT BETWEEN 0 AND 200;
problem1:
select * from user where bank > 20;会出错
SELECT * FROM user WHERE age NOT IN (12, 15, 20);
SELECT * FROM user WHERE name NOT LIKE "hu%en";
SELECT * FROM user WHERE name LIKE "huhuc_en";
涉及空值的查询:
SELECT * FROM user WHERE phone ISNULL;
SELECT * FROM user WHERE age > 20 AND phone IS NOT NULL;
对查询结果排序:
SELECT * FROM user WHERE age > 20 ORDER BY id DESC;
SELECT * FROM user ORDER BY age, id DESC;
user按照年龄升序排,同年龄的按照id降序排列。
集函数
COUNT ([ALL| DISTINCT]*) 统计元组个数
COUNT ([ALL|DISTINCT] <列名>) 统计一列中值的个数
SUM ([ALL|DISTINCT] <列名>) 统计一列中值的总和
AVG ([ALL|DISTINCT] <列名>) 统计一列中值的平均值
MAX ([ALL|DISTINCT] <列名>) 统计一列中的最大值
MIN ([ALL|DISTINCT] <列名>) 统计一列中的最小值
SELECT COUNT(*) FROM user;user表的条目数
SELECT COUNT(DISTINCT age) FROM USER;user表的年龄类别数
SELECT SUM(DISTINCT age) FROM USER
SELECT AVG(DISTINCT age) FROM USER
SELECT MAX(DISTINCT age) FROM USER
SELECT MIN(DISTINCT age) FROM USER
分组:
SELECT age, COUNT(age) FROM user GROUP BY age;
查询每个年龄的人数。
SELECT age, COUNT(age) FROM user GROUP BY age HAVING COUNT(*) > 3;
查询同一年龄人数大于3的年龄对应的人数。
WHERE 子句作用于基本表和视图,从中选择满足条件的元组。
HAVING 短语作用于组,从中选择满足条件的组。
连接查询:
等值与非等值查询:
SELECT address.*, user.* FROM address, user WHERE address.user_id = user.id;
自身连接:
SELECT a.id, b.id FROM relationship as a, relationship as b WHERE a.id = b.parent_id;
外连接:
右外连接
SELECT user.*, address.* FROM user LEFT JOIN address ON user.id=address.user_id;
user中某个用户在address中没有记录时,只会显示其user表中的基本信息,address会为空。
先查user,再查address
左外连接
SELECT user.*, address.* FROM user RIGHT JOIN address ON user.id=address.user_id;
address中某个用户在user中没有记录时,只会显示其user表中的基本信息,address会为空。
先查address,在查user
符合条件连接:
where字句中的条件有多个
SELECT user.id, address.address from user, address where user.id = address.user_id and user.state=3;
嵌套查询:
子查询的SELECT语句不能使用ORDER BY子句,ORDER BY子句只能对最终结果排序。
带IN谓语的子查询
SELECT address_num FROM address WHERE user_id IN (SELECT id FROM user WHERE age >= 100);
带有比较运算符的子查询
SELECT address_num FROM address WHERE user_id = (SELECT id FROM user WHERE name = "huhuchen");
带有ALL 或ANY谓语的子查询
> ALL
> ANY
!= ALL
SELECT * FROM allowance WHERE user_id = ALL (SELECT id FROM user WHERE age >= 100);
带有EXISTS的子查询
SELECT * FROM user WHERE EXISTS (SELECT * FROM address WEHRE user.address_id = address.id);
集合查询
SELECT 语句的查询结构是元组的集合,所以多个SELECT语句的结构可以进行集合操作。集合操作主要包括
并操作(UNION),交操作(INTERSECT),差操作(MINUS)
SELECT * FROM `order` WHERE status = 3 UNION SELECT * FROM `order` WHERE status = 6;
数据更新
插入数据:
INSERT INTO user VALUES("huhuchen", "man", 18, "student");
INSERT INTO user(name, sex, age) VALUES("huhuchen", "man", 18);
插入子查询结果。
INSERT INFO deptage(sdept, avgage) (SELECT sdept, AVG(sage) FROM student GROUP BY sdept);
修改数据
修改元组的值
UPDATE user SET age = 25 WHERE id = 20;
UPDATE user SET age = 25 WHERE id = (SELECT user_id FROM allowance WHERE user.id = allowance.user_id);
删除数据:
DELETE FROM user WHERE id = 123;
DELETE FROM user;
DELETE FROM user WHERE id = (SELECT user_id FROM allowance WHERE user.id = allowance.user_id);
mysql常用命令集 http://www.360doc.com/content/10/0608/01/276520_31866098.shtml
启动/停止mysql服务
net stop mysql
net start mysql
连接本地主机:
shell>mysql -u root -p
连接远程主机
shell>mysql -h 111.111.111.111 -u root -p xxx
授权使用:
mysql>create database testdb;
mysql>grant all on testdb.* to user identified by 'pwd'
此时默认是本地主机localhost登录,ip地址是127.0.0.1,所以如果用客户端登录会出错。解决办法是给客户端的ip地址授权。
mysql>grant all on *.* to root@111.111.111.111 identified by 'pwd'
第一个*表示所有数据库,第二个表示该数据中的所有表。
mysql>grant select/insert/update/delete/create on testdb.* to user@111.111.111.111 identified by 'pwd'
全局管理权限:
FILE: 在MySQL服务器上读写文件。
PROCESS: 显示或杀死属于其它用户的服务线程。
RELOAD: 重载访问控制表,刷新日志等。
SHUTDOWN: 关闭MySQL服务。
数据库/数据表/数据列权限:
ALTER: 修改已存在的数据表(例如增加/删除列)和索引。
CREATE: 建立新的数据库或数据表。
DELETE: 删除表的记录。
DROP: 删除数据表或数据库。
INDEX: 建立或删除索引。
INSERT: 增加表的记录。
SELECT: 显示/搜索表的记录。
UPDATE: 修改表中已存在的记录。
特别的权限:
ALL: 允许做任何事(和root一样)。
USAGE: 只允许登录--其它什么也不允许做。
删除授权:
mysql>revoke all privileges on *.* from root@"%";
mysql>delete from user where user="root" and host="%";
mysql>flush privileges;
备份数据库
shell>mysqldump -h host -u user -p dbname >dbname_backup.sql
恢复数据库
shell>mysqladmin -h host -u user -p create dbname
shell>mysql -h host -u user -p dbname<dbname_backup.sql
显示当前数据库版本和时间
mysql>select version(), current_date;
库操作
mysql>create database dbname;
mysql>show databases;
mysql>drop database dbname;
mysql>use dbname;
查看当前数据库:
mysql>select database();
表操作
显示所有表
mysql>show tables;
显示表的所有字段
mysql>desc tablename;
删除表
mysql>drop table tablename;
清空表
mysql>delete from tablename;
重命名表
mysql>alter table name1 rename name2
mysql>rename table tablename1 to tablename2;
创建表:
mysql>create table user (
id int(11) not null auto_increment,
name varchar(60) not null ,
state int(11) not null default 0,
time timestamp not null default current_timestamp on update current_timestamp,
primary key(id),
unique key(email),
unique key(name))engine=Innodb default charset='utf8';
常见字段:
给表插入新数据
mysql>insert into tablename values (1,'1@3','hell'),(2,'4@3','tor');
修改表中数据
mysql>update tablename set name = 'huhuchen' where id = 1;
增加表中字段:
mysql>alter table tablename add state int(11) defualt 0;
修改表中字段:
mysql>alter table tablename change user_id user_id int(12) not null;
删除表中某个字段:
mysql>alter table tablename drop column colname;
删除表中特定行
mysql>delete from tablename where id = 1;
将表结构生成sql语句
mysql>show create table tablename;
表查询
select [all | distinct | distinctrow ] from tablename;
all:返回所有满足条件的记录,缺失默认为all。
distinct:如果有多个选择数据的字段有重复,则只返回一个。
distinctrow:如果有重复记录(行),只返回一个。
top:显示头尾若干记录。显示百分比时,用字句top N percent
mysql>select distinct name from user;
mysql>select count(distinct(id)) from user where name = "huhuchen";
count(expr):
返回SELECT语句检索到的行中非NULL值的数目。
若找不到匹配的行,则COUNT() 返回 0 。
查询表中前几行(实现top的效果):
mysql>select * from tablename limit 0,2;
where字句指定查询条件比较:
<> 不等于
!>不大于
!<不小于
and
mysql>select * from user where user_id = 1111 and name = "dddddd";
not
mysql>select * from user where not user_id = 12222;
范围
between and / not between and
指定要搜索的闭区间
mysql>select * from user where id between 20 and 50;
mysql>select * from user where not in between 20 and 50;
in /not in (实现或运算)
匹配列表中的任何一个值,in字句可以用or连接额的一系列条件代替。
mysql>select * from user where user_id in (10255299,10023322)
mysql>select * from user where user_id not in (10255299, 1000000)
like(模式匹配)
like运算符检验一个包含字符串数据的字段值是否匹配某一特定的模式。
like使用的通配符含义:
mysql>select * from user where name like "huhuch*";
排序
order by
mysql>select * from user order by id desc;
分组
group by
mysql>select count(id) from user where state = 0 group by date(time);
集合函数:
sum
count
avg
max
min
first
last
另外一份:
基本概念:数据,数据库,数据库管理系统,数据库系统。数据和关于数据的解释是不可分的,数据的解释是指对数据的说明,数据的含义称为语义,数据和其语义是不可分的。
数据结构化是数据库和文件系统的根本区别。
关系模型:关系,元组,属性,主码,域,分量,关系模型。
关系模型由关系数据结构,关系操作集合和关系完整性约束三部分构成。
sql语言集数据查询、数据操作、数据定义和数据控制功能于一体。
数据查询:SELECT
数据定义:CREATE,DROP,ALTER
数据操纵:UPDATE, DELETE, INSERT
数据控制:GRANT,REVOKE
定义、删除、修改基本表:
定义表:
CREATE TABLE huhuchen (id int(10) NOT NULL AUTO_INCREMENT, name VARCHAR(20) NOT NULL, PRIMARY KEY(id));
修改表:
ALTER TABLE huhuchen ADD email VARCHAR(60) NOT NULL;
ALTER TABLE huhuchen CHANGE email email VARCHAR(60) NOT NULL DEFAULT 0;
ALTER TABLE huhuchen DROP email;
删除表:
DROP TABLE huhuchen;
建立与删除索引
建立索引
CREATE UNIQUE INDEX mydex ON huhuchen(name);
CREATE CLUSTER INDEX idindex ON huhuchen(id ASC);
聚簇索引:索引项的顺序和表中记录的物理顺序一致的索引组织。一个表最多只能建立一个聚簇索引,建立该索引后,更新索引列时,往往导致表中记录的物理数据的次序变更,代价较大,所以经常更新的列不宜建立聚簇索引。
删除索引
DROP INDEX mydex ON huhuchen;
查询:
SELECT [ALL|DISTINCT] <目标表达式>
FROM <table or view name>
[WHERE <条件表达式>]
[OROUP BY <列名1> [HAVING <条件表达式> ]]
[ORDER BY <列名2> [ASC|DESC]]
单表查询:
SELECT id, name FROM user;
SELECT * FROM user;
SELECT name, 'age', age FROM user;
SELECT name, 'age', age+10 FROM user;
SELECT name NAME, 'age' AGE, age+10 NEW_AGE FROM user;
SELECT DISTINCT age FROM user;
WHERE字句常用查询条件:
比较:=,<,>,>=,<=,!=,<>,!>,!<
范围:BETWEEN AND, NOT BETWEEN AND
集合:IN, NOT IN
字符匹配:LIKE, NOT LIKE
空值:IS NULL, IS NOT NULL
多重条件:AND ,OR
SELECT * FROM user WHERE NOT age > 20;
SELECT * FROM user WHERE age NOT BETWEEN 0 AND 200;
problem1:
select * from user where bank > 20;会出错
SELECT * FROM user WHERE age NOT IN (12, 15, 20);
SELECT * FROM user WHERE name NOT LIKE "hu%en";
SELECT * FROM user WHERE name LIKE "huhuc_en";
涉及空值的查询:
SELECT * FROM user WHERE phone ISNULL;
SELECT * FROM user WHERE age > 20 AND phone IS NOT NULL;
对查询结果排序:
SELECT * FROM user WHERE age > 20 ORDER BY id DESC;
SELECT * FROM user ORDER BY age, id DESC;
user按照年龄升序排,同年龄的按照id降序排列。
集函数
COUNT ([ALL| DISTINCT]*) 统计元组个数
COUNT ([ALL|DISTINCT] <列名>) 统计一列中值的个数
SUM ([ALL|DISTINCT] <列名>) 统计一列中值的总和
AVG ([ALL|DISTINCT] <列名>) 统计一列中值的平均值
MAX ([ALL|DISTINCT] <列名>) 统计一列中的最大值
MIN ([ALL|DISTINCT] <列名>) 统计一列中的最小值
SELECT COUNT(*) FROM user;user表的条目数
SELECT COUNT(DISTINCT age) FROM USER;user表的年龄类别数
SELECT SUM(DISTINCT age) FROM USER
SELECT AVG(DISTINCT age) FROM USER
SELECT MAX(DISTINCT age) FROM USER
SELECT MIN(DISTINCT age) FROM USER
分组:
SELECT age, COUNT(age) FROM user GROUP BY age;
查询每个年龄的人数。
SELECT age, COUNT(age) FROM user GROUP BY age HAVING COUNT(*) > 3;
查询同一年龄人数大于3的年龄对应的人数。
WHERE 子句作用于基本表和视图,从中选择满足条件的元组。
HAVING 短语作用于组,从中选择满足条件的组。
连接查询:
等值与非等值查询:
SELECT address.*, user.* FROM address, user WHERE address.user_id = user.id;
自身连接:
SELECT a.id, b.id FROM relationship as a, relationship as b WHERE a.id = b.parent_id;
外连接:
右外连接
SELECT user.*, address.* FROM user LEFT JOIN address ON user.id=address.user_id;
user中某个用户在address中没有记录时,只会显示其user表中的基本信息,address会为空。
先查user,再查address
左外连接
SELECT user.*, address.* FROM user RIGHT JOIN address ON user.id=address.user_id;
address中某个用户在user中没有记录时,只会显示其user表中的基本信息,address会为空。
先查address,在查user
符合条件连接:
where字句中的条件有多个
SELECT user.id, address.address from user, address where user.id = address.user_id and user.state=3;
嵌套查询:
子查询的SELECT语句不能使用ORDER BY子句,ORDER BY子句只能对最终结果排序。
带IN谓语的子查询
SELECT address_num FROM address WHERE user_id IN (SELECT id FROM user WHERE age >= 100);
带有比较运算符的子查询
SELECT address_num FROM address WHERE user_id = (SELECT id FROM user WHERE name = "huhuchen");
带有ALL 或ANY谓语的子查询
> ALL
> ANY
!= ALL
SELECT * FROM allowance WHERE user_id = ALL (SELECT id FROM user WHERE age >= 100);
带有EXISTS的子查询
SELECT * FROM user WHERE EXISTS (SELECT * FROM address WEHRE user.address_id = address.id);
集合查询
SELECT 语句的查询结构是元组的集合,所以多个SELECT语句的结构可以进行集合操作。集合操作主要包括
并操作(UNION),交操作(INTERSECT),差操作(MINUS)
SELECT * FROM `order` WHERE status = 3 UNION SELECT * FROM `order` WHERE status = 6;
数据更新
插入数据:
INSERT INTO user VALUES("huhuchen", "man", 18, "student");
INSERT INTO user(name, sex, age) VALUES("huhuchen", "man", 18);
插入子查询结果。
INSERT INFO deptage(sdept, avgage) (SELECT sdept, AVG(sage) FROM student GROUP BY sdept);
修改数据
修改元组的值
UPDATE user SET age = 25 WHERE id = 20;
UPDATE user SET age = 25 WHERE id = (SELECT user_id FROM allowance WHERE user.id = allowance.user_id);
删除数据:
DELETE FROM user WHERE id = 123;
DELETE FROM user;
DELETE FROM user WHERE id = (SELECT user_id FROM allowance WHERE user.id = allowance.user_id);