• mysql常用命令大全

  • 发布时间:2016-01-15 16:44 | 作者:yc | 来源:互联网 | 浏览:1200 次
  • mysql常用命令大全每个表会天生两个文件,一个为.sql文件,包括建表实行

    MySQL常用指令

    一、毗连MySQL办事器

    要进行MySQL中有关数据库方面的操作,重要要登录到MySQL中,以下操作包括登录、添加用户、暗码变动等都是在

    MySQL的提示符下进行的,而且每个指令以分号停止

    1:毗连到本机上的MYSQL

    格局: mysql -h主机地址 -u用户名 -p用户暗码

    重要在翻开DOS窗口,然落后入目录 mysqlbin,再键入指令mysql -uroot -p,回车后提示你输暗码超级用户root

    是没有暗码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>

    例1:cd\..道路..\bin

    mysql -h localhost -u root -p

    Appserver办事器本地登录DOS批处置惩罚

    例2:毗连到长途主机上的MYSQL假定长途主机的IP为:110.110.110.110,用户名为root,暗码为abcd123

    则键入以下指令:

    mysql -h110.110.110.110 -uroot -pabcd123

    (注:u与root能够不必加空格,其它也一样)

    3、退出MYSQL指令: exit (回车)

    2:修正暗码

    格局:mysqladmin -u用户名 -p旧暗码 password 新暗码

    例1:给root加个暗码ab12重要在DOS下进入目录mysqlbin,然后键入以下指令:

    mysqladmin -u root -password ab12

    注:因为起头时root没有暗码,以是-p旧暗码一项就能够省掉落了

    例2:再将root的暗码改为djg345

    mysqladmin -u root -pab12 password djg345

    3.添加新用户

    (把稳:和上面不一样,下面的因为是MySQL情况中的指令,所今后边都带一个分号作为指令停止符)

    格局:grant select on 数据库.* to 用户名@登录主机 identified by \"暗码\"

    例1、添加一个用户test1暗码为abc,让他能够在任何主机上登录,并对统统数据库有查询、刺进、修正、删去的权限

    重要用以root用户连入MySQL,然后键入以下指令:

    grant select,insert,update,

    delete on *.* to test2@localhost identified by \"abc\";

    要是你不想test2有暗码,能够再打一个指令将暗码消掉落

    grant select,insert,update,delete on mydb

    .* to test2@localhost identified by \"\";

    二、MySQL常用指令

    1.根本指令:

    create database name; 创立数据库

    use databasename; 遴选数据库

    drop database name 直接删去数据库,不提示

    show tables; 显现表

    describe tablename; 表的具体描述

    select 中加上distinct去掉落重复字段

    mysqladmin drop database name 删去数据库前,有提示

    select version(),current_date;显现当前mysql版别和当前日期

    2、修正mysql中root的暗码:

    shell>mysql -u root -p

    mysql> update user set password=password(”xueok″) where user=’root’;

    mysql> flush privileges //改写数据库

    mysql>use dbname; 翻开数据库:

    mysql>show databases; 显现统统数据库

    mysql>show tables; 显现数据库mysql中统统的表:先use mysql;然后

    mysql>describe user; 显现表mysql数据库中user表的列信息);

    3、grant

    创立一个能够从任何地方毗连办事器的一个彻底的超级用户,可是有需要运用一个口令something做这个

    mysql> grant all privileges on *.* to user@localhost identified by ’something’ with

    添加新用户

    格局:grant select on 数据库.* to 用户名@登录主机 identified by “暗码”

    GRANT ALL PRIVILEGES ON *.* TO monty@localhost IDENTIFIED BY ’something’ WITH GRANT OPTION;

    GRANT ALL PRIVILEGES ON *.* TO monty@”%” IDENTIFIED BY ’something’ WITH GRANT OPTION;

    删去授权:

    mysql> revoke all privileges on *.* from root@”%”;

    mysql> delete from user where user=”root” and host=”%”;

    mysql> flush privileges;

    创立一个用户custom在特定客户端it363.com登录,可拜访特定命据库fangchandb

    mysql >grant select,insert,update,delete,create,drop on fangchandb.* to custom@ it363.com identified by 'passwd'

    重命名表:

    mysql > alter table t1 rename t2;

    4、mysqldump

    备份数据库

    shell> mysqldump -h host -u root -p dbname >dbname_backup.sql

    康复数据库

    shell> mysqladmin -h myhost -u root -p create dbname

    shell> mysqldump -h host -u root -p dbnamemysqladmin -u root -p -d databasename > a.sql

    要是只想卸出刺进数据的sql指令,而不需求建表指令,则指令如下:

    shell> mysqladmin -u root -p -t databasename > a.sql

    那么要是我只想要数据,而不想要啥sql指令时,该当怎么操作呢?

    mysqldump -T./ phptest driver

    其间,只要指定了-T参数才能够卸出纯文本文件,注解卸出数据的目录,./注解当前目录,即与mysqldump同一目录

    要是不指定driver 表,则将卸出整个数据库的数据

    另一个为.txt文件,只包括数据,且没有sql指令

    5、从文件批处置惩罚发动查询

    能够将查询存储在一个文件中并看护mysql从文件中读取查询而不是期待键盘输入可运用外壳法度榜样键入重定向实用法度榜样

    mysql常用命令大全

    来完结这项功课例如,要是在文件my_file.sql 中寄存有查询,可如下实行这些查询:

    例如,要是您想将建表句子提早写在sql.txt中:

    mysql > mysql -h myhost -u root -p databasecreate database staffer

    2)创立表staffer,department,position,depart_pos

    create table s_position

    (id int not null auto_increment,

    name varchar(20) not null default '司理', #设定默许值

    description varchar(100),

    primary key PK_positon (id)#设定主键

    );

    create table department

    (

    id int not null auto_increment,

    name varchar(20) not null default '体系部', #设定默许值

    description varchar(100),

    primary key PK_department (id)#设定主键

    );

    create table depart_pos

    (

    department_id int not null,

    position_id int not null,

    primary key PK_depart_pos (department_id,position_id)#设定复和主键

    );

    create table staffer

    (id int not null auto_increment primary key,#设定主键

    name varchar(20) not null default '无名氏',#设定默许值

    department_id int not null,

    position_id int not null,

    unique (department_id,position_id)#设定仅有值

    );

    3)删去

    mysql>

    drop table depart_pos;

    drop table department;

    drop table s_position;

    drop table staffer;

    drop database staffer;

    9、修正布局

    mysql>

    #表position添加列test

    alter table position add(test char(10));

    #表position修正列test

    alter table position modify test char(20) not null;

    #表position修正列test默许值

    alter table position alter test set default 'system';

    #表position去掉落test默许值

    alter table position alter test drop default;

    #表position去掉落列test

    alter table position drop column test;

    #表depart_pos删去主键

    alter table depart_pos drop primary key;

    #表com9769depart_pos添加主键

    alter table depart_pos add primary key PK_depart_pos (department_id,position_id);

    10、操作数据

    #刺进表department

    insert into department(name,description) values('体系部','体系部');

    insert into department(name,description) values('公关部','公关部');

    insert into department(name,description) values('客服部','客服部');

    insert into department(name,description) values('财政部','财政部');

    insert into department(name,description) values('测验部','测验部');

    #刺进表s_position

    insert into s_position(name,description) values('总监','总监');

    insert into s_position(name,description) values('司理','司理');

    insert into s_position(name,description) values('通俗员工','通俗员工');

    #刺进表depart_pos

    insert into depart_pos(department_id,position_id)

    select a.id department_id,b.id postion_id

    from department a,s_position b;

    #刺进表staffer

    insert into staffer(name,department_id,position_id) values('陈达治',1,1);

    insert into staffer(name,department_id,position_id) values('李文宾',1,2);

    insert into staffer(name,department_id,position_id) values('马佳',1,3);

    insert into staffer(name,department_id,position_id) values('亢志强',5,1);

    insert into staffer(name,department_id,position_id) values('杨玉茹',4,1);

    11、查询及删去操作

    #显现体系部的职员和职位

    select a.name,b.name department_name,c.name position_name

    from staffer a,department b,s_position c

    where a.department_id=b.id and a.position_id=c.id and b.name='体系部';

    #显现体系部的人数

    select count(*) from staffer a,department b

    where a.department_id=b.id and b.name='体系部'

    #显现各部门的人数

    select count(*) cou,b.name

    from staffer a,department b

    where a.department_id=b.id

    group by b.name;

    #删去客服部

    delete from department where name='客服部';

    #将财政部修正为财政一部

    update department set name='财政一部' where name='财政部';

    12、备份和康复

    备份数据库staffer

    c:\mysql\bin\mysqldump -uroot -proot staffer>e:\staffer.sql

    获得的staffer.sql是一个sql脚本,不包括建库的句子,以是你需求手艺

    创立数据库才能够导入

    康复数据库staffer,需求创立一个空库staffer

    c:\mysql\bin\mysql -uroot -proot staffere:\staffer.sql

    mysql -uroot -proot >e:\staffer.sql

    但这么的话体系种就不能存在staffer库,且无法导入其他姓名的数据库,

    当然你能够手艺修正staffer.sql文件

    13、从文本向数据库导入数据

    1)运用器械c:\mysql\bin\mysqlimport

    这个器械的效果是将文件导入到和去掉落文件扩展名姓名一样的表里,如

    staffer.txt,staffer都是导入到staffer表中

    常用选项及功用如下

    -d or --delete 新数据导入数据表中之前删去数据数据表中的统统信息

    -f or --force 不论是不是碰到同伴,mysqlimport将强行持续刺进数据

    -i or --ignore mysqlimport超出或许纰漏那些有一样仅有

    关键词的行, 导入文件中的数据将被纰漏

    -l or -lock-tables 数据被刺进之前锁住表,这么就避免了,

    你在更新数据库时,用户的查询和更新受到影响

    -r or -replace 这个选项与-i选项的效果相反;此选项将替代

    表中有一样仅有关键词的纪录

    --fields-enclosed- by= char

    指定文本文件中数据的纪录时以啥括起的, 许多环境下

    数据以双引号括起 默许的环境下数据是没有被字符括起的

    --fields-terminated- by=char

    指定各个数据的值之间的分隔符,在句号分隔的文件中,

    分隔符是句号您能够用此选项指定命据之间的分隔符

    默许的分隔符是跳格符(Tab)

    --lines-terminated- by=str

    此选项指定文本文件中行与行之间数据的分隔字符串

    或许字符 默许的环境下mysqlimport以newline为行分隔符

    您能够遴选用一个字符串来替代一个单个的字符:

    一个新行或许一个回车

    mysqlimport指令常用的选项还有-v 显现版别(version),

    -p 提示输入暗码(password)等

    这个器械有个疑问,无法纰漏某些列,这么对咱们的数据导入有很大年夜的费事,只管

    能够手艺设置这个字段,但会出现弗成思议的成果,咱们做一个大略的示例

    咱们界说如下的depart_no.txt,保存在e盘,间隔为制表符\t

    10 10

    11 11

    12 24

    实行如下指令

    c:\mysql\bin\mysqlimport -uroot -proot staffer e:\depart_pos.txt

    在这里没有运用列的围住符号,切割选用默许的\t,因为选用其他符号会有疑问,

    不知道是不是windows的身分

    2)Load Data INFILE file_name into table_name(column1_name,column2_name)

    这个指令在mysql>提示符下运用,长处是能够指定列导入,示例如下

    c:\mysql\bin\mysql -uroot -proot staffer

    mysql>load data infile "e:/depart_no.txt" into depart_no(department_id,position_id);

    这两个器械在Windows下运用都有疑问,不知道是Windows的身分仍是中文的疑问,

    而且不指定的列它发生了空值,这显着不是咱们想要的,以是慎重运用这些器械

    进入MySQL:mysql -uuser -ppassword --port=3307

    1:运用SHOW句子找出在办事器上当前存在啥数据库:

    mysql> SHOW DATABASES;

    2:2、创立一个数据库MYSQLDATA

    mysql> Create DATABASE MYSQLDATA;

    3:遴选你所创立的数据库

    mysql> USE MYSQLDATA; (按回车键出现Database changed 时说明操作成功!)

    4:查看如今的数据库中存在啥表

    mysql> SHOW TABLES;

    5:创立一个数据库表

    mysql> Create TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));

    6:显现表的布局:

    mysql> DESCRIBE MYTABLE;

    7:往表中参加纪录

    mysql> insert into MYTABLE values ("hyq","M");

    8:用文本法子将数据装入数据库表中(例如D:/mysql.txt)

    mysql> LOAD DATA LOCAL INFILE "D:/mysql.txt" INTO TABLE MYTABLE;

    9:导入.sql文件指令(例如D:/mysql.sql)

    mysql>use database;

    mysql>source d:/mysql.sql;

    10:删去表

    mysql>drop TABLE MYTABLE;

    11:清空表

    mysql>delete from MYTABLE;

    12:更新表中数据

    mysql>update MYTABLE set sex="f" where name='hyq';

    UPDATE [LOW_PRIORITY] [IGNORE] tbl_name

    SET col_name1=expr1 [, col_name2=expr2 ...]

    [WHERE where_definition]

    [ORDER BY ...]

    [LIMIT rows]

    or

    UPDATE [LOW_PRIORITY] [IGNORE] tbl_name [, tbl_name ...]

    SET col_name1=expr1 [, col_name2=expr2 ...]

    [WHERE where_definition]

    UPDATE 以新的值更新现存表中行的列SET 子句指出要修正哪个列和他们该当给定的值WHERE

    子句要是被给出,指定哪个纪录行该当被更新不然,统统的纪录行被更新要是 ORDER BY 子句被指定,纪录即将被以指定的序次递次更新同升国际娱乐城

    要是你指定关键词 LOW_PRIORITY,UPDATE 的履即将被推迟,直到没有其它的客户正直在读取表

    要是你指定关键词 IGNORE,该更新句子将不会反常间断,即便在更新进程中出现重复键同伴致使矛盾的纪录即将不会被更新

    要是在一个表达式中从 tbl_name 中拜访一个列,UPDATE 运用列确当前值举例来说,下面的句子设置 age 列值为它确当前值加 1 :

    mysql> UPDATE persondata SET age=age+1;

    UPDATE 赋值是从左到右核算的举例来说,下列句子将 age 列设置为它的两倍,然后再加 1 :

    mysql> UPDATE persondata SET age=age*2, age=age+1;

    要是你设置列为其当前的值,MySQL 把稳到这点,并不更新它

    UPDATE 回来实践被篡改的纪录行数目在 MySQL 3.22 或更新的版别中,C API 函数 mysql_info()

    回来被匹配并更新的纪录行数目,以及在 UPDATE 时期发生发火的正告的数目

    在 MySQL 3.23 中,你能够运用 LIMIT # 来确保只要给定的纪录行数目被变动

    要是一个 ORDER BY 子句被运用(从 MySQL 4.0.0 起头支撑),纪录即将以指定的序次递次被更新这实践上只要连同 LIMIT

    一同才有用

    从 MySQL 4.0.4 起头,你也能够实行一个包括多个表的 UPDATE 的操作:

    UPDATE items,month SET items.price=month.price

    WHERE items.id=month.id;

    把稳:多表 UPDATE 不能够运用 ORDER BY 或 LIMIT

    三、 mysql实例剖析:

    发动:net start mySql;

    进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;

    列出数据库:show databases;

    遴选数据库:use databaseName;

    列出表格:show tables;

    显现表格列的特征:show columns from tableName;

    树立数据库:source fileName.txt;

    匹配字符:能够用通配符_代表任何一个字符,%代表任何字符串;

    添加一个字段:alter table tabelName add column fieldName dateType;

    添加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;

    多行指令输入:把稳不能将单词断开;当刺进或变动数据时,不能将字段的字符串展开到多行里,不然硬回车将被储存到数据中;

    添加一个治理员帐户:grant all on *.* to user@localhost identified by "password";

    每条句子输入停止后要在结尾填加分号';',或许填加'\g'也能够;

    查询时候:select now();

    查询当前用户:select user();

    查询数据库版别:select version();

    查询当前运用的数据库:select database();

    1、删去student_course数据库中的students数据表:

    rm -f student_course/students.*

    2、备份数据库:(将数据库test备份)

    mysqldump -u root -p test>c:\test.txt

    备份表格:(备份test数据库下的mytable表格)

    mysqldump -u root -p test mytable>c:\test.txt

    将备份数据导入到数据库:(导回test数据库)

    mysql -u root -p test

    3、创立暂时表:(树立暂时表zengchao)

    create temporary table zengchao(name varchar(10));

    4、创立表是先判别表是不是存在

    create table if not exists students(……);

    5、从现已有的表中复制表的布局

    create table table2 select * from table1 where 1

    select * from students order by id limit 9,10;

    13、MySQL不支撑的功用

    营业,视图,外键和引证完备性,存储进程和触发器

    14、MySQL会运用索引的操作符号

    =,>,=,between,in,不带%或许_最初的like

    15、运用索引的缺陷

    1)减慢增编削数据的速率;

    2)占用磁盘空间;

    3)添加查询优化器的担任;

    当查询优化器天生实行计划时,会思虑索引,太多的索引会给查询优化器添加功课量,致使无法遴选最优的查询计划;

    16、剖析索引功率

    法子:在平日的SQL句子前加上explain;

    剖析成果的意义:

    1)table:表名;

    2)type:毗连的类型,(ALL/Range/Ref)其间ref是最抱负的;

    3)possible_keys:查询能够运用的索引名;

    4)key:实践运用的索引;

    5)key_len:索引中被运用有些的长度(字节);

    6)ref:显现列姓名或许"const"(不明白啥意思);

    7)rows:显现MySQL以为在找到准确成果之前有需要扫描的行数;

    8)extra:MySQL的主张;

    17、运用较短的定长列

    1)尽大概运用较短的数据类型;

    2)尽大概运用定长数据类型;

    a)用char替代varchar,固定长度的数据处置惩罚比变长的快些;

    b)关于几回再三修正的表,磁盘简单构成碎片,然后影响数据库的全体功能;

    c)要是出现数据表溃散,运用固定长度数据行的表更简单从头布局运用固定长度的数据行,每个纪录的起头方位都是固定纪录长度的倍数,能够很简单被检测到,可是运用可变长度的数据行就不必定了;

    d)关于MyISAM类型的数据表,只管转换成固定长度的数据列能够进步功能,可是占领的空间也大年夜;

    18、运用not null和enum

    只管即便将列界说为not null,这么可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需求查看是不是存在特例,即null值,然后优化查询;

    要是一列只富富含限数目的特定值,如性别,是不是有用或许入学年份等,在这种环境下该当思虑将其转换为enum列的值,MySQL处置惩罚的更快,因为统统的enum值在体系内都因此标识数值来注解的;

    19、运用optimize table

    关于经常修正的表,简单发生碎片,使在查询数据库时有需要读取更多的磁盘块,低落查询功能具有可变长的表都存在磁盘碎片疑问,这个疑问对 blob数据类型更为精彩,因为其尺度改变异常大年夜能够颠末运用optimize table来料理碎片,确保数据库功能不低落,优化那些受碎片影响的数据表 optimize table能够用于MyISAM和BDB类型的数据表实践上任何碎片料理法子都是用mysqldump来转存数据表,然后运用转存后的文件并从头建数据 表;

    20、运用procedure analyse()

    能够运用procedure analyse()显现最好类型的主张,运用很大略,在select句子后边加上procedure analyse()就能够了;例如:

    select * from students procedure analyse();

    select * from students procedure analyse(16,256);

    第二条句子哀求procedure analyse()不要主张富含多于16个值,或许富含多于256字节的enum类型,要是没有约束,输出大概会很长;

    21、运用查询缓存

    1)查询缓存的功课法子:

    首次实行某条select句子时,办事器记着该查询的文本内容和查询成果,存储在缓存中,下次碰着这个句子时,直接从缓存中回来成果;当更新数据表后,该数据表的任何缓存查询都成为无效的,而且会被损掉落

    2)设置设备摆设缓存参数:

    变量:query_cache _type,查询缓存的操作形式有3中形式,0:不缓存;1:缓存查询,除非与 select sql_no_cache最初;2:根据需求只缓存那些以select sql_cache最初的查询; query_cache_size:设置查询缓存的最大年夜成果集的巨细,比这个值大年夜的不会被缓存

    22、调剂硬件

    1)在机械上装更多的内存;

    2)添加更快的硬盘以减少I/O期待时候;

    寻道时候是决议功能的主要身分,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;

    3)在不一样的物理硬盘设备上从头分配磁盘活动;

    要是大概,应将最忙碌的数据库寄存在不一样的物理设备上,这跟运用同一物理设备的不一样分区是不一样的,因为它们将争用一样的物理本钱(磁头)

  • 相关内容

友情链接: