<>快速上手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个字符长度替换为newstrinsert
(‘这是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语句验证表是否存在 设置数据表的存储引擎
creatatable 表名( )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)
referencesgrade (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 );