`

MySQL常用命令总结

阅读更多

创建数据库 mysql> create database 数据库名称

创建表 mysql> create table 表名 ( 列的名字(id)类型(int(4))primary key(定义主键) auto_increment(描述 自增) ……, );

查看所有数据库 mysql> show databases 数据库名称

使用某个数据库 mysql> use database 数据库名称;

查看所使用数据库下所有的表 mysql> show tables

显示表的属性结构 mysql> desc 表名

删除表 mysql> drop table;

删除数据库 mysql> drop database;

MySQL的Optimizer(优化元件)在优化SQL语句时,首先需要收集一些相关信息,其中就包括表的cardinality(可以翻译为 “散列
程度”),它表示某个索引对应的列包含多少个不同的值——如果cardinality大大少于数据的实际散列程度,那么索引就基本失效了
我们可以使用SHOW INDEX语句来查看索引的散列程度:
SHOW INDEX FROM PLAYERS;
TABLE KEY_NAME COLUMN_NAME CARDINALITY
PLAYERS PRIMARY PLAYERNO 14
因为此时PLAYER表中不同的PLAYERNO数量远远多于14,索引基本失效。

通过Analyze Table语句来修复索引:ANALYZE TABLE PLAYERS; SHOW INDEX FROM PLAYERS;
结果是: TABLE KEY_NAME COLUMN_NAME CARDINALITY  PLAYERS PRIMARY PLAYERNO 1000
此时索引已经修复,查询效率大大提高。

MySQL 是完全网络化的跨平台关系型数据库系统,同时是具有客户机/服务器体系结构的分布式数据库管理系统。
MySQL在UNIX等操作系统上是免费的,在Windows操作系统上,可免费使用其客户机程序和客户机程序库

MySQL是一个真正的多用户、多线程SQL数据库服务器。
MySQL 主要目标是快速、健壮和易用。

MySQL 具有许多吸引人之处:
1、速度。MySQL 运行速度很快。 2、容易使用 3、价格。MySQL 对多数个人用户来说是免费的
4、支持查询语言 5、性能。许多客户机可同时连接到服务器
6、连接性和安全性。MySQL 是完全网络化的,其数据库可在因特网上的任何地方访问,
因此,可以和任何地方的任何人共享数据库。而且 MySQL 还能进行访问控制
7、可移植性。MySQL 可运行在各种版本的 UNIX 以及其他非 UNIX 的系统(如 Windows 和 OS/2)上。

。最常用的客户机程序为 mysql,这是一个交互式的客户机程序,它能发布查询并看到结果。
其他的客户机程序有: mysqldump 和 mysqlimport,分别导出表的内容到某个文件或将文件的内容导入某个表;
mysqladmin 用来查看服务器的状态并完成管理任务,如告诉服务器关闭、重起服务器、刷新缓存等

MySQL支持大量的列类型,它可以被分为3类:数字类型、日期和时间类型以及字符串(字符)类型

字符串值既可以用双引号括起来,也可以是用单引号。可使用几个转义序列
。MySQL 支持说明为整数(无小数部分)或浮点数(有小数部分)的值
MySQL支持十六进制值。以十六进制形式表示的整数由“0x”后跟一个或多个十六进制数字(”0”到“9”及“a”到“f”)组成

日期和时间值是一些类似于“1999-06-17”或“12:30:43”这样的值。MySQL 还支持日期/时间的组合,如“1999-06-17 12:30:43”
NULL值可适用于各种列类型,它通常用来表示“没有值”、 “无数据”等意义,并且不同于例如数字类型的0为或字符串类型的空字符串

MySQL的数字列类型

TINYINT一个很小的整数  SMALLINT一个小整数
MEDIUMINT 一个中等大小整数  INT、INTEGER 一个正常大小整数
BIGINT一个大整数  FLOAT一个小(单精密)浮点数字
DOUBLE  DOUBLE PRECISION  REAL一个正常大小(双精密)浮点数字
DECIMAL  NUMERIC  一个未压缩(unpack)的浮点数字,“未压缩”意味着数字作为一个字符串被存储

MySQL的时间和日期列类型

DATE一个日期,以'YYYY-MM-DD'格式来显示
TIME一个日期和时间组合,以'YYYY-MM-DD HH:MM:SS'格式来显示
DATETIME最大长度为255(2^8-1)个字符的BLOB或TEXT列
TIMESTAMP一个时间戳,以YYYMMDDHHMMSS格式来显示

DATA取值范围:“1000-01-01”到“9999-12-31”存储需求:3字节
TIME取值范围:“-838:59:59”到“838:59:59”存储需求:3字节
DATATIME取值范围:“1000-01-01 00:00:00”到“9999-12-31 23:59:59”存储需求:8字节
TIMESTAMP[(M)]取值范围:“19700101000000”到2037年的某个时刻存储需求:4字节
YEAR[(M)]取值范围:1901到2155存储需求:1字节

缺省的情况下,端口是3306,套接字的名字是MySQL

mysql.server脚本安装在MySQL安装目录下的share/mysqld目录下或可以在MySQL源代码分发的support_files目录下找到
mysql.server脚本可以被用来启动或停止服务器,通过用start或stop参数调用它:
$ mysql.server start
$ mysql.server stop

mysqladmin就方便的多,并且适用于MySQL
所有类型、平台的安装。
? 关闭数据库服务器
mysqladmin shutdown
? 重启数据库服务器
mysqladmin reload
? 获得帮助
mysqladmin –help
mysqladmin实用程序非常有使用价值

shell> mysql -h host -u user -p
Enter password: ********
********代表你的口令;当mysql显示Enter password:提示时输入它。

在建立了服务器的一个连接后,可在任何时候键入下列命令来结束会话:
quit exit
还可以键入 Control-D 来退出,至少在 UNIX 上可以这样

把你想要运行的命令放在一个文件中,然后告诉mysql从文件读取它的输入:
shell> mysql < batch-file

为什么要使用一个脚本?有很多原因:
? 如果你重复地运行查询(比如说,每天或每周),把它做成一个脚本使得你在每次执行它时避免重新键入。
? 你能通过拷贝并编辑脚本文件从类似的现有的查询生成一个新查询。
? 当你正在开发查询时,批模式也是很有用的,特别对多行命令或多行语句序列。如果你犯了一个错误,你不必重新打入所有一切,只要编辑你的脚本来改正错误,然后告诉mysql再次执行它。
? 如果你有一个产生很多输出的查询,你可以通过一个分页器而不是盯着它翻屏到你屏幕的顶端来运行输出:
$ mysql < batch-file | more

在命令行环境下可以使用mysqladmin创建和删除数据库。
创建数据库:
shell> mysqladmin create db_name
删除数据库:
shell> mysqladmin drop db_name

用SHOW/ DESCRIBE语句显示数据表的信息
句法:
SHOW TABLES [FROM db_name] [LIKE wild]
or SHOW COLUMNS FROM tbl_name [FROM db_name] [LIKE wild]
or SHOW INDEX FROM tbl_name [FROM db_name]
or SHOW TABLE STATUS [FROM db_name] [LIKE wild]

mysqlshow实用程序的用法,在得到数据库和表的信息上,使用起来非常方便。
得到已有数据库的列表:
shell> mysqlshow
列出某数据库db_name中已有的表:
shell> mysqlshow db_name
列出某数据库表db_name.tbl_name的结构信息:
shell>mysqlshow db_name tbl_name
列出一张表的索引:
shell> mysqlshow –k db_name tbl_name

增加列
alter table tbl_name add col_name type

删除列
alter table tbl_name drop col_name

改变列
alter table tbl_name modify col_name type

给列更名
mysql>alter table pet change weight wei;

给表更名
alter table tbl_name rename new_tbl

使用INSERT语句插入新数据
语法:INSERT [INTO] tbl_name [(col_name,...)] VALUES (pression,...),…

使用多个值表,可以一次提供多行数据。
Mysql>insert into worker values(tom‘,‘tom@yahoo.com‘),(paul‘,‘paul@yahoo.com‘);

从其它表中录入数据,例如:
mysql>insert into tbl_name1(col1,col2) select col3,col4 from tbl_name2;

INSERT INTO ... SELECT语句满足下列条件:
? 查询不能包含一个ORDER BY子句。
? INSERT语句的目的表不能出现在SELECT查询部分的FROM子句,因为这在ANSI SQL中被禁止让从你正在插入的表中SELECT。

使用LOAD语句批量录入数据
:LOAD DATA [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE] INTO TABLE tbl_name
LOAD DATA INFILE语句从一个文本文件中以很高的速度读入一个表中。如果指定LOCAL关键词,从客户主机读文件。如果LOCAL没指定,文件必须位于服务器上

函数GETDATE(),你可以获得当前的日期和时间

函数GETDATE(),你可以获得当前的日期和时间

CURTIME() 返回当前时间  NOW() 返回当前时期和时间

rand()函数返回一个随机的浮点值  ,使用“^”和“$”匹配名字的开始和结尾

列名在所有情况下都是忽略大小写的 表的别名是区分大小写的 表的别名是区分大小写的 ,MySQL搜索是大小写不敏感的

全连接 左连接 右连接

所有的MySQL列类型能被索引。一个表最多可有16个索引

索引有如下的几种情况:
? INDEX索引:通常意义的索引,某些情况下KEY是它的一个同义词。索引的列可以包括重复的值。
? UNIQUE索引:唯一索引,保证了列不包含重复的值,对于多列唯一索引,它保证值的组合不重复。
? PRIMARY KEY索引:也UNIQUE索引非常类似。事实上,PRIMARY KEY索引仅是一个具有PRIMARY名称的UNIQUE索引。这表示一个表只能包含一个PRIMARY KEY。

用Alter Table语句创建与删除索引
ALTER TABLE tbl_name ADD INDEX index_name (column_list)
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list)
ALTER TABLE tbl_name ADD PRIMARY KEY index_name (column_list)

ALTER TABLE tbl_name DROP INDEX index_name
ALTER TABLE tbl_name DROP PRIMARY KEY

SHOW INDEX FROM student

DROP INDEX mark

用CREATE\DROP INDEX创建索引
CREATE UNIQUE INDEX index_name ON tbl_name (column_list)
CREATE INDEX index_name ON tbl_name (column_list)

删除索引语句的语法如下:DROP INDEX index_name ON tbl_name

还可以再在创建表时指定索引
CREATE TABLE tbl_name
(

INDEX index_name (column_list),
KEY index_name (column_list),
UNIQUE index_name (column_list),
PRIMARY KEY index_name (column_list),

)

数据库目录是MySQL数据库服务器存放数据文件的地方,不仅包括有关表的文件,还包括数据文件和MySQL的服务器选项文件。不同的分发,数据库目录的缺省位置是不同的。

使用SELECT INTO OUTFILE语句备份数据,并用LOAD DATA INFILE语句恢复数据

SELECT * INTO {OUTFILE | DUMPFILE} 'file_name' FROM tbl_name
LOAD DATA [LOW_PRIORITY] [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE]
INTO TABLE tbl_name

假定表tbl_name具有一个PRIMARY KEY或UNIQUE索引,备份一个数据表的过程如下:
1、锁定数据表,避免在备份过程中,表被更新
mysql>LOCK TABLES READ tbl_name;
2、导出数据
mysql>SELECT * INTO OUTFILE ?tbl_name.bak‘ FROM tbl_name;
3、解锁表
mysql>UNLOCK TABLES;
相应的恢复备份的数据的过程如下:
1、为表增加一个写锁定:
mysql>LOCK TABLES tbl_name WRITE;
2、恢复数据
mysql>LOAD DATA INFILE ?tbl_name.bak‘
->REPLACE INTO TABLE tbl_name;
如果,你指定一个LOW_PRIORITY关键字,就不必如上要对表锁定,因为数据的导入将被推迟到没有客户读表为止:
mysql>LOAD DATA LOW_PRIORITY INFILE ?tbl_name‘
->REPLACE INTO TABLE tbl_name;
3、解锁表
mysql->UNLOCAK TABLES;

表的故障检测和修正的一般过程如下:
? 检查出错的表。如果该表检查通过,则完成任务,否则必须修复出错的数据库表。
? 在开始修复之前对表文件进行拷贝,以保证数据的安全。
? 开始修复数据库表。
? 如果修复失败,从数据库的备份或更新日志中恢复数据。
在使用myisamchk或isamchk检查或修复表。

授权表共有5个表:user、db、host、tables_priv和columns_priv

user表列出可以连接服务器的用户及其口令,并且它指定他们有哪种全局(超级用户)权限。在user表启用的任何权限均是全局权限,并适用于所有数据库

db表列出数据库,而用户有权限访问它们

host表与db表结合使用在一个较好层次上控制特定主机对数据库的访问权限,这可能比单独使用db好些。这个表不受GRANT和REVOKE语句的影响,所以,你可能发觉你根本不是用它。

授权表的内容有如下用途:
? tables_priv表  tables_priv表指定表级权限,在这里指定的一个权限适用于一个表的所有列。
? columns_priv表  columns_priv表指定列级权限。这里指定的权限适用于一个表的特定列。

使用SHOW GRANTS语句显示用户的授权  :SHOW GRANTS FOR user_name

使用GRANT语句创建用户并授权

GRANT priv_type (columns)
数 据7库安 全
h t t p : / / w w w . y u r e n n e t . c o m 163
ON what
TO user IDENTIFIED BY “password”
WITH GRANT OPTION

GRANT允许系统主管在4个权限级别上授权MySQL用户的权利:全局级别(全局权限作用于一个给定服务器上的所有数据库,。这些权限存储在mysql.user表)
数据库级别(数据库权限作用于一个给定数据库的所有表。这些权限存储在mysql.db和mysql.host表中。)
表级别(表权限作用于一个给定表的所有列。这些权限存储在mysql.tables_priv表中)
列级别(列权限作用于在一个给定表的单个列。这些权限存储在mysql.columns_priv表)

为了收回某个用户的权限,可使用REVOKE语句。除了要用FROM替换TO并且没有IDENTIFIED BY 或WITH GRANT OPTION子句外
语法:REVOKE privileges (columns) ON what FROM user;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics