目录
1.修改表
1.创建数据库
create database 数据库名
2.查看数据库列表
show database
3.选择数据库
use 数据库名
4.删除是数据库
drop database 数据库名
5.查看表是否存在
use 数据库名 show tables;
6.查看表定义
describe 表名;
或
desc 表名
例:USE myschool;
DESCRIBE `student`;
7.删除表
DROP TABLE [IF EXISTS] 表名;
在删除表之前,先使用IF EXISTS语句验证表是否存在
USE myschool;
DROP TABLE IF EXISTS `student`;
8.设置表的存储引擎
CREATE TABLE 表名(
#省略代码
)ENGINE=存储引擎;
例:CREATE TABLE `myisam` (
id INT(4)
)ENGINE=MyISAM;
9.MySQL系统帮助
help 查询内容 例:HELP contents;
USE myscool;
create table test(
test1 int,
test2 int
);
修改表的名称
ALTER TABLE test RENAME test1
数据表添加列
ALTER TABLE test1 ADD test3 VARCHAR(200);
修改列信息
ALTER TABLE test1 CHANGE test3 test4 DOUBLE
删除列
ALTER TABLE test1 DROP test4;
2.添加主键
3.添加外键
给表添加主键
ALTER TABLE test1 ADD CONSTRAINT pk_test1 PRIMARY KEY test1(test1);
创建一张年级表
CREATE TABLE t_grage(
gradeID INT PRIMARY KEY,
grageName VARCHAR(200)
);
创建外键(创建在你的主表上的)外键表中的关系的列是外键表的主键 所以主外键关系
ALTER TABLE t_student ADD CONSTRAINT t_gradeID
FOREIGN KEY(gradeID)
REFERENCES t_grade(gradeID);
4.DML语句——插入单条数据记录and多条数据计入
DML语句——插入多条数据记录
DML语句——将查询结果插入新表
DML语句——将查询结果插入新表
插入单条记录(自动增长列,是不需要任何的赋值的操作,根据插入的数据的信息,直接赋值)
INSERT INTO t_student(lodinPWD,studentName,sex,gradeID,phone,address,bornDate,email,ipdentityCard)
VALUES('123','zs','男',1,'梅溪湖','1999-09-09','123456789@qq.com','430922222222002020')
INSERT INTO t_grade VALUES(1.'一年级')
同时插入多条的记录
INSERT INTO t_student(lodinPWD,studentName,sex,gradeID,phone,address,bornDate,email,ipdentityCard)
VALUES
('123','zs','男',1,'梅溪湖','1999-09-09','123456789@qq.com','430922222222002020')
('123','l4','男',1,'梅溪湖','1999-09-09','123456789@qq.com','430922222222002020')
('123','ww','男',1,'梅溪湖','1999-09-09','123456789@qq.com','430922222222002020')
('123','ml','男',1,'梅溪湖','1999-09-09','123456789@qq.com','430922222222002020')
('123','sq','男',1,'梅溪湖','1999-09-09','123456789@qq.com','430922222222002020')
('123','jb','男',1,'梅溪湖','1999-09-09','123456789@qq.com','430922222222002020')
('123','hj','男',1,'梅溪湖','1999-09-09','123456789@qq.com','430922222222002020')
('123','xs','男',1,'梅溪湖','1999-09-09','123456789@qq.com','430922222222002020')
赋值表数据
INSERT INTO test1
SELECT loginpwd,studentName FROM t_studunt
完整的做数据表的备份
CREATE TABLE test2(SELECT * FROM t_student)
更新 把所有人的年级 由1年级 改为5年级
INSERT INTO t_grade VALUES
(2,'二年级'),
(3,'3年级'),
(4,'4年级'),
(5,'5年级'),
(6',6年级'),
(7,'7年级'),
(8,'8年级'),
(9,'9年级');
UPDATE t_student SET grade=5
要求把zs由5改为9年级
UPDATE t_student SET gradeID=9 WHERE studentName='zs'
如果在修改的过程中,不带入任何的修改条件,那么修改则改为全部的数据
如果在修改的过程中,带入了修改的条件,则之修改满足的条件
删除数据
删除表数据
DELETE FROM test2;
删除指定数据
DELETE FROM t_student WHERE studentName='xs'
INSERT INTO t_student(lodinPWD,studentName,sex,gradeID,phone,address,bornDate,email,ipdentityCard)
VALUES('123','xx','男',1,'梅溪湖','1999-09-09','123456789@qq.com','430922222222002020')
重置表=收集恢复出厂设置
TRUNCATE TABLE t_student
删除数据可以多用,但是重置数据(不要使用)
删除数据是可以通过日志找回的,因为执行的是SQL语句
重置表不可找回数据,因为执行的是SQL命令
5.LIMIT子句
5.1MySQL查询语句中使用LIMIT子句限制结果集
limit 分页语句
第一个数字,跳过的行数,第二个数字返回的数据行
SELECT * FROM t_student LIMIT 1,2
5.2聚合函数
聚合函数 最大,最小,平均,总和 括号里面使用的列数据类型 必须是数字的 不能够是字符串的
最大
SELECT MAX(gradeID) FROM t_grade
最小
SELECT MIN(gradeID) FROM t_grade
平均
SELECT AVG(gradeID) FROM t_grade
总和
SELECT SUM(gradeID) FROM t_grade
总行数
SELECT COUNT(gradeID) FROM t_grade
5.3常用函数—字符串函数
连接字符串
SELECT CONCAT('M','Y','S','Q','L')
替换指定位置的字符串
SELECT INSERT('今天的天气很好',1,4,'abcdef')
截取字符串
SELECT SUBSTRING('今天的天气很好',2,4)
5.4常用函数—时间日期函数
日期
SELECT CURTDATE();
时间
SELECT CURTTIME();
时间和日期
SELECT NOW();
SELECT YEAR(DATEDIFF('2019-09-09','2021-09-09')
5.5常用函数–数学和函数
向下取整
SELECT CEIL(2.3)
向上取整
SELECT FLOOR(2.9)
四舍五入
SELECT ROUND(2.9)
随机数
一段SQL代码
1.定义变量进行数据值得接收
2.使用长度的函数判断当前位数是否是4位
3.如果不满足4位则重新产生
4.满足则使用ROUND直接返回4位数
SELECT RAND()*10000
6.子查询
INSERT INTO t_student (loginPwd,studentName,sex,gradeID,phone,address,bornDate,email,identityCard)
VALUES('123','李斯文','男',9,'12345678910','湖南省',
'2009-09-09','123@qq.com','43010120090909305X')
查看表信息
SELECT * FROM t_student
SELECT * FROM t_student
WHERE bornDate< '2009-09-09'
子查询的列就是你的条件列
SELECT * FROM t_student
WHERE bornDate <(SELECT bornDate FROM t_student
WHERE studentName='李斯文')
Insert插入语句中开始使用子查询的方式
INSERT INTO t_student (loginPwd,studentName,sex,gradeID,
phone,address,bornDate,email,identityCard)
VALUES('123','李佳文','男',
(SELECT gradeID FROM t_grade WHERE gradeName='9年级'),'12345678910','湖南省',
'2009-09-09','123@qq.com','43010120090909305X');
update 语句中使用子查询
使用到where条件中(行锁定) 编辑成功以后才能够对行的数据进行解锁
解锁以后才能够进行读取操作
UPDATE t_student SET gradeID=4
WHERE bornDate<'2009-09-09'
使用到列的值中
UPDATE t_student SET gradeID=(SELECT gradeID FROM t_grade WHERE gradeName='9年级')
WHERE bornDate<'2009-09-09'
6.1IN子查询
创建成绩表
DROP TABLE t_result;
PRIMARY KEY 实际上就位唯一列 也就是包含了唯一的约束
逻辑上的主外键关系 从t_student表来看 因为如果把t_student看成主表
那么关系无法进行搭建
主表里面先有数据,子表里面才能够有
先出成绩 在出人?先有人才有成绩
CREATE TABLE t_result(
resultId INT AUTO_INCREMENT PRIMARY KEY ,
studentNo INT NOT NULL,
subjectNo INT NOT NULL,
examDate DATETIME NOT NULL,
studentResult INT NOT NULL
);
INSERT INTO `t_result` (`studentNo`, `subjectNo`, `examDate`, `studentResult`) VALUES('1','1','2016-02-15 00:00:00','71');
INSERT INTO `t_result` (`studentNo`, `subjectNo`, `examDate`, `studentResult`) VALUES('1','1','2016-02-17 00:00:00','60');
INSERT INTO `t_result` (`studentNo`, `subjectNo`, `examDate`, `studentResult`) VALUES('2','1','2016-02-17 00:00:00','46');
INSERT INTO `t_result` (`studentNo`, `subjectNo`, `examDate`, `studentResult`) VALUES('2','1','2016-02-17 00:00:00','83');
INSERT INTO `t_result` (`studentNo`, `subjectNo`, `examDate`, `studentResult`) VALUES('3','1','2016-02-17 00:00:00','60');
INSERT INTO `t_result` (`studentNo`, `subjectNo`, `examDate`, `studentResult`) VALUES('4','1','2016-02-17 00:00:00','60');
INSERT INTO `t_result` (`studentNo`, `subjectNo`, `examDate`, `studentResult`) VALUES('5','1','2016-02-17 00:00:00','95');
INSERT INTO `t_result` (`studentNo`, `subjectNo`, `examDate`, `studentResult`) VALUES('6','1','2016-02-17 00:00:00','93');
INSERT INTO `t_result` (`studentNo`, `subjectNo`, `examDate`, `studentResult`) VALUES('7','1','2016-02-17 00:00:00','23');
CREATE TABLE t_subject(
subjectNo INT AUTO_INCREMENT PRIMARY KEY,
subjectName VARCHAR(50)
);
INSERT INTO t_subject(subjectName) VALUES('MYSQL')
表连接
SELECT t_student.`studentName`, t_result.`examDate`,t_result.`studentResult`,t_subject.`subjectName`
FROM t_student
INNER JOIN t_result ON t_student.`studentNo`=t_result.`studentNo`
INNER JOIN t_subject ON t_result.`subjectNo`=t_subject.`subjectNo`
查询参加过Mysql考试的学生
SELECT * FROM t_student
WHERE studentNo IN(
SELECT studentNo FROM t_result
WHERE subjectNo=
(SELECT subjectNo FROM t_subject WHERE subjectName='MYSQL'))
2
SELECT * FROM t_student
WHERE studentNo IN(
SELECT studentNo FROM t_result
INNER JOIN t_subject ON t_result.`subjectNo`=t_subject.`subjectNo`
WHERE t_subject.`subjectName`='MYSQL')
查询未参加过Mysql考试的学生
SELECT * FROM t_student
WHERE studentNo NOT IN(
SELECT studentNo FROM t_result
WHERE subjectNo=
(SELECT subjectNo FROM t_subject WHERE subjectName='MYSQL'))