安装mysql
ubuntu安装mysql命令
1 sudo apt-get install mysql-server 2 sudo apt-get install mysql-client 3 sudo apt-get install libmysqlclient-dev
第一条命令中间会让用户设置密码,一定不能回车跳过!!!!!
windows直接官网下载免安装版本
忘记密码时的教程(适用于5.7)(windows)
1.先关闭mysql
net stop mysql
2.运行
mysqld_safe --skip-grant-tables
注意是mysqld,不是mysql
此时窗口无反应,不要关闭窗口,打开一个新窗口
3.进入mysql
mysql -p
输入密码时直接回车
4.更改密码
mysql> update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';
然后
mysql> flush privileges; mysql> quit;
用新密码进入之后若提示错误,可重新设置密码
mysql> set password=password("123456"); mysql> flush privileges;
数据库操作
启动
启动服务器:
net start mysql 或 C:\mysql-5.7.16-winx64\mysql-5.7.16-winx64\mysql mysql.server start /etc/init.d/mysql start
客户端连接:
mysql -u root -p
显示与创建
show databases; # 查看当前Mysql都有那些数据,根目录都有那些文件夹 create database 数据库名; # 创建文件夹 use 数据库名; # 使用选中数据库,进入目录 show tables; # 查看当前数据库下都有那些表, create table 表名(nid int,name varchar(20), pwd varchar(64)); # 创建数据库表 select * from 表名; # 查看表中的所有数据 desc 表名; # 查看表结构 insert into 表名(nid,name,pwd) values(1,'alex','123'); # 插入数据 -- select * from 表名;
用户管理
创建用户 create user '用户名'@'IP地址' identified by '密码'; 删除用户 drop user '用户名'@'IP地址'; 修改用户 rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';; 修改密码 set password for '用户名'@'IP地址' = Password('新密码'); show grants for '用户'@'IP地址' -- 查看权限 grant 权限 on 数据库.表 to '用户'@'IP地址' -- 授权 库.*所有表 revoke 权限 on 数据库.表 from '用户'@'IP地址' -- 取消权限 select # 查 all privileges 除grant外的所有权限
连接指定ip
mysql -u root -h 192.168.1.1 -p
SQL语句
数据库级别
SHOW DATABASES; CREATE DATABASE 数据库名称; CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; # 设置utf8编码 USE 数据库名称; drop database 数据库名称;
数据表级别
1.创建表
show tables; desc tb1; create table tb1(nid int, name varchar(10)); # 创建表 create table 表名( 列名 类型 是否可以为空(默认可以为空), )ENGINE=InnoDB DEFAULT CHARSET=utf8
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
是否可空,null表示空,非字符串 not null - 不可空 null - 可空
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值 create table tb1( nid int not null defalut 2, num int not null )
自增(重要)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
自增,如果为某列设置自增列,插入数据时无需设置此列,默认将自增(表中只能有一个自增列) create table tb1( nid int not null auto_increment primary key, num int null ) 或 create table tb1( nid int not null auto_increment, num int null, index(nid) ) 注意:1、对于自增列,必须是索引(含主键)。 2、对于自增可以设置步长和起始值 show session variables like 'auto_inc%'; set session auto_increment_increment=2; set session auto_increment_offset=10; shwo global variables like 'auto_inc%'; set global auto_increment_increment=2; set global auto_increment_offset=10;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
主键,一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。不可为空 create table tb1( nid int not null auto_increment primary key, num int null ) 或 create table tb1( nid int not null, num int not null, primary key(nid,num) )
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
外键,一个特殊的索引,只能是指定内容 creat table color( nid int not null primary key, name char(16) not null ) create table fruit( nid int not null primary key, smt char(32) null , color_id int not null, constraint fk_cc foreign key (color_id) references color(nid) )
2.删除表
drop table 表名
3.清空表
delete from 表名 truncate table 表名 # 更快,同时删除自增信息
4.修改表
添加列:alter table 表名 add 列名 类型 删除列:alter table 表名 drop column 列名 修改列: alter table 表名 modify column 列名 类型; -- 类型 alter table 表名 change 原列名 新列名 类型; -- 列名,类型 添加主键: alter table 表名 add primary key(列名); 删除主键: alter table 表名 drop primary key; alter table 表名 modify 列名 int, drop primary key; 添加外键:alter table 从表 add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段); 删除外键:alter table 表名 drop foreign key 外键名称 修改默认值:ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000; 删除默认值:ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
基本数据类型
字符串
char() 固定长度,占用大,但是处理速度快
varchar() 不固定长度,但是速度慢
enum 枚举 相当于众多内容中单选
set 集合 可以多选
数据行(表内容)操作
1.增
insert into 表 (列名,列名...) values (值,值,值...) insert into 表 (列名,列名...) values (值,值,值...),(值,值,值...) insert into 表 (列名,列名...) select 列名,列名... from 表
2.删
delete from 表 delete from 表 where id=1 and name='alex'
3.改
update 表 set name = 'alex' where id>1
4.查
select * from 表 # 效率低 select * from 表 where id > 1 select nid,name,gender as gg from 表 where id > 1
5.其他
1 a、条件 2 select * from 表 where id > 1 and name != 'alex' and num = 12; 3 4 select * from 表 where id between 5 and 16; -- 5和16之间的 5 6 select * from 表 where id in (11,22,33) 7 select * from 表 where id not in (11,22,33) 8 select * from 表 where id in (select nid from 表) 9 10 11 b、通配符 12 select * from 表 where name like 'ale%' - ale开头的所有(多个字符串) 13 select * from 表 where name like 'ale_' - ale开头的所有(一个字符) 14 15 c、分页 16 select * from 表 limit 5; - 前5行 17 select * from 表 limit 4,5; - 从第4行开始的5行 即是从第5行开始 18 select * from 表 limit 5 offset 4 - 从第4行开始的5行 19 20 d、排序 21 select * from 表 order by 列 asc - 根据 “列” 从小到大排列 22 select * from 表 order by 列 desc - 根据 “列” 从大到小排列 23 select * from 表 order by 列1 desc,列2 asc - 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序 24 25 e、分组 26 select num from 表 group by num 27 select num,nid from 表 group by num,nid 28 select num,nid from 表 where nid > 10 group by num,nid order nid desc 29 select num,nid,count(*),sum(score),max(score),min(score) from 表 group by num,nid 30 31 select num from 表 group by num having max(id) > 10 32 33 特别的:group by 必须在where之后,order by之前 34 35 36 37 f、连表 38 无对应关系则不显示 39 select A.num, A.name, B.name 40 from A,B 41 Where A.nid = B.nid 42 43 无对应关系则不显示 44 select A.num, A.name, B.name 45 from A inner join B 46 on A.nid = B.nid 47 48 A表所有显示,如果B中无对应关系,则值为null 49 select A.num, A.name, B.name 50 from A left join B 51 on A.nid = B.nid 52 53 B表所有显示,如果B中无对应关系,则值为null 54 select A.num, A.name, B.name 55 from A right join B 56 on A.nid = B.nid 57 58 g、组合 59 组合,自动处理重合 60 select nickname 61 from A 62 union 63 select name 64 from B 65 66 组合,不处理重合 67 select nickname 68 from A 69 union all 70 select name 71 from B 72 73 count() 求数量 74 avg() 求平均数 75 sum() 求和 76 distinact 去重
IF(expr1,expr2,expr3) 如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。