文章目录
前言
对于不同的操作系统 , MySQL的执行语句都是一样的 , 所以编者选择在Ubuntu上进行操作 , 也算是加深在Ubuntu上使用MySQL. 当然对于windows的操作 , 也会在下文给出. 以下给出的都是在Linux下的操作.
启动(服务)并开启MySQL:
启动:
方式一:sudo /etc/init.d/mysql start
方式二:sudo service mysql start
开启:
mysql -uroot -p
停止(服务)及退出mysql:
停止:
方式一:sudo /etc/init.d/mysql stop
方式二:sudo service mysql stop
退出:
exit
重启mysql:
方式一:sudo/etc/init.d/mysql restart
方式二:sudo service mysql restart
首先我们先来查看一下 , 当前拥有的数据库
查看当前拥有的数据库
show databases;
如图所示:
切记:在每一条语句的最后要加分号 (" ; ")
创建一个数据库
我们来创建一个数据库名叫做 tmp的数据库
create database tmp;
这样就显示创建成功 , 然后我们在show一下
从图中可以看到 , tmp数据库已经创建成功.
选择数据库
选择使用哪个数据库 , 我们要使用刚刚创建的tmp数据库
use tmp;
这样 ,后面的建表 , 对表的操作都是在数据库tmp上进行.
查看数据库中有多少的表
show tables;
显示当前为空表
创建表
创建表的SQL语句格式如下:
CREATE TABLE 表名(属性名 数据类型 [完整性约束条件],
属性名 数据类型 [完整性约束条件],
...
属性名 数据类型 [完整性约束条件]
);
注意 : 创建表结构的时候,要选择合适的数据类型,而且还可以给字段添加完整性约束条件,比如主键,非空键,唯一键等。完整性约束条件都有哪些呢,如下所示:
约束条件 | 说明 |
---|---|
PRIMARY KEY | 修饰的属性为该表的主键, 可以区分不同的行记录 |
FOREIGN KEY | 修饰的属性为该表的外键,关联了父表的主键 |
NOT NULL | 表示该属性不能为空 |
UNIQUE | 表示该属性的值是唯一的 |
AUTO_INCREMENT | MySQL的特色 , 表示该属性是自增的 , 整数类型 |
DEFAULT | 给属性设置默认值 |
例如:
// 创建一张学生表 id int name varchar age int sex enum score double level
create table student(id int primary key,
name varchar(20), age tinyint,
sex enum('男', '女'), score double,
level varchar(20) default "不合格");
如图所示
这样就显示名为student的表创建成功.(因为输入的时候没注意 , 发现表名写错了 , 现在的表名为"stduent" )
让我们查看一下
查看表
1.查看表的结构
desc Table_anme; //表名
来查看一下刚才建成的表的结构 , 如图:
从上图可以看到, 用desc 可以查看到表的字段名称 , 类型 , 是否为空 , 约束条件 , 默认值 , 备注信息
2.查看表的详细结构 , 存储引擎 , 表的字符编码等信息
show create table Table_name\G
(SQL语句可以使用 ;号或者\G结尾 , \G结尾打印的格式更清晰)
如图所示
从上图可以看到,show create table命令可以打印出创建表的SQL语句,并显示了该编排的存储引擎和字符编码信息。
然后show一下
删除表
drop table tableName;
例如:
这样显示删除完成 , 我们在show一下
此时显示数据库中没有表.
之后 我们在按照刚才方法重新创建一个新的表student,id采取自动增长的方式 , 其他的都和刚才的一样.
插入数据
INSERT INTO <表名> [ <列名1> [ , … <列名n>] ]
VALUES (值1) [… , (值n) ];
如图所示
显示添加成功后 , 我们查看一下
我们向表中批量添加加一些数据 ,可以使用
insert into 表名 values(value1,value2,value3,....valuen),
(value1,value2,value3,....valuen),
(value1,value2,value3,....valuen),
......
(value1,value2,value3,....valuen);
这里的表名后面加上所需要的字段 , 不然MySQL就会报错 ; 如果在表明后面不添加字段 , 就需要每天记录的数值恍必须与表中字段的顺序一致.
更新表中数据
更新表中的数据,如果没有where,则将影响所有的记录
update tableName set name='administrator' where id='1';
例如:
我们将成绩>80的同学 , levle改为"合格"
显示成功后 , 我们查看一下表的信息
这样就是我们的更新操作.
删除表的中的数据
使用where设置删除的条件
delete from tableName where score < 60.0 or age < 20;
例如:
再来输出一下结果
这样就删除了"liu shuo"这个同学;
删除表中的所有数据,但是表结构依然存在
delete from tableName;
修改表
如果表在使用的过程中,逐渐发现表的字段不满足设计要求,而且表中已添加大量数据,此时想添加新的字段或者删除已有的字段,可以通过alter命令操作,如下是常用的alter命令**(但是最好还是设计之初,分析好应用场景,一次性设计好表的结构)** :
修改表名:
ALTER TABLE 旧表名 RENAME [TO] 新表名;
修改字段的数据类型:
ALTER TABLE 表名 MODIFY 属性名 数据类型;
修改字段名:
ALTER TABLE 表名 CHANGE 旧属性名 新属性名 新数据类型;
增加字段:
ALTER TABLE 表名 ADD 属性名1 数据类型 [完整性约束条件] [FIRST | AFTER 属性名2];
删除字段:
ALTER TABLE 表名 DROP 属性名;
修改字段排列位置:
ALTER TABLE 表名 MODIFY 属性名1 数据类型 FIRST | AFTER 属性名2;
修改表的存储引擎:
ALTER TABLE 表名 ENGINE=InnoDB | MyISAM;
大家可以用create table创建一个表,操作一下上面的alter语句。
查询表
SQL的基本查询结构如下:
SELECT 属性列表
FROM 表名
[WHERE 条件表达式1]
[GROUP BY 属性名1 [HAVING 条件表达式2]]
[ORDER BY 属性名2 [ASC | DESC]]
1. 带in的子查询
[NOT] IN (元素1,元素2,...,元素n)
如:select * from user where id in (select stu_id from grade where average>=60.0);
2. 带BETWEEN AND的范围查询
[NOT] BETWEEN 取值1 AND 取值2
如:select * from user inner join grade on user.id = grade.id where average between 80.0 and 100.0;
3. 带like的通配符匹配查询
[NOT] LIKE '字符串'
注意此处LIKE后面的字符串可以携带通配符
% : 表示0个或任意长度的字符串
_ :只能表示单个字符
如:select * from news where content like “%亚运会%”;
4. 空值查询
IS [NOT] NULL;
如:select * from user a left join grade b on a.id = b.userid where b.id is NULL;
5. 带AND的多条件查询
条件表达式1 AND 条件表达式2 [... AND 条件表达式n]
如:select * from user inner join grade on user.id = grade.id where average between 80.0 and 100.0 and user.sex=’男’;
6. 带OR的多条件查询
条件表达式1 OR 条件表达式2 [... OR 条件表达式n]
如:select * from user inner join grade on user.id = grade.id where grade.math>80.0 or grade.english>80.0;
7. 去重复查询
SELECT DISTINCT 属性名
如:select distinct name from user ;
8. 对结果排序
ORDER BY 属性名 [ASC | DESC]
如:select * from user inner join grade on user.id = grade.id where average between 80.0 and 100.0 order by average desc;
9. 分组查询
GROUP BY 属性名 [HAVING 条件表达式]
如:select name, count(*) from record group by id;
10. union合并查询
SELECT expression1, expression2, ... expression_n
FROM tables[WHERE conditions]
UNION [ALL | DISTINCT] //注意:union默认去重,不用修饰distinct,all表示显示所有重复值
SELECT expression1, expression2, ... expression_n
FROM tables[WHERE conditions];
如:SELECT country FROM Websites UNION ALL SELECT country FROM apps ORDER BY country;
11. Limit分页查询
不指定初始位置是LIMIT 记录数;指定初始位置是LIMIT 初始位置, 记录数。
如:select * from user limit 10, 20;
12. 内连接和外连接查询
内连接查询
SELECT a.属性名1,a.属性名2,...,b,属性名1,b.属性名2... FROM table_name1 a, table_name2 b on a.id = b.id where a.属性名 满足某些条件;
SELECT a.属性名1,a.属性名2,...,b,属性名1,b.属性名2... FROM table_name1 a inner join table_name2 b on a.id = b.id where a.属性名 满足某些条件;
如:select a.id,b.average,c.address from user a inner join grade b on a.id = b.userid
inner join info c on a.id = c.userid
where b.average>=60.0;
外连接查询
左连接查询
SELECT a.属性名列表, b.属性名列表 FROM table_name1 a [OUTER] LEFT JOIN table_name2 b on a.id = b.id;
右连接查询
SELECT a.属性名列表, b.属性名列表 FROM table_name1 a [OUTER] RIGHT JOIN table_name2 b on a.id = b.id;
我们一般都会用连接查询代替in子查询进行多表联合查询,子查询的效率远不及连接查询效率高!
13.统计函数
- AVG()函数 : 该统计函数实现计算字段的平均值 .
- SUM()函数 : 该统计函数实现计算字段的总和 .
- MAX()函数 : 该统计函数实现计算字段的最大值 .
- MIN()函数 :该统计函数实现计算字段的最小值 .
- COUNT()函数 : 该统计函数实现统计表中记录的条数 .
具体语法 :
select function(field)
from table_name
where condition
在上述语句中利用统计函数 function 来统计关于字段 field 的值.
设置表的字符编码
有时候MySQL中的表需要存储中文,需要设置表的字符编码为utf8,否则默认的字符编码有可能不能正确处理中文,那么在MySQL中,如何设置表的字符编码呢?如下:
通过命令查看MySQL表的字符编码,如下:
show variables like 'charac%';
如图所示:
如下设置:
set character_set_server=utf8;
字符编码设置utf8成功,MySQL的status运行状态和运行参数都是通过全局变量来控制的,用show status和show variables两个命令可以查看这些信息,用set可以设置这些信息,改变配置。