mysql基础命令

**启动 关闭mysql

path=/usr/local/mysql/bin:script:各种目录

$ path/mysqld_safe --user=mysql &

$ mysqladmin -p shutdown 


**修改root口令

$ mysqladmin -u root -p password '新密码'

mysqladmin -uroot -p password 'anbaoyu';      #然后输入原始密码

**查看服务器状态

$ path/mysqladmin version -p密码



连接mysql远程服务器

$ path/mysql -u用户名 -p localhost

$ path/mysql -h 远程主机ip -u用户名 -p密码


++创建、删除数据库或表

$ mysqladmin -u root -p create xxx

mysql>create database xxx

mysql> create table members(id int not null auto_increment primary key,name char(20) not null,tel int(20));type=innodb;


添加记录:

insert into t1 set name=lili,qq=88888;

insert into userinfo set name='anbaoyu',age=30,gender='male';


删除库:

mysql>drop database [if exists] 数据库名



mysql>drop table 表名;


++查看数据库和数据下的表


show databases;

show tables;

show table status;

desc 表名字          //查看具体表结构信息

show create database db_name   //显示创建db_name库的语句

show create table tbl_name       //显示创建     表的语句


++创建用户

mysql>grant select, insert, update, delete, alter on mydb.* to test2@localhost identified by "abc";


mysql>grant all privileges on *.* to test1@'%' identified by 'abc';


flush privileges;


++用户管理

mysql>update user set password=password ('1111') where user='test1' 修改test1密码为1111

需要更新 flush privileges;


mysql>DELETE FROM user where User='testuser' and Host='localhost'; 删除用户账户


mysql>show grants for user1;   显示创建user1用户的grant语句


++mysql数据备份和恢复


$ mysqldump -uuser -ppassword -B DB_name [--tables tab1 --tables tab2]>exportfile.sql


$ mysql -uroot -p xxx <aa.sql    导入表


$ mysqldump -u用户名 -p密码 数据库库名 表名 >导出的文件名


++导出一个数据库的结构

$ mysqldump -u wcnc -p -d ?add-drop-table smgp_apps_wcnc >wcnc_db.sql


-d没有数据 ?add-drop-table在每个create语句之前增加一个drop table


++忘记mysql密码 (root)

先停止所有mysql服务进程


$ mysqld_safe ?skip-grant-table & mysql

mysql> use mysql;

mysql> update user set password=password('1111') where user='root';

mysql> flush privileges;

重启mysql并以新密码登入即可


++当前使用的数据库


mysql>select database();


==========数据库日常操作维护==============


mysql> create table table_name

(column_name datatype {identity |null|not null},f_time TIMESTAMP(8),..)ENGINE=MYISAM AUTO_INCREMENT=3811 DEFAULT CHARSET=utf8;

例:create table guest (name varchar(10),sex varchar(2),age int(3),career varchar(10));


#desc guest 查看表结构信息

#TIMESTAMP(8) YYYYMMDD 其中(2/4/6/8/10/12/14)对应不同的时间格式


mysql> show create table tbl_name       //显示创建tbl_name表的语句


++创建索引

可以再建表的时候加入index indexname (列名)创建索引

也可以手工用命令生成create index index_name on table_name

mysql> alter table  members add index  index_name (id);

members:表名

index:普通索引

index_name:索引的名字

id:为表里字段


msyql> show index from tbl_name    //显示现有索引

mysql> repair table date quick;     //索引列相关变量变化后自动重建索引


++查询及常用函数

mysql> select t1.name,t2.salary from employes AS t1,info AS t2 where t1.name=t2.name;


mysql> select college, region, seed from tournament order by region, seed;


mysql> select col_name from tbl_name WHERE col_name > 0;


mysql> select DISTINCT …… [DISTINCT关键字可以除去重复的记录]


mysql> select DATE_FORMAT NOW(), '%M %D %Y' as date, DATE_FORMAT NOW(), ' %H:%m:%s' ) as TIME;


mysql> select count(*) from tab_name order by id [DESC|ASC];


***函数***

count ,AVG,SUM,MIN,MAX,

LENGTH字符长度  

LTRIM去除开头的空格

RTRIM去除尾部空格

TRIM去除首部和尾部的空格

LETF/RIGHT(str,x)返回字符串str的左边或右边的x个字符

SUBSTRING(str,x,y)返回str中的x位置起至位置y的字符


mysql> select BINARY 'ross' IN ('chandler','joey', 'Ross'); #BINARY严格检查大小写


**比较运算符IN,BETWEEN,IS NULL,IS NOT NULL,LIKE,REGEXP/RLIKE

mysql> select count(*),AVG(number_xx),Host,user from mysql.user GROUP by user [DESC|ASC] HAVING user=root;


select BENCHMARK(9999999,LOG(RAND()*PI())) AS PERFORMANACE; #一个测试mysql运算性能工具


改变表结构


mysql> alter table table_name alter_spec [, alter_spec ...]


例:alter table dbname add column userid int(11) not null primary key auto_increment;

这样,就在表dbname中添加了一个字段userid,类型为int(11)


++调整列顺序

mysql> alter table tablename CHANGE id id int(11) first;


++修改表中数据

insert [into] table_name [(column(s))] values (s)

例:mysql>insert into mytable values ('php','mysql','asp','sqlserver','jsp','oracle');

mysql>create table user select host,user from mysql.user where cord=1;

mysql>insert into user(host,user) select host,user from mysql.user;


++更改表名

命令:rename table 原名1 to 新名2;


++表的数据更新

mysql>update table01 set field04=19991222 , field05=1222333 where fied=6;


++删除数据

mysql>delete from table01 where field=11;

如果想要清空表的所有记录,建议用truncate table tablename而不是

delete from tablename;


++shell提示符下运行sql命令

$ mysql -e "show slave status\G"


+++++++++++坏库扫描修复+++++++++++

cd /var/lib/mysql/xxx && myisamchk playlist_block

++insert into a (x) values ('lla')

出现:ata truncated for column 'x' at row 1

解决办法:

在my.ini里找到

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIONO"

把其中的STRICT_TRANS_TABLES,去掉,然后重启mysql就ok了


++复制表

mysql>create table target_table like source_table


++innodb支持事务

新表:create table table-name(field-definitions) type=innodb;

旧表:alter table  table-name type=innodb;

mysql>start transaction #标记一个事务的开始

mysql>insert into ...    #数据变更

mysql>rollback 或 commit  回滚或提交

mysql>set autocommit=1  #设置自动提交

mysql>select @@autocommit   查看当前是否自动提交


++表锁定相关

mysql>lock table users read;

mysql>lock tables user read, pfolios write  多表锁控制

mysql>unlock tables;      不需要制定锁表名字,mysql会自动解除所有表锁定


===============mysql优化与管理=============


++管理命令

mysql>show variables    查看所有变量值

? max_connections 数据库允许的最大可连接数

#需要加大max_connections可以再my.cnf中加入set-variable =max_connections=32000,可以对与下面的threads_connected值决定是否需要增大

show status [like ...]

? threads_connected数据库当前连接线程数

#flush status 可以重置一些计数器

show processlist

kill id



++my.cnf配置

?Enable Slow Query Log

long_query_time=1

log-slow-queries=/var/log/mysql/log-slow-queries.log

log-queries-not-using-indexes

# mysqldumpslow -s c -t 20 host-slow.log #访问次数最多的20个sql语句

# mysqldumpslow -s r -t 20 host-slow.log #返回记录集最多的20个sql

?others

max_connections=500 #用过的最大连接数SHOW Status like ‘max_used_connection’;

wait_timeout=10 #终止所有空闲时间超过10秒的连接

table_cache=64 #任何时间打开表的总数

ax_binlog_size=512M #循环之前二进制日志的最大规模

max_connect_errors = 100

query_cache_size = 256M #查询缓存

#可用SHOW STATUS LIKE ‘qcache%’;查看命中率

#FLUSH STATUS重置计数器, FLUSH QUERY CACHE清缓存

thread_cache = 40

#线程使用,SHOW STATUS LIKE ‘Threads_created %’;值快速增加的话考虑加大

key_buffer = 16M

#show status like ‘%key_read%’; Key_reads代表命中磁盘的关键字请求个数

#A:到底Key Buffer要设定多少才够呢? Q: MySQL只会Cache索引(*.MYI),因此参考所有MYI文件的总大小

sort_buffer_size = 4M #查询排序时所能使用的缓冲区大小,每连接独享4M

#show status like ‘%sort%’;如sort_merge_passes很大,就表示加大

sort_buffer_sizesort_buffer_size = 6M #查询排序时所能使用的缓冲区大小,这是每连接独享值6M

read_buffer_size = 4M #读查询操作所能使用的缓冲区大小

join_buffer_size = 8M #联合查询操作所能使用的缓冲区大小

skip-locking #取消文件系统的外部锁

skip-name-resolve

thread_concurrency = 8  #最大并发线程数,cpu数量*2

long_query_time = 10 #Slow_queries记数器的查询时间阀值












































你可能感兴趣的:(mysql基础语句)