MySql

SQL(数据库)Structure Query Language

1.定义

1.什么是数据库

存放数据的仓库,数据的集合

2.数据库管理系统

数据管理软件JDBC

3.常见的数据库管理系统

Mysql、Orscle、Sql、sever等·····

4.什么是SQL

SQK是用于访问和处理数据库的标准的计算机语言

5.什么是Mysql?

MySQL是数据库管理系统

2.登录Mysql数据库

2.1启动Mysql

2.2Dos窗口登录

2.3第三软件软件登录(Navicat)

3.结构化查询语句SQL

结构化查询语句的种类有哪些?

DDL(数据定义)

CREAT,DROP,ALTER

DML(数据操作)

INSERT,UPDATE,DELETE

DQL(数据查询)

SELECT

DCL(数据控制)

GRANT,COMMIT,ROLLBACK

4.DDL实战

4.1数据库CRUD实战

4.1.1Navicat之DDL实战

1.创建连接

2.创建数据库

3.查看数据库

4.使用数据库

5.删除数据库

4.1.2Dos窗口之DDL实战

1.创建数据库

CREATE DATABASE 数据库名;

2.查看数据库

show databases;

3.使用数据库

USE 数据库名:

4.删除数据库

DROP DATABASE 数据库名;

4.2数据库CRUD实战

4.2.1Navicat之DDL实战

1.创建表

2.查看表

3.删除表

4.修改表

5.复制表

4.2.2Dos窗口之DDL实战

4.2.2.1创建表

CREATE TABLE [IF NOT EXISIS] 表名(
    字段1 数据类型 【字段属性|约束】【索引】【注释】,
    ·····
    字段n 数据类型 【字段属性|约束】【索引】【注释】
)【表类型】【表字符集】【注释】;

    create table db_jc3(
    id int(32)  auto_increment primary key,
    name varchar(32)
    );

4.2.2.2查看表

查看表是否存在
USE 数据库名;
SHOW tsbles;

查看表定义
USE 数据库名;
DESC '表';

4.2.2.3删除表

DEOP TABLE [IF EXISTS] 表名;

USE 数据库;
DROP TABLE IF EXISTS 'student';

4.2.2.4修改表

#修改表名
ALTER TABLE 旧表名 RENAME [TO] 新表名;
#添加字段
ALTER TABLE 表名 ADD 字段名 数据类型 【属性】;
#修改字段
ALTER TABLE 表名 CHANGE 原字段名 新字段名 数据类型 【属性】;
#删除字段
ALTER TABLE 表名 DROP 字段名;
===========================


4.2.2.5复制表

复制表(结构加数据)
create table t_user3 as select * from t_user;
复制表中某些属性作为新表的属性
create table t_user4 as select name from t_user;
复制表的结构,不复制数据
create table t_user6 as select * from t_user where 1!=1;

4.3数据CRUD实战

4.3.1Navicat之DML实战

1.添加数据

2.删除数据

3.修改数据

4.查询数据

4.3.2Dos窗口之DML实战

4.3.2.1增加数据

insert into db_jc3(name) values('ccc');

4.3.2.2删除数据

delete from db_jc3 where id=6;

4.3.2.3修改数据

update db_jc3 set name='marong,zaima' where id=5;

4.3.2.4查询数据

查询所有
select * from 表名

通过id查询一条记录
select * from db_jc3 where id=4;

模糊查询name得到记录集
select * from db_jc3 where name like CONCAT('%','m','%');

查找某一字段所有数据
select (name) from student;

升序和降序

select 字段名 as '  ',字段名 as ' ' from 表 order by ( 字段名) desc;

order by (字段名)

order by (字段名) desc;

order by (字段名) asc;

5、加主外键

1.定义

能唯一的表示表中的每一行数据称为主键

2,作用

表示数据库表中数据的唯一性、完整性

用于和其他表之间建立外键关联的关系,从而实现对关联表的控制操作

3.主键设计原则

1.主键的设置对用户毫无意义

2.主键设置应该是单列的,为了提高查询和和连接的效率

3.主键永远不要去更新它

4.主键不应该包括动态变化的数据,例:时间戳、时间列等

5.主键通常要设置自增长,通常由计算机自动来完成

4.主键选取策略

通常数据库建表时一个表至多能设置一个主键

自动增长型字段

手动增长型字段

Uniqueldentifier

COMB类型

主从表

主表

在数据库中建立的表格即:table,其中存在主键(primary key)存在主键用于和其它表相关联,并且做为主表中唯一性标识

从表

以主表的主键(primary key)值为外键(Foreign) Key的表,可以通过外键和主表进行关联查询,从表和主表通过外键进行关联查询。

1添加数据顺序:先添加主表数据,再添加从表数据

2删除数据顺序:先删除从表数据,再删除主表数据

外键

1、外键

外键就是通过表中一个键将两个表连接起来的键

2、外键作用

1、保证数据的完整性和一致性
主要目的是控制存储在外键表中的数据。
2、支持关联查询。
3、FOREING KEY约束用于防止会破坏表之间链接的操作

3.阻止执行

1、从表插入一条数据时,若外键值不是主表的主键值时,将阻止插入数据
2、从表修改外键值时,其值不是主表的主键值则阻止修改
3、主表删除某一行时,其主键值在从表里存在存在则将阻止删除(若想删除,必须要现删除从表的关系行)
主表修改主键值时,旧值在从表里存在,则将阻止修改(若想修改,必须要现删除从表的关联)。

4、级联执行

主表删除、修改某一行数据,则从表数据将被一起删、修改

总结:结合实际情况来看,数据库设计时尽量不要设计太多外键关系;因为在后期的数据库维护起来比较麻烦,出现各种关联关系的表,耦合度比较高,因而个人不建议,设置太多外键关联。(可通过编写方法,实现数据之间的逻辑业务处理)

6、DQL专题

1、语法

2、实战案例

1.别名as

2.查询空行is null

3.order by 排序

4.limit分页

5.in关键字

1、语法顺序

SELECT * 
FROM table_name
    [ WHERE ...]    #指定结果需满足的条件
    [ GROUP BY ...] #指定结果按照哪几个字段来分组
    [ HAVING ...]    #过滤分组的记录必须满足的次要条件
    [ ORDER BY... ]    #指定查询记录按一个或者多个条件排序
    [ LIMIT ]    #指定查询的记录从哪条至哪条

2、常用函数

1、聚合函数

AVG() 返回某字段的平均值
COUNT() 返回某字段的行数
MAX() 返回某字段的最大值
MIN() 返回某字段的最小值
SUM() 返回某字段的和

2、字符串函数

CONCAT(str1,str...strn) 字符串连接
SELECT CONCAT('My','S','QL');

INSERT(str,pos,len,newstr) 字符串替换
SELECT INSERT('这是SQL Server数据库',3,10,'MySQL');

LOWER(str) 将字符串转为小写
SELECT LOWER('MySQL');

UPPER(str) 将字符串转为大写
SELECT UPPER('MySQL');

SUBSTRING(str,num,len) 字符串截取
SELECT SUBSTRING('javaMySQLOracle',5,5);

3、时间日期函数

CURDATE()
获取当前日期 SELECT CURDATE();
CURTIME()
获取当前时间 SELECT CURTIME();
NOW()
获取当前日期和时间 SELECT CURNOW();

WEEK(DATE())
返回日期date为一年中的第几周 SELECT WEEK(NOW());

YEAR(DATE)
返回日期date的年份 SELECT YEAR(NOW());

HOUR(TIME)
返回时间time的小时值 SELECT HOUR(NOW());

MINUTE(TIME())
返回时间time的分钟值 SELECT MINUTE(NOW());


4、数学函数

CEIL 返回大于或者等于数值x的最小整数
SELECT CEIL(2.3)
返回:3

FLOOR(X) 返回小于或等于数值x的最大整数
SELECT FLOOR(2.3)
返回:2

3、多表关联查询

1、内连接inner join

SELECT S.studentName,R.subjectNo,R.studentResult
FROM student AS S
INNER JOIN result AS R ON (S.studentNo =R.studentNo);

三表查询加条件

select s.studentid,s.name,sc.score from student s 
left join class c 
on c.studentid = s.studentid
left join score sc
on s.studentid = sc.studentid
where c.classname ='kj10';

2、左连接left join

左外连接:
SELECT S.studentName,R.subjectNo,R.studentResult
FROM student AS S
LEFT JOIN result AS R
ON S.studentNo=R.studentNo;

3、右连接right join

右外连接:
SELECT S.studentName,R.subjectNo,R.studentResult
FROM student AS S
RIGHT JOIN result AS R
ON s.studentNo =R.studentNo;

4、自连接

需求:
把category表看做两张一模一样的表,
然后将这两张表连接查询(自连接)
========================
自连接;
select a.categoryId,a.categoryName as '父栏目',
b.categoryName as '子栏目'
from category as a ,category as b
where a.categoryId = b.pid order by a.categoryId;

自增字段

某个字段变自增字段

alter table 表名 change 字段名 字段名 数据类型 auto_increment;

主键

某个字段变主键

alter table 表名 add constraint 字段名 primary key (字段名);

数据库多表查询

三层并列

select c.roleName from t_user as a,t_u_r as b,t_role as c
where a.id=b.u_id and b.r_id=c.id and a.id=3;

左连接加条件

select c.roleName from t_user a
left join t_u_r b
on a.id=b.u_id
left join t_role c
on b.r_id=c.id
where a.id=3;
标记: 可连带脏、废数据一起显现出来

三层嵌套

select roleName from t_role
where id=(select r_id from t_u_r where u_id where u_id = (select id from t_user where id=3));

用户名和密码

select a.u_name as '用户名',a.u_pwd as '密码', e.perName as '权限名' from t_user a 
left join t_u_r b on a.id =b.u_id
left join t_role c on b.r_id = c.id


数据库层级查询if-else-if

select a.sno,a.cno,b.rank from score a join grade b where a.degree between b.low and b.upp;

select sno,cno,rank from score,grade where degree between low and up;

数据库,命令大全

八、数据的操作

show databases;

use testdb;

show tables;

create table users(
    id int auto_increment
    username
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值