您的位置:首页 > 数据库 > MySQL

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: