MySQL基础:
SQL简介:
当面对一个陌生的数据库时,通常需要一种方式与它进行交互,以完成用户所需要的各种工作,这个时候,就要用到 SQL 语言了。
SQL,它是使用关系模型的数据库对应的语言。
SQL语句分类:
DDL语句:
数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象的定义。常用的语句关键字主要包括 create、drop、alter等。
DML语句:
数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句关键字主要包括 insert、delete、udpate 和select 等。
DCL语句:
数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句关键字包括 grant、revoke 等。
DDL语句:
1.连接MySQL服务器:
mysql -u root -p
#-u 后面还是用户名 ,-p后面还是密码
2.创建数据库:
create database dbname;
#其中dbname是要创建的数据库的名字,要加分号
#SQL语句用分号代表结尾
3.查看数据库:
show databases;
4.选择/切换数据库:
use dbname
5.查看当前数据库里的数据表:
show tables;
6.删除数据库:
drop database dbname;
7.创建数据表:
create table stus(name varcahr(10),age int);
#其中stus是要创建的数据表名字,name、age是字段名,varchar、int数据类型
8.查看数据表结构:
desc stus;
9.删除数据表:
drop table stus;
10.修改数据表的表名:
alter table stus rename stus1;
11.修改数据表的字段:
alter table stus modify name varchar(30);
#其中stus是表名,name varchar(30)是要修改name字段为varchar(30)
12.增加数据表的字段:
alter table stus add weight int;
13.删除数据表的字段:
alter table stus drop weight;
14.更改数据表的字段名:
alter table stus change weight tizhong int(4);
DML语句:
1.插入记录:
insert into stus(name,age) values("shao",20);
2.更新记录:
update stus set age=18 where name="shao";
3.删除记录:
delete from stus where name="shao";
4.查询记录:
select * from stus;
#查询出stus中所有的记录(全部字段都展示出来)
select name from stus;
#查询出stus中所有的记录(只将name字段都展示出来)
select distinct age from stus;
#查询出stus中age不重复的记录(只将age字段都展示出来)
#条件查询
select name from stus where age=18;
#查询出stus中age是18的记录(只将name字段都展示出来)
#排序
select name,age from stus order by age desc;
#查询出stus中age所有的记录(只将name、age字段都展示出来)
#并且是按照age的大小降序排序,dexc表示降序,asc表示升序
#限制
select name,age from stus order by age limit 1,3;
#查询出stus中age所有的记录(只将name、age字段都展示出来)
#并且是按照age的大小排序(默认是升序)
#将排序完的第二条数据开始,展示三天数据(其中limit 1,3 表示从第2条开始,取3条数据)
#limit x,y ; X:起始偏移量默认从0,y:显示的行数
#聚合
select age,count(1) from stus group by age having count(1)>1;
#统计人数大于1的年龄
#count(1) 字段名
#having count(1)>1 过滤
#常用的聚合操作:sum(求和)、count(*)(记录数)、max(最大值)、min(最小值)
#表连接
select name1,name2 from stus,stus1 where stus.age=stu1.age;
#根据stus的age=stu1中的age,将两个表连接到一起,在展示出name1,name2
#左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录
#select name1,name2 from stus left join stus1 where stus.age=stu1.age;
#右连接:包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录
#select name1,name2 from stus right join stus1 where stus.age=stu1.age;
DCL语句:
grant select,insert on dbname.* to "shao123"@"localhost" identified by "123";
#创建一个用户名为shao123,密码为123的用户,具有对dbname数据库里的所有表的select、insert权限
revoke insert on dbname.* from "shao123"@"localhost";
#将用户shao123的insert权限去除