net start MySQL57
net stop MySQL57
mysql -u root -p
,-u 后面跟连接的数据库用户,-p 表示需要输入密 码。create database test1;
show databases;
use test1;
show tables;
drop database test1;
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;
show create table tablename \G;
drop table tablename;
alter table tablename rename new_tablename;
alter table tablename auto_increment=n;
insert into tablename (field1,field2,...fieldn) values(value1,value2,...valuesn);
insert into tablename values(value1,value2,...valuesn);
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;
delete from tablename [where condition];
update tablename set field1=value1, field2=value2,... fieldn=valun [where condition];
update t1,t2…tn set t1.field1=expr1,tn.fieldn=exprn [WHERE CONDITION] ;
用 SELECT 命令进行各种各样的查询,使得输出的结果符合我们的要求。SELECT 的语法很复杂,这里只介绍最基本的语法:
select * from tablename;
select field1,...fieldn from tablename [where condition];
select * from tablename [WHERE CONDITION] [order by field1 [DESC|ASC],field2 [DESC|ASC],……fieldn [DESC|ASC]];
其中,DESC 和 ASC 是排序顺序关键字,DESC 表示按照字段进行降序排列,ASC 则表示升序排列,不写此关键字默认是升序排列。ORDER BY 后面可以跟多个不同的排序字段,并且每个排序字段可以有不同的排序顺序,如果排序字段的值一样,则值相同的字段按照第二个排序字段进行排序,以此类推。
SELECT ……[limit offset_start,row_count] ;
其中 offset_start 表示记录的起始偏移量,row_count 表示显示的行数。 在默认情况下,起始偏移量为 0,只需要写记录行数就可以。limit 经常和 order by 一起配合使用来进行记录的分页显示。
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 是在聚 合前就对记录进行过滤.
-- 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
grant select,insert on test.* to 'user'@'localhost' identified by 'password';
revoke insert on test.* from 'user'@'localhost';