Database---MySQL数据库基础

MySQL

Structure Query Language(结构化查询语言)简称SQL

1、DDL(Data Definition Language) 数据定义语言,用来操作数据库、表、列等; 常用语句:CREATE、 ALTER、DROP 2、DML(Data Manipulation Language) 数据操作语言,用来操作数据库中表里的数据;常用语句:INSERT、 UPDATE、 DELETE 3、DCL(Data Control Language) 数据控制语言,用来操作访问权限和安全级别; 常用语句:GRANT、DENY 4、DQL(Data Query Language) 数据查询语言,用来查询数据 常用语句:SELECT

三大范式

1、第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据线;也就是说:每列的值具有原子性,不可再分割。

2、第二范式(2NF)是在第一范式(1NF)的基础上建立起来得,满足第二范式(2NF)必须先满足第一范式(1NF)。如果表是单主键,那么主键以外的列必须完全依赖于主键;如果表是复合主键,那么主键以外的列必须完全依赖于主键,不能仅依赖主键的一部分。

3、第三范式(3NF)是在第二范式的基础上建立起来的,即满足第三范式必须要先满足第二范式。第三范式(3NF)要求:表中的非主键列必须和主键直接相关而不能间接相关;也就是说:非主键列之间不能相关依赖。

创建库

create database db001;

展示库

show create database db1;

删除库

drop database db1;

切换

use db1;

查看当前使用的数据库

select database();

在操作数据表之前应使用“USE 数据库名;”指定操作是在哪个数据库中进行先关操作,否则会抛出“No database selected”错误。

create table student( id int,name varchar(255), gender varchar (10), birthday date);

查看数据表

show tables;

查看表的基本信息

show create table student;

查看表的字段

desc student;

修改表名

alter table student rename to stu;

修改字段名

alter table stu change name sname varchar(10);

修改字段数据类型

alter table stu modify sanme int;

增加字段

alter table stu add address varchar(20);

删除字段

alter table stu drop address;

删除表

drop table stu;

数据表的约束

primary key 主键:约束用于唯一标识对应的记录

foreign key 外键:外键约束

not null 非空约束

unique 唯一性约束

default 默认值约束,用于设置字段默认值

主键约束

create table student( id int primary key,name varchar(20));

非空约束

create table student (id int ,name varchar not null);

默认值约束

create table student (id int, name varchar,gendet varchar(10) default 'male');

唯一性约束

create table student(id int,name varchar unique);

外键约束

建立主表

create table student(id int primary key,name varchar(20));

建立副表

create table class(classid int primary key,studentid int);

alter table class add constraint fk_class_studntid foreign key(studentid) references student05(id);

数据一致性

主表中的数据发生变化,从表对应数据也应有相应操作

删除外键

alter table class drop foreign key fk_class_studentid;

外键约束注意

从表的外键常为主表主键

为表中字段插入数据

insert into student (id,name,age,gender) values(1,'a',18,'male')

更新表中部分数据

update student set age=19,gendet='female' where name='giegie';

更新表中全部数据

update studnet set age=20;

删除部分数据

delete from student where age=17;

删除全部数据

delete from student;

查询所有字段

select * from student;

查询指定字段

select age from student;

关系运算符查询

select * from student where age<=17;

BETWEEN ADD 关键字查询

select * from student age between 19 and 20;

ADD关键字查询

select *from student where age < 18 and gender ='female';

OR关键字查询

select *from student where age>18 or gender = 'male';

LIKE关键字

select * from student where name like 'a';

含%通配的字符串

%用于匹配任意长度的字符串

select * from student where name like 'a%';

select * from student where name like '%d';

select * from student where name like '%a%';

含有_通配符的字符串

一个_代表一个字符

select * from student where name like ' aaa__';

使用limit限制查询结果的数量

查询学生表中年纪最小的3位同学

select * from student order by age asc limit 3;

使用GROUP BY进行分组查询

表与关联的关系

一对一

一对多

多对一

关联查询

查询Java班所有学生的MySQL命令

select * from student where classid = (select cid from class where = 'Java');

关联关系删除数据

例如:从班级表中删除Java班

先删除学生表中相关联的学生,否则学生表中的cid就失去了关联

delete from student where classid = (select cid from calss where cname='Java');

delete from class where cname ='Java';

交叉连接查询(实际运用中无意义)

返回的记过是被链接的两个表中所有数据行的笛卡尔积,也称笛卡尔链接

SELECT * FROM 表1 CROSS JOIN 表2;

内连接查询

又称简单链接或自然链接,对两个表中的数据进行比较,列出条件匹配的数据行

select employee.ename,department.dname from department inner join employee

on department.did+empluyee.departmentid;

SELECT 查询字段1,查询字段2, ... FROM 表1 [INNER] JOIN 表2 ON 表1.关系字段=表2.关系字段

外连接查询

需要返回符合条件的以及左表或右表或两个表中的所有数据

SELECT 查询字段1,查询字段2, ... FROM 表1 LEFT | RIGHT [OUTER] JOIN 表2 ON 表1.关系字段=表2.关系字段 WHERE 条件

select class.cid,class.cname,student.sname from class left outer jion student on class.cid=

student.classid;

select class.cid,class.name,student.sname from class right outer join student on class.cid=

studnet.cid

子查询

一个查询语句嵌套在另一个查询语句内部

首先执行子查询中的语句,再将返回的结果作为外层查询的过滤条件

查询Лукич所在班级的信息

select * from class where cid=(select classid from student where sname='Лукич');

查询比Лукич所在班级编号还大的班级的信息

select * from class where cid>(select classid from student where sname='Лукич');

关键字EXISTS子查询

关键字后的参数可以是任意一个子查询,不返回任何数据只返回TRUE或FALSE,返回为TRUE时,外层查询执行

select * from class where exists (select * from student where sname ='Лукич');

关键字ANY子查询

表示满足其中任意一个条件就返回一个结果作为外层查询条件

select * from class where cid > any (select classid from student);

关键字ALL子查询

满足所有内层查询条件返回结果

select * from class where cid> all( select classid from student);


__EOF__

本文作者3DG
本文链接https://www.cnblogs.com/3-DG/p/17745350.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   3DG  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示