紧接上文,环境搭建成功之后,如何开始进行简单的SQL练习
一、DDL(Data Definition Language)数据库定义语言
什么是DDL?举个简单的例子,比如Excel表格,想新建表格,就需要先创建一个Excel文件,然后定义好表格的表头,随后补充信息。而这DDL就是进行创建表格、定义表头、修改表头、删除表字段这些操作的。
【1】建库&删除
创建名为databasename的数据库:
#### 建库 ####
create database databasename;
#### 删库 ####
drop database databasename;
【2】在库中建表&删表
创建名为tablename的表:
### 进入/使用databasename库 ###
use databasename
### 在库中建表 ###
create table tablename(添加的字段 数据类型 约束); ## 至少要有一个字段
### 在库中删表 ###
drop table tablename;
##### 创建新表student1且表字段与‘student ’一样 ####
create table student1 like student;
如上文中创建一个表名为company的表
create table company
(id int primary key not null,
name text not null,
age int mot null,
address char(50),
salary real);
其中:
primary key:为主键,具有唯一性,上例中将设为id主键且值不能为空,表中可以没有主键
int、char、real:这些事字段中的存储值的数据类型,和Excel中有文本存储,有数字存储一样
(50):定义该字段的存储长度
具体含义如下图所示:
创建表成功后通过命令可查库内所有的表
show tables;
创建表成功后也可以通过命令查看tablename表结构
desc tablename;
【3】修改表
A.修改表名
alter table +表名 +rename +修改后的名称
比如修改上面的表名为NewTable
B.修改表字段名称/数据类型/约束
alter table +表名 change +原字段 +新字段 数据类型 (约束)
比如同时修改表字段salary的名称、数据类型和约束
若只想单独修改字段名称,则在命令后不追加数据类型和约束即可,如下
alter table NewTable change salary phone_number;
C.修改表字段顺序
#### 将某字段放到第一位 ####
alter table +表名 modify 某字段 数据类型 first;
#### 将字段A放在某字段后 ####
alter table +表名 modify 字段A 数据类型 after 某字段;
比如将NewTable表中的phone_number放到第一个位置
将NewTable表中的phone_number放在name之后
D.删除表字段
alter table +表名 drop + 某字段;
#### 删除该字段后,同时会删除该列数据
比如删除表中的phone_number字段
注意:若要删除主键,则需要先删除主键约束
在MySQL中去掉一个表格的主键需要分两种情况:
(1)该字段同时设置为且自增长(auto_increment),如下表
此时需先现将自增长去掉
然后再删除主键约束
alter table 表名 drop primary key;
(1)该字段只设置了主键约束sql设置主键,可以直接删除主键,如下
删除主键约束后就能像上面删除phone_number字段一样删除主键字段了
E.增加表字段
alter table +表名 add + 添加的字段 数据类型 约束(默认值、非空、主键、自增长、外键等)
比如给NewTable表中添加married字段,数据类型为char,不能为空
二、DML(Data ManipulationLanguage)数据库操作语言
什么是DML?Excel表格中表头等表结构完成建立之后,需要新增、修改、删除、查询表数据,而DML正是对表数据进行增删改查操作
【1】增
表格我们建好之后,开始对数据进行操作,首先来看下如何写入数据,写入数据可用如下命令:
insert into 表名(字段 1,字段2,..)values(数据1,数据2,....);
###### 将表‘student’的数据插入表‘student1’ ######
insert into student1 select * from student;
##### 指定字段插入,如果student1有数据是不能插入,需要重新创建一个表;
insert into student1(id,name) select id,name from student;
注意:
1、字段数据类型为字符时,插入需要加引号;
2、插入的数据数量刚好等于表头字段数量时,表头字段可以省略;
3、插入多条数据时,用逗号隔开即可
比如,插入一条数据
同时插入多条数据
插入的数据数量刚好等于表头字段数量时,表头字段可以省略
【2】删
数据写完后,若想进行删除操作,可以使用如下语句:
delete from 表名 where 删除条件;
#### 删除大量数据,建议使用如下数据
truncate + 表名
其中删除条件可以是单个,也可以组合
1、常见的单个条件
= ,> ,= , <=, != ,
2、常见的条件连接词
and、or、between ...and..、in 、not in、is null、is not null
比删除NewTable表中id等于4的数据
删除年龄为28且名字叫WangWu的数据
【3】改
在写入数据的过程中难免出错,此时若想修改数据,则可采用如下语句:
update 表名 set 字段=新数据 where 更改条件
比如将NewTable表中Lisi的年龄改为26
【4】查
实际工作中数据库已经被建立,且已有数据,所以我们更多的是通过条件去查询,从而获得我们想要的数据。查询可通过如下语句:
select XXX from 表名 where 查询条件;
(1)查询结果限制输出:比如查NewTable表中年龄为28中的一人(限1人)
(2)查询结果指定输出:比如查NewTable表年龄为28,输出第2条到第3条
也可以只输出某一条,比如查NewTable表年龄为28,输出第2条
(3)查询不为空的数据:比如查NewTable表address不为空的数据
(4)查询不在列表中的数据:比如查NewTable表name不是zhangsan、zhangsi的数据
(5)通过like进行模糊查询
select * from 表名 where 某字段 like 'XXXX%'
比如查NewTable表中name含有zhang的数据
查NewTable表中name含有s的数据
(6)查询到的数据进行排序:比如查NewTable表通过id降序
查NewTable表name含有s的数据再通过age升序
(7)查询中常用的函数
1、sum——求和:比如求NewTable表中所有人的年龄之和
2、max——最大值;min——最小值:比如NewTable表中id最大、年龄最小的值
3、count——总行数:比如查NewTable中共有多少人
4、函数与group by结合使用:先建一个学生表
按班级查出数学最高分
查哪一些班级的数学平均成绩大于80
select class,avg(math) as avg_math from student group by class having avg_math>80;
使用注意:
a.聚合函数可以单独使用
b.聚合函数与groupbyXXXhaving配合使用时:先分组sql设置主键,在对原表计算,计算出来的结果与分组合成新表,最后对新表过滤
c.当一个查询语句同时出现了where,group by (having),order by的时候,执行顺序是:
1.执行where xx对全表数据做筛选,返回第1个结果集。
2.针对第1个结果集使用group by分组,返回第2个结果集。
(若含有有聚合函数,则将先对原表进行计算,与第2结果集合成新表,再继续第3点)
3.针对第2个结果集中的每1组数据执行select xx,有几组就执行几次,返回第3个结果集。
4.针对第3个结集执行having xx进行筛选,返回第4个结果集。
5.针对第4个结果集order by 排序。
编写顺序:
select class,avg(math) as avg_math from student where age>18 group by class having avg_math>60 order by class asc;
注意事项:
【1】where不能放在GROUPBY后面
【2】having是跟GROUPBY连在一起用的,放在groupby后面,此时的作用相当于where
(8)数据库基本信息查询
查询数据库版本:
select version();
查询数据服务器的当前时间:
select now();
查询当前使用的是哪个数据库:
select database();
查询当前登录用户:
select user();
其他常规操作
set linesize 100; #设置行高100
set pagesize 100; #设置每页显示的数目100
三、应用篇——创建用户与授权
3.1创建用户预授权的相关指令
进入mysql数据库:
use mysql;
查询mysql库已建哪些用户:
select host,user from user;
创建用户:
insert into user (host,user,password)values('localhost','king',password('123456'));
刷新:
flush privileges
查看数据库的指定授权用户的权限:
show grants for 'king'@'%';
授予增删改查权限:
grant select,update,delete,drop on *.* to 'king'@'localhost' identified by '123456';
授予所有权限:
grant all privileges on *.* to 'king'@'localhost' identified by '123123'
取消所有权限:
revoke all on *.* from 'king'@'%' ;
删除用户:
delete from user where user='zhongguo'and host='localhost';
修改root用户的密码(勿乱改):
update user set password=password('123456') where user='root';
更改用户密码:
SET PASSWORD FOR 'username'@'host'=PASSWORD('newpassword');
修改当前用户密码:
SET PASSWORD=PASSWORD('newpassword');
切记:在创建用户,删除用户,授权,取消授权,修改密码等操作后都要刷新一下
3.2实例:创建一个’demo’远程用户授予该用户所有权限
Step1-显示MySQL内的所有数据库:
show databases;
Step2-进入mysql库:
use mysql;
Step3-查看mysql库中所有的表:
show tables;
Step4-查看user这个表中的host和user:
select host,user from user
Step5-向user中插入新用户:
insert into user(host,user,password)values('%','demo',password('1234'));
step6-刷新:
flush privileges;
step7-显示demo是否拥有权限:
show grants for 'demo'@'%';
至此你已基本掌握SQL相关语句
———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击网站首页每天更新
站 长 微 信: aiwo51889