数据库(一)

mysql数据库

SQL 结构化查询语言 structured query language

  1. DDL 数据定义语言 digital definite language
    create 创建表、视图、索引...
    drop 删除表、视图、索引...
    alter 修改表
    truncate 截断

  2. DML 数据操控语言 digital mutual language
    insert 插入数据
    update 修改数据
    delete 删除数据
    select 查询数据

  3. DCL 数据控制语言 digital control language
    grant 授权
    revoke 回收授权

  4. TCL 事务控制语言 transaction control language
    start transaction 开始事务(begin)
    commit
    rollback

 

DDL

1.创建或选择一个数据库
create database 数据库名字;

create database test2;

使用/切换库 : use 数据库名;

use test2;

+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+

 

2.创建表或者显示表
创建表语法 :
create table 表名(
列名1 类型 约束,
列名2 类型 约束,
...
列名n 类型 约束,
约束
);

create table Student(
   id int,
   name varchar(10)
);

显示表 :

show tables;

 

3.drop
删除库或者表,索引等
drop database/table 库名/表名;

 

4.约束和组合主键
unique 唯一,
not null 非空
primary key 主键 (只要有一个)
foreign key 外键 (需要引用另一个表的主键或唯一列)
-- 把约束加在类型之后

create table student(
  sid int unique,
  sname varchar(20),
  birthday date,
  sex char(1)
);

-- 把约束单独一行

create table student(
  cid int not null,
  sname varchar(20) not null,
  birthday date,
  sex char(1),
  unique(sid)
  foreign key(cid)references class(cid) //student中的cid取值必须引用class中的cid的值 
);

组合主键 :

create table Student(
   id int,
   name varchar(10),
   age int,
  primary key(id,cid)/*组合主键*/
);

 

5.自增列

create table course(
    cid int primary key auto_increment, /*产生一个自动增长的值*/
    cname varchar(10)
);

注意用了自增长,就不要手动赋值了(写null即可),否则会使用手动赋的值

 

6.默认值 default

create table course(
    cid int primary key auto_increment,
    cname varchar(10),
    csex char(1) default '男',
    lastmodify timestamp default current_timestamp on update current_timestamp
);

-- default current_timestamp 插入数据时,采用当前时间作为默认值
-- on update current_timestamp 修改数据时,采用修改那个时刻的时间来更新这一列
insert into person(cname) values('张三');
insert into person(cname,sex) values('李四','女');

 

7.alter 修改
给学生表添加一列年龄 alter table student add age tinyint;
给学生表的姓名列扩展长度 alter table student modify name varchar(30);

 

8.truncate 截断
delete from 表; -- 如果和事务sql结合使用,是有机会恢复,如有自增,会保留序列号
truncate table 表; -- 没法和事务结合,不能恢复,效率更高

 

 

DML

插入数据

标准语法 :
insert into 表名(列1, 列2...列n) values (值1,值2... 值n);

insert into student(id,name) values(1, '张三');
insert into student(id,name) values(2, '李四');

标准语法: insert into 表(多个列...) values (多个值...);
mysql独有的: 一次插入多行数据
insert into 表(多个列...) values
(多个值), (多个值), (多个值) ...;
标准SQL写法:

insert into student values(null,'张三','1990-10-10','男');
insert into student values(null,'李四','1981-10-10','男');
insert into student values(null,'王五','1981-11-10','女');
insert into student values(null,'赵六','1988-10-10','男');
insert into student values(null,'孙七','1989-01-10','女');

mysql写法 :

insert into student values(null,'张三','1990-10-10','男'),
    (null,'李四','1981-10-10','男'),
    (null,'王五','1981-11-10','女'),
    (null,'赵六','1988-10-10','男'),
    (null,'孙七','1989-01-10','女');

标准语法:用insert插入另一张表的数据(列的个数和类型要一致)
insert into 表1(列1,列2...) select 列1,列2... from 表2;

insert into s2(sid,sname) select sid,sname from student;

 

数据类型

整数类型
int -2^31 ~ 2^31-1 四个字节
tinyint 一个字节
smallint 两个字节
bigint 八个字节
小数类型
浮点类型
FLOAT
DOUBLE
定点类型 (小数部分不会丢失精度,占用空间高)
DECIMAL(p, s)
p 有效数字长度
s 小数位数

	decimal(10, 2)
	12345678.77  ok
	123456789.44  存不下
	12345678.456  小数部分变为46

字符串类型
char(最大长度) 定长的字符类型
varchar(最大长度) 变长的字符类型,Tocat5.0以前最大长度是字节最大长度

name char(5)  'abc'  存储后  'abc  '  用空格补齐不足的部分, 再查询时会去掉, 效率高,但占用空间多, 最大值255
name varchar(5) 'abc'  存储后 'abc'    不会用空格补齐,不会占用额外空间, 效率较char低, 最大值65535

日期类型
datetime 包括年月日,时分秒 时间范围短(1000-1-1 ~ 9999-12-31)
date 只包括年月日
time 只包括时分秒
timestamp 也可以包括年月日时分秒, 时间范围短(1970-1-1 ~ 2038-1-19)

 

查询数据

select 列1,列2....列n from 表名 where 条件;

条件
1.1.比较运算
表示相等的 =
大于 >
大于等于 >=
小于 <
小于等于 <=
不等于 !=

 

1.2.逻辑运算 and(并且) or(或者) not(取反)

-- 查询工资大于800 并且 部门等于20
where sal>800 and deptno=20
-- 部门=20 或者 等于30的
where deptno=20 or deptno=30;

and优先级高于or,可用()改变

 

1.3. null值
数据库中的null ,比较特殊,不能使用=来比较, 必须用 is null
例如:查询佣金为null的员工
select * from emp where comm is null; // 星号表示全部列
例如:查询佣金不为null的员工
select * from emp where comm is not null;

 

1.4. like (模糊查询)
例如查询以 ‘S’字母打头的员工

select * from emp where ename like 'S%';

通配符 % 表示匹配0~多个任意的字符
通配符 _ 表示匹配一个任意字符
汉字两个字节,需两个下划线表示
反斜\ 后面的字符转义

 

1.5. between ... and ... 范围匹配
求工资大于等于1000, 小于等于2000的员工
select * from emp where sal>=1000 and sal<=2000;

select * from emp where sal between 1000 and 2000;

  1. 必须按有小到大顺序
  2. between 包含等于条件

 

1.6. in 求这一列是否在一个值列表内
求所有销售人员和经理
select * from emp where job='SALESMAN' or job='MANAGER';

select * from emp where job in ('SALESMAN', 'MANAGER');

 

1.7. limit (mysql特有的)
用来限制返回的结果数

  1. limit n; n表示最多返回几条记录
  2. limit m, n; m代表偏移量(下标) 注意偏移量从0开始

 

1.8. order by 用来给结果排序
语法: order by 列名 asc|desc, 列名 asc|desc, ...
例如:按工资升序:
select * from emp order by sal;
select * from emp order by sal asc;
按工资降序:
select * from emp order by sal desc;
其中如果不写asc或desc,默认升序

如果多列排序,如果第一列取值相同,再按照第二列进行排序,例如:
先按工资排序,工资相同的,再按姓名排序:
select * from emp order by sal asc, ename asc; /如果升序,两个asc都可以省略/

 

函数
2.1 时间加减
date_add(原始时间, 时间间隔)
时间间隔的语法: interval 数字 时间单位
数字可以是正数或负数

    select date_add(now(), interval 1 day );

 

2.2 提取时间的某个部分
extract(时间部分 from 原始时间)
select extract(year from now());
select extract(year_month from now());
返回的结果是一个数字类型

例:要获取1981年入职的员工
select * from emp where extract(year from hiredate)=1981;

 

2.3 类型转换
select cast('11' as signed)+1;
select cast('12.55555' as decimal(5,2));

 

2.4 拼接字符串
concat(值1, 值2, ... 值n)
select concat('a', 'b', 'c');
select concat('a', 18, 'c'); /可以把其它类型当做字符串拼接/

 

2.5 求长度的函数
char_length 按字符为单位统计长度
length 按字节为单位统计长度 (仅适用于英文)
utf8mb4编码下,汉字一个字符占三个字节,英文一个字符占一个字节

 

2.6 标准sql:
case
when 条件1 then 值1
when 条件2 then 值2
...
else 值n
end
整个case...end 最后返回一个值

select sal, 
case 
    when sal>2000 then '高工资'
    when sal between 1000 and 2000 then '中等'
    else '低工资'
end from emp;

 

2.7 组函数
最大值 max(列)
最小值 min(列)
和 sum(列)
个数 count(列) 会排除null值
count(*) 针对这次查询,看看一共有多少行
平均值 avg(列)

 

2.8 去除重复
distinct
select distinct job from emp; /去除重复后的职位有哪些/
select count(distinct job) from emp; /有几种职位/

 

2.9 查询帮助
? contents 总目录

 

2.10 大小写切换
lower 函数把字符变成小写
upper 函数把字符变成大写

分组语法
group by 后的列取值相同的会被分为一组
select ... from 表 where ... group by 列1,列2... having 分组条件 order by ... limit ...

分组后 select,order by 的限制

  1. select,order by 中的列必须和group by中的列一样
  2. 其它没有包含在 group by语句中的列,必须和组函数一起用

执行从先到后
where 进行一遍条件过滤 , 再执行 group by 分组, 再执行 having中的条件, 再执行select, 再执行order by, 执行limit

语法顺序
select ... from ... where ... group by ... having ... order by ... limit;

列别名问题
语法: select 列名 别名 ...
语法2: select 列名 as 别名 ...

表别名问题
语法 : select ... from 表 别名
select e.* from emp e;

多列分组

select deptno,job, count(*) from emp group by deptno,job; 
/*按deptno和job这两列取值都相同的分为一组*/

 


update

对已有的数据进行更新

update emp set sal=sal+100;//对该列的所有sal增加100

 

//在empno=7369的行上更改sal和job的值
update emp set sal=9000,job='manager' where empno=7369;

注意:主键列主要用于查询条件,一般不会更新

 


delete

delete from 表; 全部删除
delete from 表 where 条件; 删除符合条件的记录
//drop是删除表连同里面的数据
注意

delete from dept where deptno=40;
//如果deptno里不存在40,也会删除成功,只是显示0条被更改

主键所在表可以称为主表,而外界所在表称为从表
主表中删除的记录,如果被从表引用,那么会删除失败,违反外键约束(外键约束默认行为)。

外键约束还有一种行为,主表记录删除,把从表中与之关联的记录一块删除(级联删除)
以员工和部门为例:foreign key(deptno) references dept(deptno) on delete cascade
例如: 删除10号部门,不仅会删除10号部门,而且会被从表(emp)中的10部门下所有员工也一块删除

 

 

数据的导入与导出

导入数据

  1. 在mysql中
    mysql > source 路径\sql文件的名称;
  2. 在cmd窗口运行
    mysql -uroot -p test3 < 路径\sql文件的名称

导出数据
在cmd窗口运行
mysqldump -uroot -p test3 > a.sql //起文件名

 

 

mysql 8.0 的安装

      1)解压mysql文件,打开管理员命令窗口 输入  " mysqld --initialize --console ";

      2)  得到一个临时密码,将其复制;

      3)执行 “ mysqld  -install ” 安装mysql;

      4)  执行 " net start mysql ",启动mysql服务;

      5)输入“ mysql -u root -p ” 后,输入临时密码;

      6) 登录后进行修改密码 “ alter user ‘root’@'localhost' identified by ‘新密码’ ” 即修改密码成功

      7) quit 退出mysql

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随与博主沟通,第一间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值