管理服务
启动:service mysql start;
停止:service mysql stop;
重启:service mysql reset;
mysql服务状态: service mysql status:
远程连接,授权root用户可以从任何地点登录
登录系统: mysql -h lockip -u root -p:
授权root用户:
GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION;
刷新权限:
FLUSH PRIVILEGES;
退出命令行:exit
数据库
创建数据库:create database name;
查看数据库:show datables;
创建指定字符集的数据库:create database name charset=utf-8;
创建数据库前进行判断是否存在:create database if not **exists **name cahrset=8;
选择数据:use name;
查看当前所在数据库:select database();
查看当前数据库编码格式:show variable like 'character_set_database';
修改数据库(修改其参数):alter databale name charset =utf8;
删除数据库:drop datable name;
引擎
三大引擎 Innodb MYSIAM(二者硬盘存储) MEMARY(基于显存 内存存储)
查看mysql支持的引擎:show engines;
查看默认引擎:show variables like 'default_storang_engines'
修改默认存储引擎:
- 在mysql配置文件(linux下为/etc/my.cnf),在mysqld后面增加
default-storage-engine=引擎名即可。 - 但是如果表建立的时候是MyISAM,要更改整个数据库表的存储引擎,一般要一个表一个表的修改,比较繁琐,可以采用先把数据库导出,得到SQL,把MyISAM修改成INNODB,再导入的方式。
表
创建表:create table if not exists table(id int not null auto_increment,age int not null default 0,primary key(id));
查看表:show tables;
查看表详情信息(具体的表):show create table name;
产看表结构 全部:DESC name;
产看表结构 列:DESC name age;
更新表(能更新不推荐):alter table;
添加新字段:alter table name add(id,int);
修改字段名:alter table name change name name1 int;
删除字段名:alter table name drop age;
修改表名: alter table bm name as bm1;
重命名表: alter table name bm to bm1;
删除表: drop table name;
复制表(注意顺序):create table name like name1;
表内容操作:
增
- 插入完整行 完全插入:
insert into name values(id,age); - 查询插入行:
select * from name; - 不完全插入:
insert into name(age,num) values(18,88) - 多行插入:
insert into name(age,num) values(77,66),(33,11) - 一个表插入到另一个表:
insert into name (age,num) select age,num from name1 ;
删除
- 删除指定一行:
delete from name where id=11; - 删除所有:
delete from name;
改
- 改单列:
update name set age=22 where id =1; - 改多列:
update name set age=22,name=''xx where id =3; - 删除某个列的值,可以设置这个列的值为空:
update name set age=null where id =5;
MYSQL检索数据
-
检索单列:
select age from name; -
检索多列:
select age,num from name; -
检索所有列:
select * from name; -
检索不同的行,去重:
select **distinct**(age) from name; -
使用完全限定的表名(同时使用表名和列名):
select name.age from name; -
完全限定名使用场景:如果只在自己内部使用,那么完全限定名基本上是不用的,这种情况太简单了。那么什么时候去使用呢?比如村里有两家分别叫王a和王b,并且两家都有个孩子叫王小三,这两个王小三并且在一个班级学习上课,那么老师叫王小三,这两个孩子就不知道叫谁了。说王a家王小三,那么王a家王小三就会知道是他。所以当在单表内查询时一般不用完全限定名,只有多个表涉及到相同的列名时,才会使用到完全限定名。比如用户表有个列叫name,商品表有个字段叫name,当查询时只使用name,那么数据库是不知道叫用户的name,还是商品的name,此时完全限定名就可以体现出来。使用完全限定名的作用就是防止歧义的发生!
-
= 等于:
select * from name where age=10; -
<> 不等于:
select * from name where age<>10; -
!= 不等于:
select * from name where age!=10; -
< 小于 (一般情况下后面会跟数字):
select * from name where age<10; -
<= 小于等于:
select * from name where age<=10; -
> 大于:
select * from name where age>10; -
>= 大于等于:
select * from name where age>=10; -
BETWEEN .. AND ..在指定的两个值之间:
select * from name where age between 10 and 20; -
空值检查(IS NULL):
select * from name where age is null;
组合WHERE子句
- AND:
select * from name age=10 and num=1; - OR:
select * from name where age=10 or num=2; - IN:
select * from name where age in(10,20); - NOT:
select * from name where age not in (10,20);
通配符:
| 通配符 | 描述 |
|---|---|
| % | 替代一个或多个字符 |
| _ | 仅替代一个字符 |
| [charlist] | 字符列中的任何单一字符 |
| [^charlist]或者[!charlist] | 不在字符列中的任何单一字符 |
原始的表 (用在例子中的):
Persons 表:
| Id | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 1 | Adams | John | Oxford Street | London |
| 2 | Bush | George | Fifth Avenue | New York |
| 3 | Carter | Thomas | Changan Street | Beijing |
使用 % 通配符
例子 1
现在,我们希望从上面的 “Persons” 表中选取居住在以 “Ne” 开始的城市里的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE City LIKE 'Ne%'
结果集:
| Id | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 2 | Bush | George | Fifth Avenue | New York |
例子 2
接下来,我们希望从 “Persons” 表中选取居住在包含 “lond” 的城市里的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE City LIKE '%lond%'
结果集:
| Id | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 1 | Adams | John | Oxford Street | London |
使用 _ 通配符
例子 1
现在,我们希望从上面的 “Persons” 表中选取名字的第一个字符之后是 “eorge” 的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE FirstName LIKE '_eorge'
结果集:
| Id | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 2 | Bush | George | Fifth Avenue | New York |
例子 2
接下来,我们希望从 “Persons” 表中选取的这条记录的姓氏以 “C” 开头,然后是一个任意字符,然后是 “r”,然后是任意字符,然后是 “er”:
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE LastName LIKE 'C_r_er'
结果集:
| Id | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 3 | Carter | Thomas | Changan Street | Beijing |
使用 [charlist] 通配符
例子 1
现在,我们希望从上面的 “Persons” 表中选取居住的城市以 “A” 或 “L” 或 “N” 开头的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE City LIKE '[ALN]%'
结果集:
| Id | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 1 | Adams | John | Oxford Street | London |
| 2 | Bush | George | Fifth Avenue | New York |
例子 2
现在,我们希望从上面的 “Persons” 表中选取居住的城市_不以_ “A” 或 “L” 或 “N” 开头的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE City LIKE '[!ALN]%'
结果集:
| Id | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 3 | Carter | Thomas | Changan Street | Beijing |
mysql正则:select * from bm where name regexp '^李'
排序
单列
- 升序:
select age from bm order by age asc; - 降序:
select age from bm order by age desc;
多列
- 升序:
select age,num from bm order by age asc,num asc; - 降序:
select age,num from bm order by age desc,num desc;
条件排序:
限制查询
- 指定返回行数:
select age from bm limit 1; - 指定从几行起,返回几行:
select age from bm limit 1,5; - order by和limit的组合使用
- 取最小值:
select age from bm order by age asc limit 1; - 取最大值:
select age from bm order by age desc limit 1;
聚合函数
- 返回某列平均值:
avg - 返回某列行数:
count - 返回某列最大值:
max - 返回某列最小值:
min - 返回某列之和:
sum - 聚集不同值:
select sum(disdinct age) from bm ; - 组合聚集函数:
select sun(age),min(nun) from bm;
分组
- 分组(单独用无意义)+聚合函数:
select count()age from bm group by age ; - group by + group_concat():
select count()age,group_concat(num) from bm group by age ;
增加显示字段分组结果
- group by + groupconcat+聚合函数:
select count(*)age,group_concat(num) from bm group by age - group by + groupwith rollup:
select count(*)age from bm group by age with rollup;
HAVING
组合
- 分组和排序:
select count(_)age from bm where age>1 group by age having age>2 order by age desc;_ - 分组和排序、限定查询:
_select count(_)age from bm where age>1 group by age** having age>1** order by age desc limit 2;
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付