数据库DataBase(DB)

张开发
2026/6/26 19:48:19 15 分钟阅读
数据库DataBase(DB)
数据库DataBase(DB)特点持久化存储数据方便存储和管理使用了统一的方式-SQLsql结构化查询语言数据库是文件夹表是文件表中的数据就是数据通用语法SQL分类操作数据库:crudC:创建R:查询U修改D删除查询所有数据库的名称:show databases;创建数据库判断不存在再创建create database if not exists 数据库名称;修改删除和使用改数据库的字符集alter database 数据库名称 character set 字符集名称;删除数据库drop database if exists 数据库名称;查询当前正在使用的数据库名称select database();使用数据库use 数据库名称;数据库表的CRUD操作创建最后一列不用加“”create table 表名( 列名1 数据类型1, 列名2 数据类型2, .... 列名n 数据类型n );create table student( id int, name varchar(32), age int , score double(4,1), birthday date, insert_time timestamp );数据类型intdoublescore double(5,2),数字有5位保留到小数点后两位date只包含年月日yyyy-mm-dddatetime包含年月日时分秒timestamp默认用添加时的系统时间varchar字符串类型name varchar(20),最大20个字符复制表create table 表名 like 被复制的表名;删除表drop table if exists 表名 ;表修改修改表名修改表的字符集添加一列修改列名称 类型删除列修改表名alter table 表名 rename to 新的表名;修改表的字符集alter table 表名 character set 字符集名称;添加一列alter table 表名 add 列名 数据类型;修改列名称 类型alter table 表名 change 列名 新列别 新数据类型;删除列alter table 表名 drop 列名;增删改表中的数据添加数据删除数据修改数据添加数据insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n); INSERT INTO stu VALUES(2,aaa,12,33.2,null,null)删除数据delete from 表名 [where 条件] delete from 表名 where id1;删除表格中的所有数据TRUNCATE TABLE 表名;修改数据update 表名 set 列名1 值1, 列名2 值2,... [where 条件]; UPDATE stu SET age117,score100 WHERE id3;查询表中的数据select * from 表名;语法select 字段列表from 表名列表where 条件列表group by 分组字段having 分组之后的条件order by 排序limit 分页限定基础查询多个字段的查询select 字段名1字段名2... from 表名查询时去除重复select distinct adress student;计算列select Name,math,english,mathifnull(english,0) From Student;起别名用空格隔开数学英语总分就成了查询别名select Name,math 数学,english 英语,mathifnull(english,0) 总分 From Student;条件查询运算符查询年龄大于20岁SELECT * FROM student WHERE age 20;查询年龄等于20岁SELECT * FROM student WHERE age 20;查询年龄等于20岁SELECT * FROM student WHERE age 20;查询年龄不等于20岁SELECT * FROM student WHERE age ! 20; SELECT * FROM student WHERE age 20;查询年龄大于等于20 小于等于30SELECT * FROM student WHERE age 20 age 30; SELECT * FROM student WHERE age 20 AND age 30; SELECT * FROM student WHERE age BETWEEN 20 AND 30;查询年龄22岁18岁25岁的信息SELECT * FROM student WHERE age 22 OR age 18 OR age 25 SELECT * FROM student WHERE age IN (22,18,25);查询英语成绩为nullSELECT * FROM student WHERE english NULL; SELECT * FROM student WHERE english IS NULL;查询英语成绩不为nullSELECT * FROM student WHERE english IS NOT NULL;模糊查询查询姓马的有哪些 likeSELECT * FROM student WHERE NAME LIKE 马%;查询姓名第二个字是化的人SELECT * FROM student WHERE NAME LIKE _化%;查询姓名是3个字的人SELECT * FROM student WHERE NAME LIKE ___;查询姓名中包含德的人SELECT * FROM student WHERE NAME LIKE %德%;复杂查询排序查询排序方式ASC升序默认的DESC降序一样的时候才去执行排序方式2order by 排序字段1 排序方式1 排序字段2 排序方式2...聚合函数将一列数据作为一个整体进行纵向的计算。count计算个数select count(ifnull(name,0)) FROM student;max计算最大值select max(math) FROM student;min计算最小值sum计算和select sum(math) FROM student;avg计算平均值select avg(math) FROM student;分组查询分别查询男、女同学的平均分select sexAVG(math),count(id) from student group by sex分数低于70分不参与排序select sexAVG(math),count(id) from student where70 group by sex分数低于70分不参与排序,分完组后一组人数要大于2个人,where在分组前限定having在分组后限定where后不能跟聚合函数having后可跟聚合函数select sexAVG(math),count(id) from student where70 group by sex Having COUNT(id)2分页查询limit 开始的索引,每页查询的条数;两个数字分别表示展示索引为1的数据每页显示3条记录select*from student limit 0,3;约束对表中的数据进行限定保证数据的正确性、有效性和完整性。主键约束primary key非空约束not null唯一约束unique外键约束foreign key非空约束创建表时添加约束CREATE TABLE stu( id INT, NAME VARCHAR(20) NOT NULL -- name为非空删除约束ALTER TABLE stu MODIFY NAME VARCHAR(20);添加表后添加约束ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;唯一约束CREATE TABLE stu( id INT, phone_number VARCHAR(20) UNIQUE -- 添加了唯一约束 );删除唯一约束ALTER TABLE stu DROP INDEX phone_number;在创建表后添加唯一约束ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;主键约束非空且唯一一张表只能有一个字段为主键create table stu( id int primary key,-- 给id添加主键约束 name varchar(20) );删除主键ALTER TABLE stu DROP PRIMARY KEY;建完表后添加主键ALTER TABLE stu MODIFY id INT PRIMARY KEY;自动增长id在创建表时添加主键约束并且完成主键自增长create table stu( id int primary key auto_increment,-- 给id添加主键约束外键约束在创建表时可以添加外键create table 表名( .... 外键列 constraint 外键名称(起什么名称都可以) foreign key (外键列名称) references 主表名称(主表列名称) ); - 先创建部门表 - 防止把外键删掉员工表create table employee( id int primary key auto_increment, name varchar(20), age int, dep_id int, -- 外键对应主表的主键 -- 创建外键约束 constraint emp_depid_fk foreign key (dep_id) references department(id) )部门表create table department( id int primary key auto_increment, dep_name varchar(20), dep_location varchar(20) );删除外键ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;创建表之后添加外键ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);添加级联操作FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE ;多表操作数据库的设计多表之间的关系一对一人和身份证一对多的关系一个部门有多个员工多对多的关系学生和课程利用中间表1个人可以选不同的课sid是1cid可以是1sid是2cid可以是2案例旅游线路分类旅游线路用户创建旅游线路分类表 tab/_categoryCREATE TABLE tab_category ( cid INT PRIMARY KEY AUTO_INCREMENT, cname VARCHAR(100) NOT NULL UNIQUE );创建旅游线路表 tab/_routeCREATE TABLE tab_route( rid INT PRIMARY KEY AUTO_INCREMENT, rname VARCHAR(100) NOT NULL UNIQUE, price DOUBLE, rdate DATE, cid INT, FOREIGN KEY (cid) REFERENCES tab_category(cid) );用户表CREATE TABLE tab_user ( uid INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(100) UNIQUE NOT NULL, PASSWORD VARCHAR(30) NOT NULL, NAME VARCHAR(100), birthday DATE, sex CHAR(1) DEFAULT 男, telephone VARCHAR(11), email VARCHAR(100) );创建收藏表 (中间表)CREATE TABLE tab_favorite ( rid INT, -- 线路id DATE DATETIME, uid INT, -- 用户id -- 创建复合主键 //他们两个不能重复 //如两个rid1uid1这种情况是不可取的 PRIMARY KEY(rid,uid), -- 联合主键 FOREIGN KEY (rid) REFERENCES tab_route(rid), FOREIGN KEY(uid) REFERENCES tab_user(uid) );三大范式第一范式:每一列都是不可分割的原子数据项第二范式消除部分依赖第三范式消除传递依赖概念函数依赖 A–B,例如如学号–姓名完全函数依赖 例如学号课程名称 -- 分数部分函数依赖,例如学号课程名称 – 姓名传递函数依赖,例如学号–系名系名–系主任码,例如该表中码为学号课程名称主属性码属性组中的所有属性非主属性除过码属性组的属性非主属性完全依赖于主属性数据库的备份和还原备份mysqldump -u用户名 -p密码 数据库名称 保存的路径多表查询笛卡尔积由两个集合取这两个集合的所有组成情况内连接查询消除无用的数据外连接查询子查询使用where连接消除无用信息隐式内连接查询SELECT * FROM emp,dept WHERE emp.dept_id dept.id;取别名SELECT t1.name, -- 员工表的姓名 t1.gender,-- 员工表的性别 t2.name -- 部门表的名称 FROM //替换两个表格名字 emp t1, dept t2 WHERE t1.dept_id t2.id;显示内连接查询查询所有员工信息如果员工有部门则查询部门名称没有部门则不显示部门名称* SELECT * FROM emp INNER JOIN dept ON emp.dept_id dept.id;外连接左外连接左边表的所有数据加上右表交集的数据SELECT t1.*,t2.name FROM emp t1 LEFT JOIN dept t2 ON t1.dept_id t2.id;右外连接,原来右边表的所有数据加上右表交集的数据SELECT * FROM dept t2 RIGHT JOIN emp t1 ON t1.dept_id t2.id;子查询嵌套查询查询工资最高的员工信息1 查询最高的工资是多少得到结果是9000SELECT MAX(salary) FROM emp;2查询员工信息并且工资等于9000的SELECT * FROM emp WHERE emp.salary 9000;将上述两步操作合并成一步SELECT * FROM emp WHERE emp.salary (SELECT MAX(salary) FROM emp);子查询的不同情况子查询的结果是单行单列的查询员工工资小于平均工资的人SELECT * FROM emp WHERE emp.salary (SELECT AVG(salary) FROM emp);子查询的结果是多行单列的查询’财务部’和’市场部’所有的员工信息SELECT id FROM dept WHERE NAME 财务部 OR NAME 市场部; SELECT * FROM emp WHERE dept_id 3 OR dept_id 2;使用子查询的写法//in表示dept的id3或者等于2 SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE NAME 财务部 OR NAME 市场部);子查询的结果是多行多列的查询员工入职日期是2011-11-11日之后的员工信息和部门信息SELECT * FROM dept t1 ,(SELECT * FROM emp WHERE emp.join_date 2011-11-11) t2 WHERE t1.id t2.dept_id;事务同时成功同时失败开启事务回滚提交使用事务管理Mysql事务默认自动提交开启事务 start transaction;回滚rollback;提交commit;修改事务的默认提交方式set autocommit 0;事务四大特征原子性是不可分割的最小操作单位要么同时成功要么同时失败。持久性当事务提交或回滚后数据库会持久化的保存数据。隔离性多个事务之间。相互独立。一致性事务操作前后数据总量不变DCLJDBC用JAVA操作数据库定义了一套规则接口我们可以使用这套接口JDBC编程真正执行的代码是驱动jar包中的实现类public class JdbcDemo1 { public static void main(String[] args) throws Exception { //1. 导入驱动jar包 //2.注册驱动 // Class.forName(com.mysql.jdbc.Driver); //3.获取数据库连接对象 // Connection conn DriverManager.getConnection(jdbc:mysql://localhost:3306/db3, root, root); Connection conn DriverManager.getConnection(jdbc:mysql:///db3, root, root); //4.定义sql语句 // String sql update account set balance 2000 where id 1; String sql update account set balance 2000; //5.获取执行sql的对象 Statement Statement stmt conn.createStatement(); //6.执行sql int count stmt.executeUpdate(sql); //7.处理结果 System.out.println(count); //8.释放资源 stmt.close(); conn.close(); } }数据库连接池c3p0代码public class C3P0Demo2 { public static void main(String[] args) throws SQLException { /* //1. 获取DataSource使用默认配置 DataSource ds new ComboPooledDataSource(); //2.获取连接 for (int i 1; i 11 ; i) { Connection conn ds.getConnection(); System.out.println(i:conn); if(i 5){ conn.close();//归还连接到连接池中 } }*/ //testNamedConfig(); } public static void testNamedConfig() throws SQLException { // 1.1 获取DataSource使用指定名称配置 DataSource ds new ComboPooledDataSource(otherc3p0); //2.获取连接 for (int i 1; i 10 ; i) { Connection conn ds.getConnection(); System.out.println(i:conn); } } }《网络安全从零到精通全套学习大礼包》96节从入门到精通的全套视频教程免费领取如果你也想通过学网络安全技术去帮助就业和转行我可以把我自己亲自录制的96节 从零基础到精通的视频教程以及配套学习资料无偿分享给你。网络安全学习路线图想要学习 网络安全作为新手一定要先按照路线图学习方向不对努力白费。对于从来没有接触过网络安全的同学我帮大家准备了从零基础到精通学习成长路线图以及学习规划。可以说是最科学最系统的学习路线大家跟着这个路线图学习准没错。配套实战项目/源码所有视频教程所涉及的实战项目和项目源码学习电子书籍学习网络安全必看的书籍和文章的PDF市面上网络安全书籍确实太多了这些是我精选出来的面试真题/经验以上资料如何领取最系统的学习路线大家跟着这个路线图学习准没错。配套实战项目/源码所有视频教程所涉及的实战项目和项目源码学习电子书籍学习网络安全必看的书籍和文章的PDF市面上网络安全书籍确实太多了这些是我精选出来的面试真题/经验以上资料如何领取

更多文章