Structure Query Language(结构化查询语言)简称SQL,它被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后被国际化标准组织(ISO)采纳为关系数据库语言的国际标准。数据库管理系统可以通过SQL管理数据库;定义和操作数据,维护数据的完整性和安全性。
1、DDL(Data Definition Language) 数据定义语言,用来操作数据库、表、列等; 常用语句:CREATE、 ALTER、DROP 2、DML(Data Manipulation Language) 数据操作语言,用来操作数据库中表里的数据;常用语句:INSERT、 UPDATE、 DELETE 3、DCL(Data Control Language) 数据控制语言,用来操作访问权限和安全级别; 常用语句:GRANT、DENY
使用MySQL数据库存储数据时,不同的数据类型决定了 MySQL存储数据方式的不同。为此,MySQL数据库提供了多种数据类型,其中包括整数类型、浮点数类型、定点 数类型、日期和时间类型、字符串类型、二进制…等等数据类型。
1、MySQL安装完成后,要想将数据存储到数据库的表中,首先要创建一个数据库。创 建数据库就是在数据库系统中划分一块空间存储数据,语法如下:
创建数据库后查看该数据库基本信息MySQL命令:
show create database db1;
drop database db1;
show databases;
alter database db1 character set gbk;
use db1;
select database();
数据库创建成功后可在该数据库中创建数据表(简称为表)存储数据。请注意:在操作数据表之前应使用“USE 数据库名;”指定操作是在哪个数据库中进行先关操作,否则会抛出“No database selected”错误。
create table 表名( 字段1 字段类型, 字段2 字段类型, … 字段n 字段类型 );
示例:创建学生表 MySQL命令:
create table student( id int, name varchar(20), gender varchar(10), birthday date );
示例:查看当前数据库中所有表 MySQL命令:
show tables;
示例:查表的基本信息 MySQL命令:
show create table student;
示例:查看表的字段信息 MySQL命令:
desc student;
有时,希望对表中的某些信息进行修改,例如:修改表名、修改字段名、修改字段 数据类型…等等。在MySQL中使用alter table修改数据表. 示例:修改表名 MySQL命令:
alter table student rename to stu;
示例:修改字段名 MySQL命令:
alter table stu change name sname varchar(10);
示例:修改字段数据类型 MySQL命令:
alter table stu modify sname int;
示例:增加字段 MySQL命令:
alter table stu add address varchar(50);
示例:删除字段 MySQL命令:
alter table stu drop address;
语法:
drop table 表名; 1
示例:删除数据表 MySQL命令:
drop table stu;
为防止错误的数据被插入到数据表,MySQL中定义了一些维护数据库完整性的规则;这些规则常称为表的约束。常见约束如下:
约束条件 | 说明 |
---|---|
PRIMARY KEY | 主键约束用于唯一标识对应的记录 |
FOREIGN KEY | 外键约束 |
NOT NULL | 非空约束 |
UNIQUE | 唯一性约束 |
DEFAULT | 默认值约束,用于设置字段的默认值 |
以上五种约束条件针对表中字段进行限制从而保证数据表中数据的正确性和唯一性。换句话说,表的约束实际上就是表中数据的限制条件。
主键约束即primary key用于唯一的标识表中的每一行。被标识为主键的数据在表中是唯一的且其值不能为空。这点类似于我们每个人都有一个身份证号,并且这个身份证号是唯一的。 主键约束基本语法:
字段名 数据类型 primary key;
设置主键约束(primary key)的第一种方式 示例:MySQL命令:
create table student( id int primary key, name varchar(20) );
设置主键约束(primary key)的第二·种方式 示例:MySQL命令:
create table student01( id int name varchar(20), primary key(id) );
2.非空约束
非空约束即 NOT NULL指的是字段的值不能为空,基本的语法格式如下所示:
字段名 数据类型 NOT NULL;
示例:MySQL命令:
create table student02( id int name varchar(20) not null );
默认值约束即DEFAULT用于给数据表中的字段指定默认值,即当在表中插入一条新记录时若未给该字段赋值,那么,数据库系统会自动为这个字段插人默认值;其基本的语法格式如下所示:
字段名 数据类型 DEFAULT 默认值;
唯一性约束即UNIQUE用于保证数据表中字段的唯一性,即表中字段的值不能重复出现,其基本的语法格式如下所示:
字段名 数据类型 UNIQUE;
6.外键约束
外键约束即FOREIGN KEY常用于多张表之间的约束。基本语法如下:
-- 在创建数据表时语法如下: CONSTRAINT 外键名 FOREIGN KEY (从表外键字段) REFERENCES 主表 (主键字段) -- 将创建数据表创号后语法如下: ALTER TABLE 从表名 ADD CONSTRAINT 外键名 FOREIGN KEY (从表外键字段) REFERENCES 主表 (主键字段);
大家知道:建立外键是为了保证数据的完整和统一性。但是,如果主表中的数据被删除或修改从表中对应的数据该怎么办呢?很明显,从表中对应的数据也应该被删除,否则数据库中会存在很多无意义的垃圾数据。
语法如下:
alter table 从表名 drop foreign key 外键名;
1、从表里的外键通常为主表的主键 2、从表里外键的数据类型必须与主表中主键的数据类型一致 3、主表发生变化时应注意主表与从表的数据一致性问题
在MySQL通过INSERT语句向数据表中插入数据。在此,我们先准备一张学生表,代码如下:
create table student( id int, name varchar(30), age int, gender varchar(30) );
每个字段与其值是严格一一对应的。也就是说:每个值、值的顺序、值的类型必须与对应的字段相匹配。但是,各字段也无须与其在表中定义的顺序一致,它们只要与 VALUES中值的顺序一致即可。 语法如下:
INSERT INTO 表名(字段名1,字段名2,...) VALUES (值 1,值 2,...);
语法如下:
INSERT INTO 表名(字段名1,字段名2,...) VALUES (值 1,值 2,...); 1
插入数据的方法基本和为表中所有字段插入数据,一样,只是需要插入的字段由你自己指定
语法如下:
INSERT INTO 表名 [(字段名1,字段名2,...)]VALUES (值 1,值 2,…),(值 1,值 2,…),...;
在该方式中:(字段名1,字段名2,…)是可选的,它用于指定插人的字段名;(值 1,值 2,…),(值 1,值 2,…)表示要插人的记录,该记录可有多条并且每条记录之间用逗号隔开。
在MySQL通过UPDATE语句更新数据表中的数据。在此,我们将就用六中的student学生表
1、UPDATE基本语法
UPDATE 表名 SET 字段名1=值1[,字段名2 =值2,…] [WHERE 条件表达式];
在该语法中:字段名1、字段名2…用于指定要更新的字段名称;值1、值 2…用于表示字段的新数据;WHERE 条件表达式 是可选的,它用于指定更新数据需要满足的条件
示例:将name为tom的记录的age设置为20并将其gender设置为female MySQL命令:
update student set age=20,gender='female' where name='tom';
示例:将所有记录的age设置为18 MySQL命令:
update student set age=18;
在MySQL通过DELETE语句删除数据表中的数据。在此,我们先准备一张数据表,代码如下:
在该语法中:表名用于指定要执行删除操作的表;[WHERE 条件表达式]为可选参数用于指定删除的条件。
DELETE FROM 表名 [WHERE 条件表达式];
delete from student where age=?;
示例:删除student表中的所有记录 MySQL命令:
delete from student;
4、4. TRUNCATE和DETELE的区别
TRUNCATE和DETELE都能实现删除表中的所有数据的功能,但两者也是有区别的: 1、DELETE语句后可跟WHERE子句,可通过指定WHERE子句中的条件表达式只删除满足条件的部分记录;但是,TRUNCATE语句只能用于删除表中的所有记录。 2、使用TRUNCATE语句删除表中的数据后,再次向表中添加记录时自动增加字段的默认初始值重新由1开始;使用DELETE语句删除表中所有记录后,再次向表中添加记录时自动增加字段的值为删除时该字段的最大值加1 3、DELETE语句是DML语句,TRUNCATE语句通常被认为是DDL语句
简单查询即不含where的select语句。在此,我们讲解简单查询中最常用的两种查询:查询所有字段和查询指定字段。
查询所有字段 MySQL命令:
select * from student;
查询指定字段(sid、sname) MySQL命令:
select sid,sname from student;
在SELECT中除了书写列名,还可以书写常数。可以用于标记 常数的查询日期标记 MySQL命令:
select sid,sname,'2021-03-02' from student;
在使用DISTINCT 时需要注意: 在SELECT查询语句中DISTINCT关键字只能用在第一个所查列名之前。 MySQL命令:
select distinct gender from student;
在SELECT查询语句中还可以使用加减乘除运算符。 查询学生10年后的年龄 MySQL命令:
select sname,age+10 from student;
1.聚合函数
在开发中,我们常常有类似的需求:统计某个字段的最大值、最小值、 平均值等等。为此,MySQL中提供了聚合函数来实现这些功能。所谓聚合,就是将多行汇总成一行;其实,所有的聚合函数均如此——输入多行,输出一行。聚合函数具有自动滤空的功能,若某一个值为NULL,那么会自动将其过滤使其不参与运算。 聚合函数使用规则: 只有SELECT子句和HAVING子句、ORDER BY子句中能够使用聚合函数。例如,在WHERE子句中使用聚合函数是错误的。 接下来,我们学习常用聚合函数。
统计表中数据的行数或者统计指定列其值不为NULL的数据个数 查询有多少该表中有多少人 MySQL命令:
select count(*) from student;
计算指定列的最大值,如果指定列是字符串类型则使用字符串排序运算
查询该学生表中年纪最大的学生 MySQL命令:
select max(age) from student;
计算指定列的最小值,如果指定列是字符串类型则使用字符串排序运算
查询该学生表中年纪最小的学生 MySQL命令:
select sname,min(age) from student;
计算指定列的数值和,如果指定列类型不是数值类型则计算结果为0 查询该学生表中年纪的总和 MySQL命令:
select sum(age) from student;
计算指定列的平均值,如果指定列类型不是数值类型则计算结果为
查询该学生表中年纪的平均数 MySQL命令:
select avg(age) from student;
数据库中存有大量数据,我们可根据需求获取指定的数据。此时,我们可在查询语句中通过WHERE子句指定查询条件对查询结果进行过滤。
在WHERE中可使用关系运算符进行条件查询,常用的关系运算符如下所示:
关系运算符 | 说明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
查询年龄等于或大于17的学生的信息 MySQL命令:
select * from student where age>=17;
IN关键字用于判断某个字段的值是否在指定集合中。如果字段的值恰好在指定的集合中,则将字段所在的记录将査询出来。
查询sid为S_1002和S_1003的学生信息 MySQL命令:
select * from student where sid in ('S_1002','S_1003');
BETWEEN AND用于判断某个字段的值是否在指定的范围之内。如果字段的值在指定范围内,则将所在的记录将查询出来 查询15到18岁的学生信息 MySQL命令:
select * from student where age between 15 and 18;
在MySQL中,使用 IS NULL关键字判断字段的值是否为空值。请注意:空值NULL不同于0,也不同于空字符串 由于student表没有空值就不演示查询空值的了 查询sname不为空值的学生信息 MySQL命令:
select * from student where sname is not null;
在MySQL中可使用AND关键字可以连接两个或者多个查询条件。 查询年纪大于15且性别为male的学生信息 MySQL命令:
select * from student where age>15 and gender='male';
在使用SELECT语句查询数据时可使用OR关键字连接多个査询条件。在使用OR关键字时,只要记录满足其中任意一个条件就会被查询出来 查询年纪大于15或者性别为male的学生信息 MySQL命令:
select * from student where age>15 or gender='male';
MySQL中可使用LIKE关键字可以判断两个字符串是否相匹配
7.1 普通字符串
查询sname中与wang匹配的学生信息 MySQL命令:
select * from student where sname like 'wang';
%用于匹配任意长度的字符串。例如,字符串“a%”匹配以字符a开始任意长度的字符串 查询学生姓名以li开始的记录 MySQL命令:
select * from student where sname like 'li%';
下划线通配符只匹配单个字符,如果要匹配多个字符,需要连续使用多个下划线通配符。例如,字符串“ab_”匹配以字符串“ab”开始长度为3的字符串,如abc、abp等等;字符串“a__d”匹配在字符“a”和“d”之间包含两个字符的字符串,如"abcd"、"atud"等等。 查询学生姓名以zx开头且长度为4的记录 MySQL命令:
select * from student where sname like 'zx__';
当执行查询数据时可能会返回很多条记录,而用户需要的数据可能只是其中的一条或者几条 查询学生表中年纪最小的3位同学 MySQL命令:
select * from student order by age asc limit 3;
GROUP BY 子句可像切蛋糕一样将表中的数据进行分组,再进行查询等操作。换言之,可通俗地理解为:通过GROUP BY将原来的表拆分成了几张小表。
统计各部门员工个数 MySQL命令:
select count(*), departmentnumber from employee group by departmentnumber;
统计部门编号大于1001的各部门员工个数 MySQL命令:
select count(*), departmentnumber from employee where departmentnumber>1001 group by departmentnumber;
9.2 GROUP BY和聚合函数以及HAVING一起使用
统计工资总和大于8000的部门 MySQL命令:
select sum(salary),departmentnumber from employee group by departmentnumber having sum(salary)>8000;
从表中査询出来的数据可能是无序的或者其排列顺序不是我们期望的。为此,我们可以使用ORDER BY对查询结果进行排序 其语法格式如下所示:
1SELECT 字段名1,字段名2,… 2FROM 表名 3ORDER BY 字段名1 [ASC 丨 DESC],字段名2 [ASC | DESC];
在该语法中:字段名1、字段名2是查询结果排序的依据;参数 ASC表示按照升序排序,DESC表示按照降序排序;默认情况下,按照ASC方式排序。通常情况下,ORDER BY子句位于整个SELECT语句的末尾。 查询所有学生并按照年纪大小升序排列 MySQL命令:
select * from student order by age asc;