在日常的维护和管理中,会用到非常多的SQL语句,熟练使用对日常工作有很多好处。
下面列一些常用的命令供以后查看。
1、显示数据库
1 | mysql> show databases; |
列出数据库下所有表
1 | mysql> show tables; |
2、创建用户
创建root用户密码为123
1 | mysql> use mysql; |
新增超级权限并允许远程访问:
1 | mysql> GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION; |
用户能读取和修改已有表的内容,但又不允许创建新表或删除表,可按如下授权:
1 | mysql> GRANT SELECT,UPDATE ON samp_db.* TO 'user'@'%' IDENTIFIEDBY "pass"; |
设置该用户只有show database权限
1 | mysql> grant SHOW DATABASES on *.* to test@"%" identified by "pass"; |
增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。
1 | mysql> grant select,insert,update,delete on *.* to test1@"%" Identified by "abc"; |
增加一个用户test2密码为abc, 让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作。
1 | mysql> grant select,insert,update,delete on mydb.* to test2@localhost identified by "abc"; |
增加一个用户test3密码为abc, 让他只可以在localhost上登录,并可以对数据库mydb下的表进行创建、删除操作。
1 | mysql> grant create,drop on mydb.* to test3@localhost identified by "abc"; |
增加一个用户test对testDB库有所有权限
1 | mysql> grant all privileges on testDB.* to test@'%' identified by '1234'; |
查看用户的登录权限
1 | mysql> show grants for test@'192.168.1.23'; |
查看用户具体权限
1 | mysql> select * from mysql.user where user='test'\G; |
修改用户权限
1 | #创建库 |
3、修改密码
1 | mysql> grant all on *.* to xing@'localhost' identified by '123456' with grant option; |
修改密码
1 | mysql> update mysql.user set authentication_string=password('root') where user='root' and host='localhost'; |
当前用户登录下修改密码
1 | mysql> SET PASSWORD = PASSWORD("newpassword"); |
4、删除用户
删除用户cvxcloud
1 | mysql> drop user cvxcloud@'192.168.0.0/255.255.0.0'; |
5、创建数据库testdb
1 | mysql> create database testdb; |
6、预防性创建数据库
1 | mysql> create database if not testdb; |
7、创建表
1 | mysql> use testdb; |
创建后表的修改
alter table 语句用于创建后对表的修改, 基础用法如下:
添加列
alter table 表名 add 列名 列数据类型 [after 插入位置];
在表的最后追加列
1 | mysql> address: alter table students add address char(60); |
在名为 age 的列后插入列 birthday:
1 | mysql> alter table students add birthday date after age; |
重命名表
基本形式:
1 | mysql> alter table 表名 rename 新表名; |
重命名 students 表为 workmates:
1 | mysql> alter table students rename workmates; |
8、预防性创建表aaa
1 | mysql> create table if not exists aaa(ss varchar(20)); |
9、查看表结构
1 | mysql> describe table1; |
10、插入数据到表table1
1 | mysql> insert into table1(username,password) values |
更新表中的数据
update 语句可用来修改表中的数据, 基本的使用形式为:
1 | mysql> update 表名称 set 列名称=新值 where 更新条件; |
将id为5的手机号改为默认的”-“:
1 | mysql> update students set tel=default where id=5; |
将所有人的年龄增加1:
1 | mysql> update students set age=age+1; |
将手机号为 13288097888 的姓名改为 “张伟鹏”, 年龄改为 19:
1 | mysql> update students set name="张伟鹏", age=19 where tel="13288097888"; |
11、查询表table1
1 | mysql> select * from table1; |
查询表数据并保存为文件
1 | # mysql -h 127.0.0.1 -u vbox -p -e " use vboxserver;SELECT * from live_radio where radio_source = 'QT' LIMIT 0,100" > /work/admin/downloads/20180312/live_radio.xls |
登录mysql中查询导出为文件
1 | mysql> select * FROM action where create_time < '2016-0-1 00:00:00' into outfile '/tmp/file.xls'; |
12、更改数据
1 | mysql> update table1 set password='hehe' where username='hellokitty'; |
13、删除数据
1 | mysql> delete from table1 where username='hellokitty'; |
14、给表添加一列
1 | mysql> alter table table1 add column( |
15、修改表结构
从查询创建一个表table1
1 | mysql> create table tmp as table1; |
基本格式:
alter table 表名 change 列名称 列新名称 新数据类型;
将表 tel 列改名为 telphone:
1 | mysql> alter table students change tel telphone char(13) default "-"; |
将 name 列的数据类型改为 char(16):
1 | mysql> alter table students change name name char(16) not null; |
删除列
基本形式:
alter table 表名 drop 列名称;
删除 birthday 列:
1 | mysql> alter table students drop birthday; |
16、删除表table1
1 | mysql> drop table if exists table1; |
delete 语句用于删除表中的数据, 基本用法为:
delete from 表名称 where 删除条件;
删除id为2的行:
1 | mysql> delete from students where id=2; |
删除所有年龄小于21岁的数据:
1 | mysql> delete from students where age<20; |
删除表中的所有数据:
1 | mysql> delete from students; |
17、备份数据库testdb
备份时使用--master-data
参数便于回滚时查找pos点
1 | # mysqldump -h 192.168.3.143 -u root -p pwd --master-data=2 -x --default-character-set=gbk > /testdb.sql |
备份表
导出db1中的a1、a2表
1 | # mysqldump -uroot -proot --master-data=2 --databases db1 --tables a1 a2 >/tmp/db1.sql |
导出整个数据库结构和数据
1 | # mysqldump -h localhost -uroot --master-data=2 -p123456 database > dump.sql |
导出单个数据表结构和数据
1 | # mysqldump -h localhost -uroot -p123456 --master-data=2 database table > dump.sql |
导出整个数据库结构(不包含数据)
1 | # mysqldump -h localhost -uroot -p123456 --master-data=2 -d database > dump.sql |
导出单个数据表结构(不包含数据)
1 | # mysqldump -h localhost -uroot -p123456 --master-data=2 -d database table > dump.sql |
备份表中的数据到另一个表
1 | mysql> create table biz_column_info_bak select * from biz_column_info; |
复制ifly_cti_music库中的数据到xy_cti_music库中
1 | mysqldump ifly_cti_music -u root -p******** --add-drop-table | mysql xy_cti_music -u root -p******** |
18、删除数据库testdb
1 | mysql> drop database testdb; |
19、恢复testdb数据库
首先先建立testdb数据库,然后用下面命令进行本地恢复
1 | mysql -u root -pleizhimin testdb /testdb.sql |
对于超大的sql文件导入source
1 | mysql> source /work/admin/data/mysql_backup/back.sql; |
20、查看数据库连接信息
显示mysql连接列表
1 | mysql> show processlist; |
查询数据库当前设置的最大连接数
1 | mysql> show variables like '%max_connections%'; |
查看当前连接
1 | mysql> show status like 'Threads%'; |
显示连接状态
1 | mysql> SHOW STATUS LIKE '%connect%'; |
21、数据库密码找回
mysql密码忘了如何重设密码:
方法一:
1 | # /etc/init.d/mysqld stop |
方法二:
直接使用/etc/mysql/debian.cnf文件中[client]节提供的用户名和密码:
1 | # mysql -udebian-sys-maint -p |
mysql 5.7
如果忘记root密码,则按如下操作恢复:
在[mysqld]的段中加上一句:skip-grant-tables 保存并且退出vi。
1 | # mysql -u root |