cmd环境下开启关闭数据库
- 以管理员身份运行命令提示符环境,启动数据库服务(其中MySQL57为数据库服务名,查找方法:右键我的电脑->管理->服务,):
net start MySQL57
- 关闭数据库服务:
net stop MySQL57
- 启动MySQL服务后,命令提示符环境下连接到服务器:
mysql -u root -p
,-u 后面跟连接的数据库用户,-p 表示需要输入密 码。
一:DDL(Data Definition Languages)语句:数据定义语言,,就是对数据库内部的对象(如数据段、 数据库、表、列、索引等数据库对象)进行创建、删除、修改的 操作语言。常用的语句关键字主要包括 create、drop、alter 等。。DDL 语句更多的被数据库管理员(DBA)所使用, 一般的开发人员很少使用。
1.创建、删除数据库
- 创建数据库,名为test1:
create database test1;
- 查看系统中存在的数据库:
show databases;
- 选择要操作的数据库,名为test1:
use test1;
- 查看当前数据库中创建的所有数据表:
show tables;
- 删除名为test1的数据库:
drop database test1;
2.创建、删除数据表
- 在数据库中创建一张表的基本语法如下(tablename为表的名字,column_name 是列的名字,column_type 是列的数据类型,contraints 是这个列的约 束条件,fk_tablename1_tablename2为外键名,外键名不能重复,因为表名不会重复,所以可以这样定义避免重复):
create table tablename1 (
column_name_1 column_type_1 constraints,
column_name_2 column_type_2 constraints,
……
column_name_n column_type_n constraints
#外键约束:
#key fk_tablename1_tablename2 (当前表的列名),
#constraint fk_tablename1_tablename2 key(当前表的列名) references tablename2(表tb2里的列名)
);
- 查看表的定义:
desc tablename;
- 查看创建表的SQL语句,使用命令:
show create table tablename \G;
- 删除表:
drop table tablename;
- 更改表名:
alter table tablename rename new_tablename;
- 设置自增的步长为n:
alter table tablename auto_increment=n;
二: DML(Data Manipulation Language)语句:数据操纵语句,用于添加、删除、更新和查 询数据库记录,并检查数据完整性,常用的语句关键字主要包括 insert、delete、udpate 和 select 等。
1.插入记录
- 插入记录的基本语法,values 后面写对应字段名称的 value,当其为字符串时,要使用引号:
insert into tablename (field1,field2,...fieldn) values(value1,value2,...valuesn);
- 也可以不用指定字段名称,但是 values 后面的顺序应该和字段的排列顺序一致:
insert into tablename values(value1,value2,...valuesn);
- 在 MySQL 中,insert 语句还有一个很好的特性,可以一次性插入多条记录,每条记录之间都用逗号进行分隔。 语法如下:
INSERT INTO tablename (field1, field2,……fieldn)
VALUES
(record1_value1, record1_value2,……record1_valuesn),
(record2_value1, record2_value2,……record2_valuesn),
……
(recordn_value1, recordn_value2,……recordn_valuesn)
;
- 将一表的数据插入到零另一表:
insert into tb1(field1,field2) select fieldx,fieldy from tb2;
2.删除记录
- 用 delete 命令进行删除,语法如下:
delete from tablename [where condition];
3.更新记录
- 通过 update 命令进行更改,语法如下:
update tablename set field1=value1, field2=value2,... fieldn=valun [where condition];
- 在 MySQL 中,update 命令可以同时更新多个表中数据,语法如下:
update t1,t2…tn set t1.field1=expr1,tn.fieldn=exprn [WHERE CONDITION] ;
4.查询记录
用 SELECT 命令进行各种各样的查询,使得输出的结果符合我们的要求。SELECT 的语法很复杂,这里只介绍最基本的语法:
- 最简单的是将记录全部选出:
select * from tablename;
- 条件查询:
select field1,...fieldn from tablename [where condition];
- 排序,取出按照某个字段进行排序后的记录结果集,,这就用到了数据库 的排序操作,用关键字 ORDER BY 来实现,语法如下:
select * from tablename [WHERE CONDITION] [order by field1 [DESC|ASC],field2 [DESC|ASC],……fieldn [DESC|ASC]];
其中,DESC 和 ASC 是排序顺序关键字,DESC 表示按照字段进行降序排列,ASC 则表示升序排列,不写此关键字默认是升序排列。ORDER BY 后面可以跟多个不同的排序字段,并且每个排序字段可以有不同的排序顺序,如果排序字段的值一样,则值相同的字段按照第二个排序字段进行排序,以此类推。
- 限制, 如果希望只显示记录的一部分,而不是全部,这时,就可以使用 LIMIT 关键字 来实现,LIMIT 的语法如下:
SELECT ……[limit offset_start,row_count] ;
其中 offset_start 表示记录的起始偏移量,row_count 表示显示的行数。 在默认情况下,起始偏移量为 0,只需要写记录行数就可以。limit 经常和 order by 一起配合使用来进行记录的分页显示。
- 聚合,很多情况下,我们需要进行一些汇总操作,比如统计整个公司的人数或者统计每个部门的人数,这个时就要用到 SQL 的聚合操作。 聚合操作的语法如下:
select [field1,field2,……fieldn] fun_name
from tablename
[WHERE where_contition]
[group by field1,field2,……fieldn
[WITH ROLLUP]]
[having where_contition]
[order by field1 rule,...fieldn] /*排序关键字及排序方式*/
对其参数进行以下说明:
(1) fun_name 表示要做的聚合操作,也就是聚合函数,常用的有 sum(求和)、count(*)(记 录数)、max(最大值)、min(最小值)、avg(平均值)。
(2)group by 关键字表示要进行分类聚合的字段,比如要按照部门分类统计员工数量,部门 就应该写在 group by 后面。
(3) WITH ROLLUP 是可选语法,表明是否对分类聚合后的结果进行再汇总。
(4)having 关键字表示对分类后的结果再进行条件的过滤。having 和 where 的区别在于 having 是对聚合后的结果进行条件的过滤,而 where 是在聚 合前就对记录进行过滤.
- 表连接:从大类上分,表连接分为内连接和外连接,它们之间的最主要区别是內连接仅选出两张表中 互相匹配的记录,而外连接会选出其他不匹配的记录,连接条件可以在from子句或where子句中指定,建议在from子句中指定连接条件。
(1)内连接包括等值连接和自然连接,内连接使用比较运算符根据每个表共有列的值匹配其中两个表的行,共有列的值相等就进行连接:
-- c,s分别为给course,student取的别名,加了inner以及不加inner返回结果一样
-- 第一条查询语句为将连接条件放在where子句中的写法
select *
from student s ,sc ,course c
where sc.cno=c.cno and s.sno=sc.sno
select *
from (course c join sc on c.cno=sc.cno) join student s on sc.sno=s.sno
select *
from (course c inner join sc on c.cno=sc.cno) inner join student s on sc.sno=s.sno
(2)外连接分为左外连接、右外连接、全外连接:
A: 左外连接:包含所有的左边表中的记录,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有列均为空值。
select c.cno,cname,s.sno,sname,sdept
from (course c left join sc on c.cno=sc.cno) left join student s on sc.sno=s.sno
B: 右外连接:返回右表的所有行,如果右表的某行在左表中没有匹配行,则为结果集中的左表返回空值。
select c.cno,cname,s.sno,sname,sdept
from (course c right join sc on c.cno=sc.cno) right join student s on sc.sno=s.sno
C:全外连接:返回左表和右表中的所有行,当某行在另一个表中没有匹配行时,则另一个表的列返回空值。相当于左外连接和右外连接的并集。
select *
from (course c full join sc on c.cno=sc.cno) full join student s on sc.sno=s.sno
三: DCL(Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别,一般的开发人员很少使用。主要的语句关键字包括 grant、revoke 等。
- 创建一个数据库用户 user1,具有对 test数据库中所有表的 SELECT/INSERT 权限:
grant select,insert on test.* to 'user'@'localhost' identified by 'password';
- 将 user1的权限变更,收回 INSERT,只能对数据进行 SELECT 操作:
revoke insert on test.* from 'user'@'localhost';