mysql软件使⽤教程_MySQL基本使⽤教程
⼀、结构类操作
1.1 连接数据库
1.1.1 命令连接数据库
# 基础格式
mysql [OPTIONS] [database_name]
# 常⽤参数格式
mysql [-h] [-u] [-p] [-P] [-e] [database_name]
说明:选项及其参数间可以有空格也可以没空格;-p可直接接密码也可以后边要求输⼊时再输⼊;密码有$等元字符时要⽤单引号括起来防⽌被解析掉;-e后的的命令⼀般都有空格所以⼀般都⽤引号括起来。
1.1.2 断开数据库连接
--⽅式⼀
exit
--⽅式⼆
quit
1.1.3 常⽤图形界⾯客户端
Workbench:MySQL官⽅客户端,各⽅⾯都还可以;最⼤的糟点⼤概是界⾯有点丑。
HeidiSQL:暂时见到的开源免费还算能⽤的mysql客户端;最让⼈难受的是数据库列表和打开后的数据库属两个窗⼝。
phpMyAdmin:web形式的客户端⽐较受欢迎,但php写的也有就语⾔局限性。
1.2 库操作
1.2.1 创建数据库
--基础⽤法
create database ;--指定utf8编码格式
create database character set utf8 collate utf8_general_ci;
1.2.2 删除数据库
drop database ;
1.2.3 修改数据库
应该来讲,修改数据库我们最希望的是修改数据库名,但mysql并没有提供直接的修改数据库名的操作(现在的修改本质上都是新建⼀个数据库然后把表导过去),只能改改默认编码之类的。
alter database character set = 'utf8' ;
1.2.4 查看现有数据库
--查看所有数据库
正则表达式语法分析show databases;--查看当前使⽤的数据库
select database();--查看数据库创建信息
show create database database_name;
1.2.5 使⽤数据库
use ;
1.3 表操作
1.3.1 创建数据表
--基础创建格式
create tabletable_name(column_1_name_1 column_1_type, column_2_name_2 column_1_type)--创建⽰例;习惯在每个字段后回车换⾏
create table if not existstest_table(
idintunsigned auto_increment,
usernamevarchar(100) not null,
passwordvarchar(100) not null,primary key(id)
)default charset=utf8;
1.3.2 删除数据表
drop table ;
1.3.3 修改数据表
--重命令数据表
rename table to ;
1.3.4 查看数据表
show tables [from database_name];孙圳和孙侨潞十一个人吗
1.4 字段操作
1.4.1 增加字段
alter table add [column] [first | after ready_column];
1.4.2 删除字段
alter table drop [column] ;
1.4.3 修改字段
--修改字段名
alter table rename column to ;--修改字段类型
alter table modify [column] [first | after ready_column];--同时修改字段名和字段类型
alter table change [column] [first | after ready_column];
1.4.4 查看字段
show columns from ;desc ;
1.5 记录操作
1.5.1 插⼊记录
insert [into] [column_name_1,column_name_2] values (value_10,value_20) [,(value_11,value_21)];
1.5.2 删除记录
--删除指定记录
delete from [where column_name = 'value'];--删除所有记录--delete是DDL(Data Manipulation Language),truncate是DML(Data Definition Language)。--两者的区别有很多分不太清,delete不重置⾃增长字段,truncate会重置⾃增长字段
delete * from ;truncate table ;--删除重复记录--第⼀步,创建格式和原表⼀样的临时表
CREATE TABLE t_source_copy LIKEt_source;--第⼆步,通过group by把唯⼀的⼀条数据插⼊临时表--允许重复的所有字段都要参与group by;⼀般除关键字外都参与
INSERT INTOt_source_copySELECT * FROMt_sourceGROUP BYcolumn_names;--第三步,删除原表
DROP TABLEt_source;--第四步,把临时表重命名为原表名
ALTER TABLE t_source_copy RENAME TO t_source;
1.5.3 修改记录
update set = [where column_name = "value"];
1.5.4 查看记录
select * from [where column_name = "value"];--某列唯⼀
select distinct column_name from [where column_name = "value"];--某列唯⼀计数
select count( distinct column_name ) from [where column_name = "value"];--多列组合唯⼀
select distinct column_name1[, column_name2] from [where column_name = "value"];--多列组合唯⼀计数(需要5.7以后版本才⽀持,之前的版本会先去掉column_name1⼀样的记录,再去掉column_name2相同的记录,与我们预期不符)
逗号表达式格式select count(distinct column_name1[, column_name2]) from [where column_name = "value"];
⼆、导⼊导出数据操作
2.1 导出数据
--⽅法⼀:使⽤into outfile导出数据--导出默认格式:⽂件本件,字段以\t分隔,⾏以\n分隔--只指定⽂
件名不具体给出⽬录时,⽂件会保存到mysql配置的导出⽬录下
select * from table_name into outfile "";--保存成csv
select * from table_name fields terminated by ',' optionally enclosed by '"' lines terminated by '\n';--⽅法⼆:使⽤重定向>--如果数据库不允许导出⽂件,那么只能-e命令⾏查然后再重定向到⽂件--但这种⽅式没法指定terminated,即也不能输出成csv⽂件。折中的办法是输出成txt然后复制到excel中再保存成csv
mysql -h ip -u user -p password db_name -e "select * from table_name" >file_path--⽅法三:使⽤mysqldump导出数据--导出默认格式:.sql⽂件--不指定数据库名时默认导出所有数据库
mysqldump -u -p [--databases ] > mysqldump-u -p [--databases ] --result-file
2.2 导⼊数据
--⽅法⼀:使⽤mysql命令导⼊sql语句(.sql)⽂件
mysql -u -p <
-
-⽅法⼆:登录数据库后使⽤source⼊sql语句(.sql)⽂件--当然也可以使⽤mysql -u -p -e 转成shell命令形式
source
--⽅法三:登录数据库后使⽤load data导⼊.cvs等格式⽂件--当然也可以使⽤mysql -u -p -e 转成shell命令形式--local是指⽂件在登录mysql的那台机器上--默认.cvs格式,即字段分隔符为,⾏分隔符为换⾏符(具体是\r\n还是\n还是\r看你系统)--对于数据格式,导⼊时mysql会尽最⼤可能将导⼊的数据转成字段的格式--如果导⼊的字段值中包含分隔符,此种情况导⼊前应处理,不然会误导mysql的分隔判断
load data local infile into table ;--⾃定义字段分隔符和⾏分隔符
load data local infile into table [(column_names)] fields terminated by ':' lines terminated by '\n';--如果导⼊的⽂件中某个字段没有值(或者想让⾃增长字段⾃增长),则将该字段留空即可(如,,)--如果导⼊的⽂件中某个字段对应的位置是有值的但并不想导⼊数据库,则在column_names位置使⽤@column_name形式指⽰导⼊时跳过该字段即可
--⽅法四:使⽤mysqlimport导⼊.cvs等格式⽂件--mysqlimport从功能上来说只是load data的⼀个shell命令形式
mysqlimport -u -p --local
mysqlimport -u -p --local --fields-terminated-by "," --lines-terminated-by "\n"
三、权限类操作
3.1 授权
--create只创建⽤户,该⽤户没有任何如增删改查的权限
create user @ [identified by ];--grant先创建⽤户,后⼜可给⽤户赋权--with grant option表⽰允许该⽤户将其所拥有的权限,赋给其他⼈
grant on . to @ [identified by ] [with grant option];--给⾓⾊增加权限
grant on . to ;
--给⽤户增加⾓⾊
grant to @;
3.2 回收权限
--从⽤户回收权限
revoke on . from @;
--从⾓⾊回收权限
revoke on . from ;
--从⽤户回收⾓⾊
revoke from @;
3.3 修改⽤户密码
--查看当前登录⽤户
select user();--查看所有⽤户
select user,host from mysql.user;--修改当前⽤户密码
set password = ;--修改指定⽤户密码mysql是什么系统
set password for @ = ;--修改当前⽤户密码
alter user user() identified by ;--修改指定⽤户密码
alter user @ identified by ;--5.7之前版本
update mysql.user set password=PASSWORD() where user=;--5.7及之后版本
update mysql.user set authentication_string=PASSWORD() where user=;
四、其他常⽤操作
--查看数据库版本
selectversion();--查看连接数
show status where variable_name = 'Threads_connected';
show global statuslike"Threads_connected";--查看具体连接
show processlist;--show processlist出来的id是服务端给客户端连接分配的id,⽽不是客户端在系统中
的进程id--这是⽐较容易理解的,因为如果是不同机器那服务端显然⽆法了解客户端在系统中的进程id--所以关闭连接的kill操作,应该在mysql会话中进⾏,⽽不是在系统shell中进⾏
kill ;--查看在本机客户端中执⾏过的mysql命令
cat ~/.mysql_history--⼤多变量可在myf⽂件中配置默认值,但下划线要改成杠--mysql配置⽂件中,既允许不同⽂件间有相同节区,也允许⼀个⽂件有重复的节区,最后汇总去重使⽤--查看变量
show [global|session] variables [like ];--设置变量值,但set并不写⼊⽂件即重启后失效
set = ;--查看⽀持的编码
show character set [likt ];--服务端使⽤什么编码存并不那么重要,只要客户端使⽤正确的编码即可正确显⽰--将character_set_client, character_set_connection及character_set_results三个变量设为给定编码
css flex布局阮一峰set names 'utf8';--以某个字段进⾏分组并统计数量
select count(*), from group by
-
-以某个字段的某⼏个字符进⾏分组并统计数量;以前⼏位⽤left(),以中间⼏位字符⽤substr(),以右边⼏位⽤right()
select count(*), from group by
--⾏列转置显⽰。--当记录太长时会产⽣换⾏,此时字段和字段值关系难以分清,这时我们可以使⽤\G将⾏列进⾏转置--mysql中\g作⽤等效于分号,\G除了分号作⽤外还进⾏⾏列转置--因为\G已启到分号作⽤,所以不需要再加分号;如果加上就相当于⼀条空语句,进⽽
报“ERROR: No query specified”
select * from limit 1\G--在表上做两层查询
select * from (select * from test_table) lumn1 = 'xxx'
--将第n列相同的记录,的第m列也修改为相同值
update test_table1,(select n,m from test_table1 where m != '' group by n) asbset test_table1.m =b.mwhere test_table1.m = '' and test_table1.n =b.n;--嵌套--凡是表名的位置,都可以使⽤(select xxx from xxx)来替换实现嵌套
--having⼦句--where只能针对原始的字段进⾏过滤,不能对group by后计算出的字段进⾏过滤;要对group by后计算出的字段进⾏过滤就得⽤having
select count(*) as total_count,ip from some_table group by ip having total_count > 3;
-- 查询某个⽉最后⼀天/某个⽉共有多少天
make up for-- select last_day('2012-02-22'), day(last_day('2012-02-22'));
-- ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column.
set sql_safe_updates = 0;
五、MySQL unix socket说明
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论