数据库 DB:database
数据库的目的:能够存储(写)和提供(读)数据。
语法特点:
1.不分英文大小写
2.关键字介意用大写
数据库文件地址:E:\Program Files\MySQL\MySQL Server 5.5\data
win+r:services.msc 启动或停止服务
DDL:数据定义语言
ssuccess:运行成功
errors:运行错误
warnings:运行警告
关键字:删除drop、 修改alter、显示show/desc、改字段名change、改字段约束modify、表table、数据库database、重命名rename、字符集character set。
SHOW DATABASES; -- 查看当前用户下所有数据库
SHOW CREATE DATABASE 数据库; -- 查看当前数据库的创建过程
desc 表名;
CREATE DATABASE 数据库; -- 创建数据库-create database
CREATE DATABASE IF NOT EXISTS 数据库; -- 如果不存在则创建数据库
CREATE DATABASE 数据库 CHARACTER SET utf8; -- 创建数据库并指定字符集
ALTER DATABASE 数据库 CHARACTER SET gbk; -- 更新数据库:不允许修改数据库名
DROP DATABASE 数据库; -- 直接删除数据库
DROP DATABASE IF EXISTS 数据库; -- 如果数据库存在则删除
DESC Infor; -- 查看表的结构
tinyint:1字节 (-128, 127) (O,255) 小整数值
int或integer:4字节(-2 147 483648, 2 147 483 647) (0,4294 967 295) 大整数值
bigint:8字节(-9233372036854775808,9223372036854775807) 0,18446744073709551615 极大整数值
float(m,d):4字节 -3.402823466E +38到-1.175494351E-38、0和1.175494351E-38到3.402823466E+38m是数字总位数,d是小数点后面的位数,如果m和d被省略,根据硬件允许的限制来保存值 单精度浮点数值
double:8字节 -1.7976931348623157E +308到-222507385854072014E- -308.0和12.22507385854072014E- -308到1.7976931348623157E+308 双精度浮点数值
date 4字符 日期
time 3字节 时间
year 1字节 年份
1.进入对应的数据库:use 数据库名
2.创建表和字段
create table 表名(
字段1名 数据类型,
字段2名 数据类型,
...
);
常用的数据类型:
整数:tinyint(小整型)int(整型)bigint(大整型)
小数:double(双精度)float(m“种类多少个”,n“小数点后多少位”)(单精度)
字符串:varchar(n)
日期时间:date(年月日)/datetime(年月日时分秒)timestamp(时间戳)
枚举:enum('枚举值','xxx')
DESC xsxx; -- 描述表
-- 改表名:rename
RENAME TABLE 旧表名 TO 新表名; -- 修改表名
-- 改字段名: alter
#alter table 表名 change 原字段名 新字段名 约束;
ALTER TABLE 表名 CHANGE 旧字段 新字段 VARCHAR(9);
#alter table 表名 modify 字段名 数据类型;--改字段的约束
CREATE TABLE 新表 LIKE 旧表;-- 在studb下创建表TeacherInfor,字段和Infor表中一致
ALTER TABLE 表名 ADD 字段 数据类型; -- 在Infor表中添加(add)字段性别
ALTER TABLE 表名 DROP 字段; -- 删除字段0
CREATE DATABASE IF NOT EXISTS 数据库; -- 如果不存在则创建数据库
DROP DATABASE IF EXISTS 数据库; -- 如果存在则删除
字段约束:在增、删、改数据时必须满足这些条件
1.数据类型 2.默认default “xxx”(默认值且满足数据类型的约束) 3.无符号unsigned(不允许有负号) 4.零填充zerofill(用0来填充未有的值)
5.注释comment “xxx” 6.更新no update 7.非空not null 8.主键primary key(唯一的字段或一组字段构成-约束组,自带非空和唯一)
9.自增auto_increment(自增必须给主键添加,删主键先删自增) 10.唯一性unique(不能重复) 11.外键foreign key
添加主键:primary key(字段名,字段名...) -- 在表中的写入方式
alter table 表名 add 字段名 int primary key;
alter table 表名 add primary key(字段名,字段名...)
删除主键:alter table 表名 drop primary key;
ALTER TABLE 表 MODIFY 字段 INT UNSIGNED auto_increment; -- 自增:默认或非空时触发自增+1的操作,跟主键一起用
ALTER TABLE 表 DROP INDEX 约束名; -- 修改唯一性约束
DML:数据操作语言
DESC 表名;
INSERT INTO 表名 VALUES
(1,'张三','女',25,2,'557318955350',1992),
(2,'李四','男',33,1,'557352959005x',1525);
-- 批量全字段插入数据
INSERT INTO 表名(字段,字段,字段) VALUES
(3,'老八',1598),
(4,'老六',1885);
-- 批量部分字段插入数据
CREATE TABLE 新表名 LIKE 旧表名; -- 创建新表和ygb表一样
INSERT INTO 新表名 SELECT * FROM 旧表名; -- 复制原表中的数据
INSERT INTO 新表名(字段1,字段2) SELECT 字段1,字段2 FROM 旧表名; -- 部分字段复制
INSERT INTO 表名 VALUES (数据) ON DUPLICATE KEY UPDATE 表名=6; -- 更新部分字段
CREATE TABLE 新表名 LIKE 表名; -- 创建新表和ygb表一样
INSERT INTO 新表名 SELECT * FROM 表名; -- 复制原表中的数据
INSERT INTO 新表名(字段1,字段2) SELECT字段1,字段2 FROM 表名; -- 部分字段复制
INSERT IGNORE INTO 表名 VALUES (数据); -- 忽略主键冲突且数据未插入
INSERT INTO 表名 VALUES (数据) ON DUPLICATE KEY UPDATE 表名=6; -- 更新部分字段
UPDATE 表名 SET 字段='已还'; -- 更新数据
UPDATE 表名 SET 字段='借阅' WHERE 字段=某段数据; -- 条件更新
UPDATE 表名 SET 字段=某段数据,字段=某段数据 WHERE 字段=某段数据; -- 同时更新多处数据
UPDATE 表名 SET 字段='借阅' WHERE 字段=某段数据 OR 字段=某段数据; -- 同时满足‘and’,满足其中一个‘or’链接
DELETE FROM 表名 WHERE 字段=某段数据; -- 删除对应的整条数据
TRUNCATE 表名; -- 清空数据
DQL:数据查询语言
SELECT 字段 '备注名',字段 '备注名' FROM 表名 WHERE 字段 LIKE '部分数据+%';
-- 模糊查询 like'字符串'为全字段查询,like'字段_'只匹配后一个字段,不匹配abcd.like'字段%'匹配后续字段
SELECT COUNT(*) '总数',字段 '备注名' FROM 表名 GROUP BY 字段;
-- 分类查询:总数count(),最大值max(),最小值min(),平均数avg(),求和sum().列举值:group_concat()
SELECT SUM(字段) '备注名',字段 '备注名' FROM 表名 GROUP BY 字段;
SELECT * FROM 表名 WHERE 字段>=60 AND 字段<=80; -- 查看成绩在60到80分的同学
SELECT 字段 '备注名',字段 '备注名' FROM 表名 WHERE 字段 LIKE '张%'; -- 查看姓张的同学的班级,姓名和学号;
SELECT COUNT(字段) '备注名',字段 '备注名' FROM 表名 GROUP BY 字段; -- 统计表中的班级数量
SELECT COUNT(字段) '备注名',字段 '备注名' FROM 表名 GROUP BY 字段;-- 统计各班级男女生的数量
SELECT MAX(字段) '备注名',字段 '备注名' FROM 表名 WHERE(SELECT MAX (表名) FROM 表名)=cj;-- 统计学生中的最高分,并显示其班级,姓名和学号
SELECT AVG(字段) '备注名',字段 '备注名' FROM 表名 GROUP BY 字段;-- 统计各班级的平均分
SELECT COUNT(字段) '备注名',字段 '备注名' FROM 表名 WHERE 字段<60 GROUP BY 字段,字段;-- 统计各班分数不及格的男女生数量
SELECT zl FROM 表名; -- 查找所有种类
SELECT DISTINCT zl FROM 表名; -- 去除重复
SELECT DISTINCT 字段 '备注名' FROM 表名; -- 别名
SELECT DISTINCT 字段 '备注名',jg '价格(元)' FROM 表名; -- 查找两种字段
SELECT DISTINCT jg '价格(元)' FROM 表名 WHERE jg>5; -- 算数运算符查询>,<,=,>=,<=,!=
SELECT DISTINCT 字段 '备注名',jg '价格(元)',mc '商品名称' FROM 表名 WHERE zl='食品' OR zl='文具'; -- 查找字段里的两种类型
-- 显示生活用品种价格小于20的商品及保质期
SELECT * FROM 表名 WHERE rq IS NOT NULL; -- 查找所有日期为null
SELECT * FROM 表名 WHERE jg IN(1,3,5,7,9); -- 查找所有价格为n的商品
SELECT * FROM 表名 WHERE jg>5 AND jg<20; -- 查找所有范围内的商品
DELETE FROM 表名 WHERE rq='2022-09-02';-- 删除其中一天数据
第一范式:1nf,数据字段设计时必须满足原子性
1nf要求字段数据是不需要拆分就可以直接应用
如果数据使用的时候需要进行拆分那么就违背1nf
第二范式:2nf不能存在部分依赖
将部分依赖关系独立成表
第三范式:3nf不能存在传递依赖
让依赖非主属性的字段与依赖字段独立成表
ALTER TABLE 表名 DROP FOREIGN KEY 外键名; -- 删除外键
ALTER TABLE 表1 ADD FOREIGN KEY (从表的外键) REFERENCES dept(主表的主键);
ALTER TABLE stuinfor ADD CONSTRAINT 外键名 FOREIGN KEY (字段名)
REFERENCES 小表名(对应字段) ON UPDATE CASCADE ON DELETE SET NULL; -- 级联更新后删除置空
INSERT INTO qsb VALUES (111,'博贤楼',1,'杨阿姨','小明') ON DUPLICATE KEY UPDATE qsz='小月'; -- 更新其中一个寝室的信息
UPDATE qsb SET qsz='小日' WHERE qsh=111; -- 更新其中一个寝室的信息
-- 分组后排序:group by 字段名 desc(降序)/asc(升序)
-- 数据筛选/条件:having order by 字段名/别名 desc/asc
-- 分页查询:limit 数值/limit 起始值,数值
SELECT COUNT(xh) 'qsrs',bjm '班级名' FROM bjb,xsb,zsxsb
WHERE zsxsb.`bjbh`=bjb.`bjh`
AND zsxsb.`xsbh`=xsb.`xh`
AND xsb.`zs`='住校'
GROUP BY bjbh
ORDER BY qsrs ASC;-- 分组查询各班住校人数,并按班级编号降序显示(ORDER BY 进入内存后的数据才能使用别名且在 GROUP BY 之后)