关于mysql数据库

常用的类型

1.数值 最常用是int

2.字符串 最常用是 varchar 如果是大文本 就用text

3.时间类型 datatime 可以是 HH:MM:SS 也可以是HH:mm :ss 这个是时间,还有时间戳格式 是timestamp 1970.1.1 到现在的毫秒值

字段属性

  1. unsigned 声明该列不能为负数

  2. zerofill 零填充 不足的为数用0来填充

  3. 自增 自动在上一条的基础上加一 用来设置唯一的住建

  4. 非空 null 和 notnull 假设设置为notnull 如果不赋值会报错, null 如果不填默认为null

数据库语句

修改

  1. alter eg. alter table student rename as student1 修改表的名字 alter table 旧表名 rename as 新表名

  2. alter eg,alter table student1 add age int (2); 往表里面增加字段 alter table 表名 add 字段名 约束 (长度)

  3. alter eg,alter table student modify age varchar (11); 这个是修改某个字段的类型 修改约束 alter table 表名 modify 字段名 约束(长度)

  4. alter eg,alter table student1 change age age1 int(11); 这个是修改某个字段的名字 alter table 表名 change 旧字段名 新字段名 约束(长度)

  5. alter eg, alter table student1 drop age1; 删除表里面的字段 alter table 表名 drop 字段名

删除

删除表 drop table if exist 表名 尽量判断下是否存在

mysql 数据管理

  1. 添加 insert insert into 表名 (字段名,字段名)values (’值‘,值);字段名是可以省略的,但是后面的值必须是一一对应的(在我写添加的时候遇到一个问题,我们有设置主键自增,在添加的时候id是需要写的,如果设置了自增,就可以不用写)

  2. 修改 update update 表名 set 字段名 = ’值‘ where id = 1; 这里要注意,一定要带条件 where 要不然会所有的都修改为那个值

修改多个值 update 表名 set 字段名 = ’值‘ , 字段名 = ’值‘ where id = 1; 操作符 返回的是Boolean

操作符含义范围结果
=等于
<> !=不等于
>
<
>=
<=
between .... and在什么之间
and
or

update student set name = '谢谢谢'where name ='谢谢谢' and sex = '1';

3.删除

delete 删除完,在新建数据库,自增是从上一个开始的 比如上一个是到4 那么这个数据库就是从5开始

truncate 是从1开始

4.查询(最重要)

select 比如我们在一个数据库里面的字段是studentno 我们在查找数据库的时候 可以重命名,但是不影响数据库中的字段名字

select ‘studentno’ as 学号from student as 这个是别名

concat 拼接(a,b)

去重 去掉重复的数据 select studentno from result (这个result 表是成绩表,有学号,课程号,分数) 学生号是会重复的

select distinct studentno from result

where

  1. select studentno, studentresult from result where studentresult >=95 and studentresult<=100;

    2.select studentno, studentresult from result where not studentresult =100;

  2. select studentno, studentresult from result where studentresult between 95 and 100;

模糊查询

like % _

% 这个是不限定字数

select studentno from student where studentname like '李%'; 会查出来李后面有两个字和三个字的 % 建 % 查出来带有建字的

select studentno , studentname from student where studentname like '李_'; 会查出来 李后面有一个字的; 带两个__ 查出来后面有两个字的

连表查询

join on 是个固定语法 join on是连接查询 where 是等值查询

select s.studentno ,studentname,subjectno,studentresult from student as s left join result as r on s.studentno = r.studentno;

后面还可以加where

自联表

CREATE TABLE school.category( categoryid INT(3) NOT NULL COMMENT 'id', pid INT(3) NOT NULL COMMENT '父id 没有父则为1', categoryname VARCHAR(10) NOT NULL COMMENT '种类名字', PRIMARY KEY (categoryid) ) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_general_ci;

INSERT INTO school.category (categoryid, pid, categoryname) VALUES ('2', '1', '信息技术'); insert into school.CATEGOrY (categoryid, pid, categoryname) values ('3', '1', '软件开发'); insert into school.category (categoryid, PId, categoryname) values ('5', '1', '美术设计'); insert iNTO School.category (categoryid, pid, categorynamE) VAlUES ('4', '3', '数据库'); insert into school.category (CATEgoryid, pid, categoryname) values ('8', '2', '办公信息'); insert into school.category (categoryid, pid, CAtegoryname) values ('6', '3', 'web开发'); inserT INTO SCHool.category (categoryid, pid, categoryname) valueS ('7', '5', 'ps技术');

类似这样的表,其实应该是两张表,合成了一张,我们在取数据的时候,需要把这一张表拆分成两张边,其中 第二张表的categoryid是另一张表的pid;

去查数据时

select a.categoryname,b.categoryname from category as a ,category as b where a.categoryid = b.pid; 几乎是这样的语法

升序降序 desc 是降序 asc 是升序

标准语句

select s.studentno,studentname,subjectname,studentresult from student s inner join result r on s.studentno = r.studentno inner join subject sub on sub.subjectno = r.subjectno where subjectname = '美术' order by studentresult desc;

limit 分页

select s.studentno,studentname,subjectname,studentresult from student s inner join result r on s.studentno = r.studentno inner join subject sub on sub.subjectno = r.subjectno where subjectname = '美术' order by studentresult desc limit 0,5;这个代表从第0条数据开始,一页展示5条数据

pageSize 是页面数据 n:当前页 (n-1)*pageSize就是起始值 页面总数/页面大小=页数

限制的顺序

1where group by having order by limit(分页)

子查询

在where 语句中嵌套一个语句

in 的用法:IN 操作符允许我们在 WHERE 子句中规定多个值。

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)

聚合函数

1.count()

count(1) count(*) count(列名)自己百度区别

现在,我们希望查找每个客户的总金额(总订单)。

O_IdOrderDateOrderPriceCustomer
12008/12/291000Bush
22008/11/231600Carter
32008/10/05700Bush
42008/09/28300Bush
52008/08/062000Adams
62008/07/21100Carter
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer

如果不加上group by

CustomerSUM(OrderPrice)
Bush5700
Carter5700
Bush5700
Bush5700
Adams5700
Carter5700

那么为什么不能使用上面这条 SELECT 语句呢?解释如下:上面的 SELECT 语句指定了两列(Customer 和 SUM(OrderPrice))。"SUM(OrderPrice)" 返回一个单独的值("OrderPrice" 列的总计),而 "Customer" 返回 6 个值(每个值对应 "Orders" 表中的每一行)。因此,我们得不到正确的结果。不过,您已经看到了,GROUP BY 语句解决了这个问题。

having 和 where 是一样的,只不过用的位置不同 where 不能用在聚合函数中,having可以

事务

ACID 原子性 持久性 隔离性 一致性

一个事务的过程

mysql 是默认开启事务自动提交的

set autocommit = 0;关闭

set autocommit=1; 开启(默认)

1.手动处理事务

set autocommit = 0

start transaction 标记一个事务开始的地方,从这个之后的sql都在一个事务中

insert xx

insert xx

commit (如果成功的话)

rollback (如果失败,回到原来的样子)

set autocommit = 1;开启自动提交

规范数据库设计

满足三大范式:

第一范式

1.原子性: 保证每一列都是不可再分的

第二范式

前提:满足第一范式

每张表只能描述一件事情

第三范式

前提:满足第一范式和第二范式

需要满足数据表中的每一列都和主键直接相关而不是间接相关

规范性和性能问题

阿里的规范:

关联查询的表不能超过三张

考虑商业化的需求和目标(成本,用户体验) 数据库的性能更加重要

在规范性能的问题时,需要适当的考虑下规范性

故意给每张表增加冗余字段(从多表查询变成单表查询0)

故意增加计算列(从大数据量变成小数据量 :索引)

JDBC

将数据库和idea联系起来

在maven 官网下载 jar包

点击file -> projectStruture->加好->jars and

 Statement statement = connection.createStatement();
        String sql = "insert into users (id,name,password,email,birthday) values (\"6\",\"li\",\"123456\",\"1045058412@qq.com\",\"1996-01-02\");";
        int num = statement.executeUpdate(sql);
        if (num>0){
            System.out.println("插入成功");
        }
​

增删改 用的都是这样语句,只是sql的语句不一样

Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("select * from users");
while (resultSet.next()){
    System.out.println("id=="+resultSet.getString("id"));
}

以上是查询的

connection.commit();
connection.rollback();

操作数据库的

提交,回滚

idea 和数据库链接

idea中,右侧边栏的database

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值