zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

六千字带你快速上手操作MySQL

mysql 快速 操作
2023-06-13 09:13:09 时间

快速上手MySQL

mysql基础语法

### 字段操作

字段操作

概念

语法

新增字段

对已经存在的表,插入新的字段

alter table 【表名】 add 字段名 数据类型 属性

修改字段

在我们需要改进某个字段时

alter table 【表名】change 原版字段名,新版字段名 属性

删除字段

删除无用字段

alter table 【表名】 drop 字段名

主外键设置

我们使用主外键的方式来保证我们的数据完整性

​ 概念及语法见如下表格

概念

语法

添加主键

保证数据完整性

ALTER TABLE 表名 ADD CONSTRAINT 主键名PRIMARY KEY 表名(字段名);

添加外键

保证数据完整性

ALTER TABLE 表名ADD CONSTRAINT 设置外键名称 FOREIGN KEY(关联字段名) REFERENCES 关联表名字(字段名);

​ 注意事项:mysql的引擎支持问题,innoDB储存类型支持外键,MYISAMD的储存类型不支持外键

​ 复合主键创建方式:

alter	table  result aDD constraint PK_RESULT primary key (studentNo,subjectNo,examDate);

DMl语句操作数据

插入数据记录

概念

语法

插入单行数据

插入一条需要存储在数据库的数据记录

INSERT INTO 表名 (字段1,字段2)value(插入数据)

插入多行数据

插入多行需要存储在数据库的数据记录

INSERT INTO 表名 (字段1,字段2)value(插入数据1),(插入数据2)

将查询结果插入新表第一种

将查询结果备份到新创建的数据库

INSERT INTO 新表名 (字段1,字段2) select 字段1,字段2,… from 数据源表

将查询结果插入新表第二种

将查询结果备份到新创建的数据库

select 字段1,字段2 into 新表 from 原表

修改数据记录

概念

语法

修改数据记录

当我们要对某一条数据修改或者更新时我们要用到

UPDATE 表名 SET 字段1= '修改内容 WHERE 条件

删除表

概念

语法

删除数据方法一

删除与条件相符的数据

Delete from 表名 where 判断条件

删除数据方法二

删除整个表的所有记录

truncate table 表名

DQL查询

概念

语法

查询语句方法

在数据库中查询符合条件的数据

SELECT 字段列表 FROM 查询表名 WHERE 条件 GROUP BY 分组字段 HAVING 条件 ORDER BY 排序字段名 ASC

LIMIT子句

LINIT子句的使用

概念

语法

limit子句

设置查询显示的数据条数

SELECT * FROM grade LIMIT 位置偏移量;

常用函数集合

聚合函数

函数名

作用

avg()

返回某一字段的平均值

count()

返回某个字段的函数

max()

返回某字段的最大值

min()

返回某字段的最小值

sum()

返回某字段的总和

常勇字符串函数

函数名

作用

举例

concat(STR1,STR2)

连接字符串str1,str2为一个完整的字符串

select concat(‘my’,‘s’,‘ql’)返回:mysql

insert (str,pos,len,newstr)

将str从怕pos的位置开始len个字符长度替换为newstr

insert (‘这是sql数据库’,‘3’,‘10’,‘mysql’);返回:这是mysql数据库

lower(STR)

将str所有字符改为小写

SQL LOWER(SQL)返回:sql

upper(str)

将str所有的字符串改为大写

sql upper(sql)返回:SQL

SUBSTRING(STR,NUM,LEN)

返回字符串str的第num个位置开始长度为len的子字符串

substring(‘javaMysqlOracle’,5,5)返回结果:Mysql

时间日期函数

作用

举例

curdate()

获取当前日期

curdate()返回:2021-3-5

curtime()

获取当前时间

curtime()返回:15-39-45

now()

获取当前的日期与时间

返回:2021-3-5-15-39-45

week(date)

返回日期date为一年中的第几周

SELECT WEEK(NOW());返回9

year(date)

返回日期date的年份

SELECT YEAR(NOW());返回时间为2021

HOUR(TIME)

返回time的小时值

SELECT HOUR(CURTIME());返回为 15

minute(time)

返回time的分钟值

SELECT MINUTE(CURTIME()); 返回值为44

datediff(date1,date2)

返回d1和d2之间的相隔天数

SELECT DATEDIFF(NOW(),‘2008-8-8’);返回值:4592

adddate(date,n)

计算日期参数date加上n天之后的时间

SELECT ADDDATE(NOW(),5);返回值:20213-10-15-48-05

数学函数

函数名字

作用

举例

ceil(x)

返回大于或等于数值x的最小整数

SELECT CEIL(5);返回:5

floor(x)

返回小于或者等于数值x的最大整数

SELECT FLOOR(5);返回:5

rand()

返回0~1的随机数

SELECT RAND();返回0.86

in和not in 子查询

IN 子查询

​ 问题: 在mysql中档当子查询跟随在=,!=,<,<=,>,>=之后,它不允许子查询返回多条记录,如果有多条满足条件的记录返回,会出现执行代码错误。

​ 解决方法 :

把等号替换成 in关键字

in子查询的语法:

	 select 字段 from 表名
	 where 条件1 in(select 字段 from 表名 where 条件)————————>	 //在小括号中,再来一次查询,作为一个条件,来与条件1判断

NOT IN 子查询

问题:如果我们想要获得与in子查询相反的结果,

解决方案:不需要去进行过多的代码操作,只需要在代码中的 in 前加一个not 就可以获取到查询相反的结。

语法没有太大的变化

语法总结

启动与关闭

net stop MySQL; net stop MySQL; mysql -u root -p

创建数据库

create database 数据库名;

查看数据库列表,可查看已存在的数据库
show databases;

选择数据库

use 数据库名;

删除数据库
drop database 数据库名;
创建表
create table 表名(
字段1 数据类型 [字段属性|约束] [索引] [注释],
字段1 数据类型 [字段属性|约束] [索引] [注释]
);

查看表
show tables;

查看表定义
describe 表名;      desc 表名;

删除表
drop table [if exists] 表名;

在删除表之前,先使用IF EXISTS语句验证表是否存在
设置数据表的存储引擎
creata table 表名(

)engine=存储引擎;

修改表名
alter table<旧表名> rename [to] <新表明>;
alter table `demo01` rename `demo02`;

添加字段
alter table 表名 add 字段名 数据类型 [属性];
alter table demo02 add `password` varchar(20) not null;

修改字段
alter table 表名 change 原字段名 新字段名 数据类型 [属性];
alter table demo02 change `name` `username` char(10) not null;

删除字段
alter table 表名 drop 字段名;
alter table demo02 drop `password`;

约束

添加主键约束 alter table 表名 add constraint 主键名 primary key 表名 (字段名); alter table student add constraint pk_studen primary key grade (gradeId);

添加外键约束 alter table 表名 add constraint 外键名 foreign key (外键字段) references 关联表名 (关联字段) alter table student add constraint fk_student_grade foreign key(gradeId) references grade (gradeId);

插入单行数据 insert into 表名 [(字段名列表)] values (值列表); insert into syudent(loginPwd,studentName,gradeId,phone,bornDate) values(‘123’,‘黄小平’,1,‘13956799999’,‘1996-5-8’);

插入多行数据 insert into 新表 (字段名列表) values(值列表1),(值列表2),……,(值列表n); insert into subject (subjectName,classHour,gradeID) values(‘Logic Java’,220,1),(‘HTML’,160,1),(‘Java OOP’,230,2);

将查询结果插入的新表 insert into 新表 (字段1,字段2,字段3) select 字段1,字段2…… from 原表;

句式1需要先按照所插入字段的类型,顺序,个数创建新表,才能插入数据 create table 新表 ( select 字段1,字段2 from 原表 );

句式2: 岁插入语句的执行而创建新表,无须先创建表; 更新数据记录 update 表名 set 字段1=值1,字段2=值2,…,字段n=值n [where 条件];

删除数据记录 delate from 表名 [where条件];

删除表中所有记录 truncate table 表名;

DQL语句 select <字段名列表> from <表名或视图> [where <查询条件>] [group by <分组的字段名>] [having<条件>] [order by <排序的字段名>[asc或deac]] limit字句 select <字段名列表> from <表名或视图> [where <查询条件>] [group by <分组的字段名>] [order by <排序的列名>[asc或deac]] [limit [位置偏移量,]行数]

简单子查询

SELECT … FROM 表1 WHERE 字段1 比较运算符(子查询)

select `studentNo`,`studentName`,`sex`,`bormDate`,`address`
from `student`
where `bornDate`>
(select `bornDate`from`student`where`studentName`=`李斯文`);

select 'studentName` from `student` where `studentNo` = (
swelect `studentNo` from `result`
inner join `Subject` on result.subjectNo= subject.subjectNo
where `studentResult` =60 AND `subjectName` ='Logic Java'
);

SELECT `studentName` FROM `student` 
WHERE `studentNo` IN(
    SELECT `studentNo` FROM `result` 
    WHERE `subjectNo` =  (
        SELECT `subjectNo` FROM `subject`
        WHERE `subjectName`='Logic Java'
    )AND `studentResult` = 60  
);