基本的MySQL语句语法(基本的都在了)

本文全面介绍了SQL语言的基础知识,包括数据操作语言(DML)和数据定义语言(DDL)的使用,详细讲解了如何创建、更新、删除和查询数据库中的数据,以及如何管理数据库结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL 中可以分为两个部分:数据操作语言 (DML)数据定义语言 (DDL)。
SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。

查询和更新指令构成了 SQL 的 DML(数据操作语言) 部分:

SELECT - 从数据库表中获取数据
UPDATE - 更新数据库表中的数据
DELETE - 从数据库表中删除数据
INSERT INTO - 向数据库表中插入数据

SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。

SQL 中 DDL(数据定义语言) 语句:

CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引

文章用到的有:增、删、改、查、视图、存储过程、储存函数

文章目录

一、定义:create、drop、alter

增加:
	1.创建数据库:create database 名称;
删除:
	1.drop database [if exists] 名称;
修改:
	1.alter database 名称 default character set gb2312

二、操作:select、insert、update、delete、drop

2.1、增加 (create):

类型:int整型、double浮点型、bool浮点型、date日期型、time时间型、char定长字符类型、varchar可变长字符

1)、创建表的示例:并且增加主键
> create table 名称(
> 字段1 int not null auto_increment, *******************一定不能忘了要有逗号
> 字段2 char(50) not null default,
> 字段3 char(50) null,
> primary key(字段1)
> );

auto_increment:每次插入新记录时,自动地创建主键字段的值
默认地,AUTO_INCREMENT 的开始值是 1,每条新记录递增 1。

要让 AUTO_INCREMENT 序列以其他的值起始,可使用下列 SQL 语法:
> ALTER TABLE 表名 AUTO_INCREMENT=100
2)、创建表的示例:并且增加外键

创建表2的时候增加外键并和表1关联
已存在表名1,主键是:字段1

create table 表名2(
		字段1 int not null, -- 主键
		字段2 char(50),
		字段3 int not null, -- 外键
		primary key (字段1), -- 设置本表的主键
		constraint 外键名 foreign key (本表字段3) references 表名1(主键字段1)  
		-- 解释:设置本表的外键和哪个表的主键进行关联
		
		-- foreign key 外键名 (本表字段3) references 表名1(主键字段1) --(另一种写法)
	)
	
-- 外键名要设置,要不然后期删除外键时较麻烦,如果忘了话,系统会有默认的名称

-- foreign key后面的字段3是自己表想要设置的外键字段

-- 表名1后面的字段1是另一张关联表的主键字段
3)、创建普通/唯一索引
> create index/unique 索引名 on 表名(cus_name(3),asc)---客户姓名列前3个字符创建索引
> create index/unique 索引名 on 表名(cus_id, cus_name)---字段组合索引
2.2、增加 (insert)
1).插入一行或多行数据
	 > insert into 表名 values(xx,xx,xx)/(xx,xx,xx),(xx,xx,xx)
				
2).使用insert…… set ……插入部分列值
	> insert into 表名 set 字段名="xx",字段名="xx";
			
3).使用insert……select语句子查询数据
	> insert into 表名 select ……
2.3、删除:
1. 删除表
   > drop table 表名
		
2.索引删除
   > drop index 索引名 on 表名
		
3.删除一行或多行
   > delete from 表名 where 字段名="xx";
  
4、删除外键
   > alter table 表名 drop foreign key 外键名 -- 如果没有设置外键名,就查看系统默认的外键名
2.4、修改:

使用alter table语句,增加或删减列、创建或取消索引、更改原有列的数据类型、重命名列或表、更改标的评注和表的引擎类型,为表重新创建触发器,存储过程、索引和外检。

1、向表中添加或删除列(字段):add [column]、drop [column]
> alter table 名称
> add column 新字段 char(50) not null default "shanghai" after 旧字段
   ----- 解释:不能为空、默认值是:shanghai,在旧字段之后添加
   
>drop column 新字段-------------删除的话只需要写字段名即可
2、将表中的某一列重命名:change [column] 旧字段名称 新字段名称
> alter table 名称
> add column 旧字段名称 新字段名称 char(100) not null default "shanghai" after 旧字段
	-------------不能为空、默认值是:shanghai,在旧字段之后添加
	
> change 旧字段 新字段 完整性约束条件(not null char(20)等)
	-------------重命名字段
3、修改或删除指定列的默认值:alter…alter…set/drop…
> alter table 表名
> alter column 字段1 set default "M";------------默认值改为M常量

> alter column 字段1 drop default; --------------删除字段的默认值
4、只修改指定列的数据类型,不干涉它的列名:alter…modify…
> alter table 表名
> modify column 字段1 char(50) first
    ---------该字段的字符长度为50,且为该表的第一列
5、增加主键或者索引
> alter table 表名 add primary key(id)/index/unique
6.增加主键或者索引
< alter table 表名 drop primary key/index/unique
7、增加外键
表2已存在时,给表2增加外键并和表1进行关联

> alter table 表名2 
> add constraint 外键名 foreign key (表名2的字段) references 表名1(主键字段)
或者
> alter table 表名2 
> add foreign key 外键名 (表名2的字段) references 表名1(主键字段)
8、为表重新赋名
> alter table 旧表名 rename to 新表名
> rename table 旧表名 to 新表名
9、使用update修改表中的数据
> update 表名 set 字段名="xx" where xingming(修改时的条件)="zhangsan"
10、修改数据库连接的密码
条件:需要先连接mysql进入后,然后才能修改  (mysql -u root -p)

> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'
2.5、查看:
1、显示库中所有的表名
> show tables
2、查看一列或多个列的信息,并且使用别名
> show columns, cus as name from 表名
3、查看表中的索引
> show idnex from 表名 
4.交叉(笛卡尔积)连接查看(多表查询)
> select * from 表名1,表名2
5.使用case语句查询结果集中的数据
-- 显示名字和性别

> select name, 
> case
> when sex="M" then "男"
> else "女"
> end as 性别
> from 表名;
6.内连接(inner join或者join)
> select * from 表1 inner join 表2 on 表1.NO = 表2.NO
7、外连接:左连接(left join)
> select * from 表1 left join 表2 on 表1.NO = 表2.NO

----以左表为基准表,如果左表没有的字段右表也不显示,左表有的右表没有显示为Null
8、外连接:右连接(right join)
> select * from 表1 right join 表2 on 表1.NO = 表2.NO

> -- 和左连接类似
查询时的条件判断语句语法:
1.判定范围:between……and…… 包含值
> select * from 表名 where 字段名 between 20 and 50
2.枚举范围:in
> select * from 表名 where 字段名 in (xx,xx,xx)
3.判定空值: is null
>select * from 表名 where 字段名 is null;
4.子查询-结合“in”使用: 查询分数大于80分的学生姓名(因为有2个表不能直接跟条件)
> select name from table_student where student_no in (select student_no from table_score where score>80);	
5.分组:group by
> select sex count(*) as "人数" form table group by sex
6.指定过滤条件:having 配合group by 使用
having:过滤分组、可包含聚合函数、分组后进行过滤
where: 过滤行、  不能含聚合函数、数据分组前过滤
需求:列出相同地址中满足客户人数大于3的所有姓名以及地址
> select name, adress from table group by name,adress having count(*)>3;
7.排序:order by
order by:排序产生的输出、任意列都可使用、不一定需要
group by:分组行,输出可能不是分组的排序、只可能使用列或表达式列、若与聚合函数使用,则必须使用
需求:按照姓名和地址降序输出姓名和性别
> select name,sex from table order by name, adress desc; 默认升序(asc)
8.限制返回的行数:limit
> select id,name from table order by id limit 1,3----从第二行开始,返回3行数据
三、视图(view)
1、创建(create view)

create view 视图名 as select * from user where id=1;

2、插入(insert)

insert into 视图名 values(xx,xx,xx,xx,xx); 向视图中插入数据

3、删除(drop/delete)

drop view 视图名; 删除视图
delete from 视图名 where id= 10;删除视图的数据

4、修改(alter/update)

alter view 视图名 as select * from user where id= 2;修改视图定义
update 视图名 set 字段名=xx where id=2; 修改视图数据

5、查看视图结构

show create view 视图名

6、查看视图数据

select * from 视图名;

四、存储过程(procedure)

declare cid int(10) 声明局部变量;全局变量需要加@

1、创建存储过程:给一个id即可修改性别
mysql> delimiter $$                           -- 用户定义结束符标志
mysql> create procedure procedure_cus(in cid int, in csex char(1)) -- cid、csex 参数
	 > begin                                  -- 开始
	 > update 表名 set 性别= csex where id= cid; -- SQL语句
	 > end $$                                 -- 结束
	 
调用:
	call 存储过程名(参数)
2、删除存储过程
> drop procedure 存储过程名
五、流量控制语句:
-条件判断:
	if……then……else:
		if 条件 then
			表达式1
		else
			表达式2
		end if;
	case
	
-循环语句:
	while语句
		while 条件
			表达式1
		end while
		
	repeat语句
	loop语句
六、存储函数(function)
1、创建存储函数

给定id,返回性别,如果没有,则返回"没有该客户

msyql> delimiter $$
mysql> create function func_cus(cid int) -- cid(参数)
	 > returns char(2)
	 > deterministic
	 > begin
	 > declare sex char(2); -- 声明局部变量
	 > select cus_sex into sex from 表名 where cus_id=cid;
	 > if sex is NULL then
	 > return (select "没有该客户")
	 > else if sex = "F" then
	 > return (select "女");
	 > else
	 > return (select "男")
	 > end if; 
	 > end if; -- 这两个if对应上面两个if、else if
	 > end $$

调用:

	select 存储函数名(参数)
2、删除存储函数:
> drop function 存储过程名
存储过程和存储函数的区别
存储过程:可以拥有输出参数、使用call调用、不能含有return(即没有返回值)
存储函数:不能有输出参数、使用selec调用、必须包含一条return(即有返回值)

**函数**:一般写函数时都是为了调用,所以不需要输出结果,需要的是返回值(return),可以方便调用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值