数据库

数据库

数据库是储存数据的仓库,带有访问权限限制不同的人员有不同的操作
E-R图也称实体-联系图(Entity Relationship
Diagram),方框-实体,椭圆-属性,菱形-关系

登陆数据库:
mysql -uroot -proot;

SQL分类:

DDL:数据库定义语言,与数据库/表结构:create,drop,alter
DML:数据库操作语言,操作表数据:insert update delete
DCL:数据控制语言:设置用户的访问权限 安全
DQL:数据查询语言:select from where

数据库操作:

创建数据库
create database 数据库名 character set 字符集 collate 校对规则;
查看所有数据库:
show database;
查看数据库定义:
show create database 数据库名;
查看当前正在使用的数据库:
select database();
修改数据库:alter database character set 字符集
删除数据库:drop database;
选中数据库:use database;

列的类型:char varchar int

表结构的操作:
创建表:create table 表名(字段名 类型 约束,字段名 类型 约束);
主键约束:primary key
唯一约束:unique
非空约束:not null

自动增长:auto_increment

修改表:
添加列(add):
alter table student(表名) add score(列名) int(类型) not null(约束);
修改列(modify):
alter table student modify sex varchar(2);
修改列名(change):
alter table student change sex(旧列名) gender(新列名) varchar(2);
删除列(drop):
alter table student drop score;

修改表名(rename):
rename table student to teacher;
修改表的字符集
alter table teacher character set gbk;
删除表:
drop table teacher;

查看表:
show tables;
show create table 表名; – 查看表的定义结构/创建语句
desc 表名; – 查看表的结构

数据操作:增删改查

  • 1.插入记录
    insert into 表名(列名1,列名2) values(值1,值2);
    insert into 表名 values(值1,值2); –
    如果插入的是全列的数据,列名可以省略

    批量插入:
    insert into 表名(列名1,列名2) values(值1,值2),(值1,值2),(值1,值2);

  • 2.删除记录
    delete from 表名 [where 条件]
    – 如果没有指定条件 会将表中数据一条一条全部删除掉

    问题:delete和truncate删除数据有什么差别?
    delete:DML,一条一条一条删除表中的数据;
    truncate:DDL,先删除表再重建表.
    关于哪条执行效率高:具体要看表中的数据量
    如果数据比较少,delete比较高效
    如果数据比较多,truncate比较高效

  • 3.更新记录
    update 表名 set 列名=列值,列名2=列值2 [where 条件];
    – 如果没加条件会把表中所有的数据修改

  • 4.查看记录

    • select * from 表名;
      select [distinct] [*] [列名,列名2] from 表名 [where
      条件];
      distinct:去除重复的条件

    • 运算查询:
      select * ,price*1.5 as 折上价 from product;

    • 条件查询[where]
      select * from product where price > 60;

    • 关系运算符: > >= < <= = != <>
      != 不等于 标准sql语法
      <> 不等于 非标准sql语法
      between…and
      判断某一列是否为空:is null,is not null

    • 逻辑运算:and or not
      select * from product where price > 60 and price < 100;

    • 模糊查询 like
      _ 代表一个字符
      %代表多个字符
      select * from product where pname like’%饼%’;

      in 在某个范围中
      select * from product where cno in (1,3,5);

    • 排序查询 order by
      asc:ascend 升序
      desc:descend 降序
      select * from product order by price desc;

    • 聚合函数
      注意:where条件后面不能接聚合函数
      max()最大值
      min()最小值
      avg()平均值
      sum()求和
      count()统计数量
      select sum(price) from product;
      – 子查询
      select * from product where price > (select avg(price) from
      product);

    • 分组 group by
      select cno,count(*) from product group by cno;
      select cno,avg(price) from product group by cno having
      avg(price) > 60;

    – having关键字可以接聚合函数,出现在分组之后
    – where 关键字不可以接聚合函数,出现在分组之前
    编写顺序:
    select…from…where…group by…having…order by
    执行顺序:
    from…where…group by…having…select…order by

多表操作

  • 外键约束:foreign key
    alter table product add foreign key(cno) references category(cid);

  • 建数据库原则:
    通常情况下一个项目建立一个数据库

  • 多表之间的建表原则:

  1. 一对多:在多的一方添加外键指向一方的主键
  2. 多对多:建立一张中间表,将多对多的的关系拆分成一对多的关系,中间表至少有两个外键,分别指向原来的两张表

JDBC对象:
DriverManager 创建连接通道
Connection 通道
Statement 发送并执行SQL
缺点:1.不安全,能SQL注入
2.效率低
PreparedStatement: