MySQL基本操作
多用户多数据库,用户->数据库,习惯是一个系统建立一个数据库和一个用户,这样方便管理(有些时候为了偷懒只建立一个数据库而不建立用户的情况也是很常见的):创建数据库,创建用户并授权,使用数据库,建表给数据(DDL,DML)
MySQL常用命令(上)
启动与退出
1、进入MySQL:启动MySQL Command Line Client(MySQL的DOS界面),直接输入安装时的密码即可。此时的提示符是:
mysql>
2、退出MySQL:
quit或exit;
显示所有的数据库
show databases;
(注意:最后有个s)
库操作
tips:db_name表示你自己起的名称,可任意
创建数据库
create database db_name;
例如:建立一个名为test的数据库
create database test;
删除数据库
drop database db_name;
或者
drop database if exists db_name;
连接数据库
命令: use db_name;
例如:如果db_name数据库存在,尝试存取它: use db_name; 屏幕提示:Database changed
查看当前使用的数据库
方法1:select database();
方法2:show tables; --没表的时候没用
方法3:status; 当前数据库包含的表信息: show tables; (注意:最后有个s)
查看MySQL数据库中所有用户
select distinct concat('user: ',user, '@', host, ';') as db_user from mysql.user;
简写为:
select distinct user from mysql.user;
数据库中的授权
法1:一边建立用户一边授权,这边授予全部权限
grant all privileges on *.* to jef@localhost identified by 'password';
法2:先创建用户
create user user_name@localhost identified by 'password';
然后给用户授权
grant all privileges on *.* to user_name@localhost;
tips:
第一个*表示数据库名,第二个*号表示表名
实际开发中比较常用的是只授予查询权限
grant select on *.* to jef@localhost identified by 'password';
删除用户
第一步:
use mysql;
第二步:
方法1:delete from user where user='user_name' and host='localhost';
方法2:drop user user_name@localhost;
向用户回收权限
revoke all privileges on db_name.table_name from user_name@localhost;
刷新权限
flush privileges;
修改指定用户密码
use mysql;
update user set password=password('new_password') where user="user_name" and host="localhost";
flush privileges;
exit;
完整数据类型说明参考,将内容保存为html即可查看:
MySQL权限
表操作
操作之前应连接某个数据库字段类型
完整数据类型说明参考,将内容保存为html即可查看:
数据库数据类型参考手册
建表
命令:create table <表名> ( <字段名1> <类型1> [,..<字段名n> <类型n>]);
create table MyTable(
id int(4) not null primary key auto_increment,
name char(20) not null,
sex int(4) not null default '0',
degree double(16,2)
);
MySQL表名和字段名不区分大小写。
获取表结构
命令: desc 表名,或者show columns from 表名;
方法1:describe MyTable;
方法2:desc MyTable;
方法3: show columns from MyTable;
拓展:
显示表创建语句
show create table table_name;
删除表
命令:drop table <表名>;
例如:删除表名为 MyTable 的表
drop table MyTable;
更改表名
命令:rename table 原表名 to 新表名;
例如:在表MyTable名字更改为YourTable
rename table MyTable to YourTable;
在表中增加字段、删除字段、修改字段
命令:alter table 表名 add 字段 类型 其他;
例如:在表MyTable中添加了一个字段passtest,类型为int(4),默认值为0
alter table MyTable add passtest int(4) default '0'
alter table r drop A;--删除字段
alter table r modify A D;--修改字段
alter table table_name add column userid int(11) not null primary key auto_increment;
这样,就在表table_name中添加了一个字段userid,类型为int(11)。
插入数据
默认的形式:insert into <表名> values ();//无值的时候需要填充为null
非默认的形式(最常用的是不改变顺序,改变个数):insert into <表名> (<字段名1>, ... , <字段名n>) values (值1, ... , 值n);
例如,往表 MyTable中插入二条记录, 这二条记录表示:编号为1的名为Tom的成绩为96.45, 编号为2 的名为Joan 的成绩为82.99,编号为3 的名为Wang 的成绩为96.5.
批量插入数据,在单个插入数据的基础上values后面的()不断重复,以英文逗号分隔,values(n11, n12, ..., n1n), (n21, n22, ... , n2n)....
insert into MyTable values (0, 'Tom', 1,96.45);
insert into MyTable values (1, 'Joan', 0,82.99);
insert into MyTable values (2, 'Wang', 1,96.59);
insert into MyTable(id, name, degree) values (3, 'test', 99.33);
删除表中数据
命令:delete from 表名 where 表达式;
例如:删除表 MyTable中编号为1 的记录
delete from MyTable where id=1;
修改表中数据:
update 表名 set 字段=新值,… where 条件
update MyTable set name='Mary' where id=1;
查询表中数据:
1)、查询所有行
命令: select <字段1,字段2,...> from < 表名 > where < 表达式 >;
例如:查看表 MyTable 中所有数据
select * from MyTable;
2)、查询前几行数据
例如:查看表 MyTable 中前2行数据
mysql> select * from MyTable order by id limit 0,2;
或者:
mysql> select * from MyTable limit 0,2;
/*拓展,使用分页,从第3+1项开始的2项*/
select * from dept
order by deptno asc
limit 3,2;--分页:(当前所在页数-1)*每页的行数,每页的行数
更新字段内容
update 表名 set 字段名 = 新内容;
update 表名 set 字段名 = replace(字段名,'旧内容','新内容');
文章前面加入4个空格
update article set content=concat(' ',content);
日期格式的使用
select now();--显示现在的时间
select date_format(now(),'%Y-%m-%d %h:%i:%s');
对常用权限的解释
全局管理权限:
FILE: 在MySQL服务器上读写文件。
PROCESS: 显示或杀死属于其它用户的服务线程。
RELOAD: 重载访问控制表,刷新日志等。
SHUTDOWN: 关闭MySQL服务。
数据库/数据表/数据列权限:
alter: 修改已存在的数据表(例如增加/删除列)和索引。
create: 建立新的数据库或数据表。
delete: 删除表的记录。
drop: 删除数据表或数据库。
index: 建立或删除索引。
insert: 增加表的记录。
select: 显示/搜索表的记录。
update: 修改表中已存在的记录。
特别的权限:
ALL: 允许做任何事(和root一样)。
USAGE: 只允许登录--其它什么也不允许做。
MySQL常用命令(下)
将文本数据转到数据库中
1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用\n来代替.
例:
3 rose 深圳二中 1976-10-10
4 mike 深圳一中 1975-12-23
2、数据传入命令 load data local infile "文件名" into table 表名;
注意:文件存放地方没有要求,但是要用use db_name先使用这个数据库 。
where子句指定查询条件
1 比较运算符
比较运算符 含义
= 等于
> 大于
< 小于
>= 大于等于
<= 小于等于
<> 不等于
!> 不大于
!< 不小于
2 列表(in,not in)
in 运算符用来匹配列表中的任何一个值。in子句可以代替用or子句连接的一连串的条件。
2 模式匹配(like)
like运算符检验一个包含字符串数据的字段值是否匹配一指定模式。
like运算符里使用的通配符
通配符 含义
_ 任何一个单一的字符
% 任意长度的字符
用order by子句排序结果
order子句按一个或多个(最多16个)字段排序查询结果,可以是升序(asc)也可以是降序(desc),缺省是升序。order子句通常放在SQL语句的最后。
order子句中定义了多个字段,则按照字段的先后顺序排序。
运用连接关系实现多表查询
=、natural join、join on、join using
分组和总结查询结果
在SQL的语法里,group by和having子句用来对数据进行汇总。group by子句指明了按照哪几个字段来分组,而将记录分组后,用having子句过滤这些记录。
MySQL 中的聚集函数
聚集函数 意义
sum( ) 求和
avg ( ) 平均值
count ( ) 表达式中记录的数目
count (* ) 计算记录的数目
max 最大值
min 最小值
var 方差
stdev 标准误差
first 第一个值
last 最后一个值
子查询
子查询可以理解为 套查询.子查询是一个SELECT语句.
1 表达式的值与子查询返回的单一值做比较
语法:
表达式 comparision [any|all|some](子查询)
说明:
any和some谓词是同义词,与比较运算符(=,<,>,<>,<=,>=)一起使用.返回一个布尔值true或 false.any的意思是,表达式与子查询返回的一系列的值逐一比较,只要其中的一次比较产生true结果,any测试的返回 true值(即where子句的结果),对应于该表达式的当前记录将进入主查询的结果中.all测试则要求表达式与子查询返回的一系列的值的比较都产生 true结果,才回返回true值.
2 检查表达式的值是否匹配子查询返回的一组值的某个值
语法:
[not]in(子查询)
3检测子查询是否返回任何记录
语法:
[not]exists (子查询)