数据库入门
Mysql基本命令
登录到mysql命令行客户端 :mysql -h localhost -uroot -p密码;
修改密码 :mysqladmin -uroot -p原来密码 password 现在密码
在系统命令行中创建数据库实例 :mysqladmin -uroot -proot create mydb
在系统命令行中删除数据库实例 :mysqladmin -uroot -proot drop mydb
显示mysql数据库的实例 :create database mydb;
使用实例 :use mydb
显示实例中的所有表 :show tables;
查看指定表结构( user 就是指定的那个表) :desc user;
从mysql命令行客户端退出 :exit/quit
放弃正在输入的命令,进入下一次输入 :\c[lear]
打开命令列表 :\h[elp]
SQL语句入门
1、DDL语句
数据定义语句,一般包含对于数据库,表,视图,索引,过程,函数,触发器等进行结构操作的语句,比如:创建表,删除表,修改表结构都称之为DDL;一般包含这些命令:create、drop、alter、change、modify、add等
创建一张表: create table student(
sno int,
sname varchar(10),
age int,
sex char(2)
);
向表中新增列 :alter table student add birth date;
删除列 :alter table student drop age;
修改表名称(tb_stu为表名,stu为新的表名) :alter table tb_stu rename to stu;
修改列名称 :alter table stu change birth birthday date;
修改列类型 :alter table product modify price decimal(7,2);
向表中的指定字段添加约束 :alter table stu add constraint primary key(sno);
删除表 :drop table stu;
2、DML语句
数据操作语句,一般包含用于对表中的数据操作的命令,比如:新增数据,删除数据,修改数据,查询数据;包含的命令有: insert、delete、update、select等
添加数据到表中 :nsert into 表名称(列名...) values(值...)
向所有列插入值 :insert into emp values(1001,'易大师',3500.06,'2018-10-01');
向指定列插入值 :insert into emp(ename,sal,hiredate) values('马尔咋哈',8500.09,now());
向表中一次性插入多行记录 :insert into emp(ename,sal,hiredate) values
('波比',4398.67,'2018-12-12'),
('艾希',9566.8,'2017-11-11'),
('墨菲特',4300,'2019-01-22');
查询所有数据 :select 列名 from 表名称 [附加条件]
修改表数据 :update 表名称 set 列名1=新值1,列名2,=新值2... where 条件
删除记录 :delete from 表名称 where 条件
3、DCL语句
数据控制语句,一般由数据库管理员(DBA),使用这些命令,操作数据库相关的权限,比如授权,解除权限,常见命令有: grant、revoke等
数值类型
auto_increment :设置列自动递增,一般只能对标识列(主键列)设置,并且必须是整数型类型
unsigned:设置列为无符号列,即列值不允许为负数
zerofill*:设置前导填充,当数值长度未达到定义长度时,前面补零填充宽度
约束
为了维护数据的完整性,一般在数据库系统中都会有一些维护完整性的解决方案,比较常见的方式为两种:
1、约束(constraint)
2、触发器(trigger)
约束分类
-
主键约束(primary key)
-
不为空约束(not null)
-
唯一约束(unique)
-
检查约束(check)(mysql无效)
-
外键约束(foreign key)
-
新增列的同时设置该列为外键列并关联指定表的主键列 :alter table emp add dno int references dept(dno);
-
修改表中的指定列为外键 :alter table emp add constraint foreign key(dno) references dept(dno);
指定字段名查询:
select * from ... *:表示所有字段
若要显示指定的字段,则可将*用字段名代替,多个字段名用逗号隔开
别名:as:
用于查询时给字段或者表起别名,别名只在当前这次查询有效(as可以省略不写)
select name as 姓名,salary as 工资 from emp;
排序:order by:
默认为升序排序(asc表示升序,可以不写)
select * from emp order by salary;
desc:表示降序排序
select * from emp order by salary desc;
分组:group by
每一组只会显示其中一条记录
select * from emp group by dept_id;
having
与group by结合使用,用于将分组后的结果进一步过滤
having后面可以使用聚合函数
limit(可用于分页)
limit m [,n]:limit可以限制查询后的返回记录数目
limit m : 表示查询的结果从第一条开始,返回m条记录
limit m,n : 表示查询的结果从偏移量(偏移量从0开始)为m的开始,往后偏移n条记录
like 模糊查询
%:是一个通配符,表示匹配任意长度的字符串
_:通配符,匹配长度为1的任意字符
聚合函数
count(*) : 可以获取查询的结果记录条数
max() : 获取最大值
min() : 获取最小值
avg():获取平均值
sum() : 指定字段求和
事务
1、开启事务(必须手动提交事务)
start transaction;
2、提交事务
commit;
3、事务回滚
-- 执行后将会回滚到事务的开始位置,在此之前的所有操作都将不会生效,并且将结束此次事务
rollback;
4、savepoint
savepoint p1; -- 在事务执行过程可以设置一个节点(标记)
5、回滚到指定结点
-- 回滚到指定结点,结点之前的sql照常执行
-- 后面必须使用commit提交才能结束此次事务,让事务中的sql生效。
rollback to p1;
6、设置事务自动提交模式
-- 0:禁止自动提交;1:开启自动提交
SET AUTOCOMMIT=0 ;
软件工程
站在专业的角度教你如何开发应用软件,一个软件的生命周期通常包含以下几个阶段:
-
问题确定阶段(客户/产品负责人)
-
可行性分析(产品负责人/项目经理/客户)
-
概要设计(需求工程师(产品经理)/项目经理/工程师)
-
详细设计(项目经理/工程师/架构师)
-
编码(项目经理/工程师)
-
测试(QA:测试经理/测试工程师)
-
运行与维护(实施工程师/运维工程师)
软件开发模型
-
瀑布模型
-
喷泉模型
-
螺旋模型
-
快速原型模型
-
...
-
scurm敏捷模型
-
数据库设计三范式
-
第一大范式(1NF)
要求数据表中所有的列是原子的(不可再分),即列表示的是单一的数据(整数,字符串,日期,浮点)不能再进行拆分。
第二大范式(2NF)
-
在满足第一范式的前提下,表中必须包含主键(避免使用联合主键),表中所有列必须直接依赖主键列,不允许存在部分依赖
第三范式(2NF)
在满足第二大范式的前提下,表中不允许存在传递依赖,即非主键列对主键列的传递依赖关系
-
总结数据库设计范式
在进行数据库设计时,参考数据库设计的范式会使得数据库表更精简,并且减少数据冗余的可能型,提高的数据库的扩展性;但同时带来的是应用程序查询的不方便,提高了查询的复杂度;因此,在实际开发中数据库设计范式只是参考(规范),并不是必须的。