数据库是文件系统,通过命令操作。
操作后台数据,取到后台数据进行封装,交到前端展示。
大型电商Oracle,银行系统db2,政府网站sqlserver(图形化工具)。
nosql:非关系型数据库,键值,mongodb,redis.
E-R关系图:实体方框,属性椭圆,关系菱形。
sql:结构化查询语言。
ddl:数据定义语言。create,drop,alter;
dml:数据操作语言。insert,update,delete;
dcl:数据控制语言。访问权限,安全设置grant;
dql:数据查询语言。select,from,where;配置方法卸载mysql后再安装提示The service already exists!问题解决方法
my.ini代码:

[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=D:\mysql-8.0.19-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:\mysql-8.0.19-winx64\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8

一些指令(所有字符串全是单引号):

①安装服务:mysqld --install
 
  ②初始化: mysqld --initialize --console
 
  ③开启服务:net start mysql
 
  ④关闭服务:net stop mysql
 
  ⑤登录mysql:mysql -u root -p
 
    Enter PassWord:(密码)      或者mysql -uroot -proot
 
  ⑥修改密码:alter user 'root'@'localhost' identified by 'root';(by 接着的是密码)
 
  ⑦标记删除mysql服务:sc delete mysql
创建数据库create database 数据库名;
创建数据库create database 数据库名 character set utf8;
创建数据库create database 数据库名 character set 字符集 collate 校对规则;
tips:如果字符集与my.ini中默认字符集不同,会因客户端到服务端字符集转换出错出现乱码,要关闭数据库后手动改my.ini(永久解决)或者set names gbk;(临时解决);

查看所有数据库show databases; 
tips:information_schema ,mysql,performance_schema三个数据库不要动;
查看数据库定义的语句show create database 数据库名
修改数据库字符集alter database 数据库名 character set 字符集;
删除数据库drop database 数据库名;
切换数据库use 数据库名;
查看当前数据库select database();
表的操作:
create table 表名(
 列名 列类型(长度) 约束,  //约束可以写成primary key auto_increment自动增长,插入时候内容写成null就行
 列名 列类型(长度) 约束
);
string类型对应sql的varchar,blob存二进制。还有个timestamp时间类型,插入时候写null,时间会自动插入。
约束:主键约束primary key 唯一约束unique 非空约束not null
主键约束默认不能为空,唯一,一张表只能有一个,外键指向另一个表的主键。
唯一约束必须唯一,可以有多个唯一约束,外键不可以另一个表的主键。
primary key是非空惟一的,插入相同的primary key会报错。
查看所有表show tables;
查看表创建过程show create table 表名;
查看表结构desc 表名;
修改表名raname table 旧表名 to 新表名;  //不建议
修改表字符集alter table 表名 character set 字符集;
删除表drop table 表名;
列的操作:
添加列alter table 表名 add 列名 列的类型 列的约束;
修改列属性alter table 表名 modify 列名 列的类型 列的约束;
修改列名alter table 表名 change 旧列名 新列名 列的类型 列的约束;
删除列alter table 表名 drop 列名;
crud:
插入部分列insert into 表名(列名1,列名2,列名3)values(值1,值2,值3);
插入全列insert into 表名 values(值1,值2,值3);
插入多行insert into 表名 values(值1,值2,值3),(值4,值5,值6);  //批量插入效率高
查看表中所有数据select * from 表名;
查看表中部分数据select 列名1,列名2 from 表名;
查询记录select [distinct] [*] [列名1,列名2] from 表名 [where 条件];//distinct是去重
删除记录delete form 表名 [where 条件如sid=10不加会删除所有记录];
delete是dml,一条一条删除表中数据,turncate是ddl,先删除表再重建数据。数据量少delete效率高。
更新记录update 表名 set 列名1=列值1,列名2=列值2[where 条件];  //注意字符串要加的是单引号
查询应用:
select p.pname,p.price from 表名 p;
select pname as 商品名称,price as 商品价格 from 表名;  /查询出的列名pname替代为“商品名称”四个字,price一样,as可省略
select distinct price from 表名;  //查询到price不同的记录。
select *,price*0.5 as 折后价 from 表名 where price>60 and price<100; //或者between 60 and 100;and,or,!=等都能用;原表后面会加一个名为“折后价”的新列
模糊查询like,_一个字符,%多个字符如where pname like '_饼%';第二个字为饼的记录。
范围查询in,如where pid in (1,4,5);
排序order by price desc或asc;
聚合函数:
sum(),avg(),count(),max(),min();
查询价格和select sum(price) from 表名;
查询商品数select count(*) from 表名;
tip:where 后不能接聚合函数,出现在分组之前。having后能接聚合函数,出现在分组之后。

分组group by,分组同时聚合函数将是统计每组的内容如每组数量,每组平均值。
tip:编写顺序select...from...where,group by,having...order by...;
外键约束:alter table product add foreigh key(cno) references category(cid);//如果要删除category中cid=5的记录,要先删除product 中cno=5的记录。

隐式内连接:查询出结果的基础上where条件过滤。

    select * from product p,category c where p.pid=c.cid;

显式内连接:带着条件去查询结果,效率高。

    select * from product p inner join category c on p.pid=c.cid;
左外连接:left outer join会将左表中所有数据查询,右表没有对应数据用NULL代替。
分页查询limit 索引,每页数量; //起始索引是0
子查询就是嵌套select

建表原则:
一对一:1.当做一对多处理,一张表添加唯一外键,指向另一张表。2.两表合一。3.两表主键建立连接,两表主键相等。如班级和班长,公民和身份证,国家和国旗。用途:拆表(将常用信息和不常用信息拆开,减少表臃肿)。
一对多:多者建立主键,指向一者主键。如商品和分类。
多对多:建立中间表,拆分成一对多,中间至少两个外键,分别指向两张表。