java mysql ddl_JavaWeb - 数据库基础 - DDL、DML、DQL、约束

这篇博客介绍了MySQL数据库的基础操作,包括服务启动、登录退出、目录结构。重点讲解了SQL的四大类别:DDL(数据定义语言)、DML(数据操作语言)、DQL(数据查询语言),并详细阐述了如何使用DDL进行数据库和表的创建、查询、修改和删除操作,以及DML中的数据增删改操作。此外,还提到了SQL查询的基本语法和约束的概念。
摘要由CSDN通过智能技术生成

1.MySQL服务启动和关闭

*命令台下输入services.msc

*或者以管理员身份启动cmd,   输入 net start mysql

2.MySQL登录和退出

* mysql -uroot -p 加密码

访问其他用户的mysql: cmd下输入 : mysql -h+IP地址  -uroot -p+连接谁,就敲谁的密码

或者mysql --host = ip地址 --user = root --password = 连接目标密码

退出:quit或exit

3.MySQL目录结构

1.MySQL安装目录

*配置文件 my.ini

2.MySQL数据目录

*数据库:文件夹

*表:文件

*数据

4.SQL

1.什么是SQL

Structured Query Language:结构化查询语言

其实就是定义了操作所有关系型数据库的规则

5.SQL通用语法

*SQL语句可以单行或多行书写,以分号结尾

*可使用空格和TAP键来增强语句的可读性

*MySQL数据库的SQL语句不区分大小写,关键字建议使用大写

*三种注释

*单行注释 -- 注释内容(必须有空格) 或 # 注释内容(MySQL特有)

*多行注释

6.SQL分类

1) DDL(Data Definition Language)数据定义语言

用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等

2) DML(Data Manipulation

Language)数据操作语言

用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等

3) DQL(Data Query Language)数据查询语言

用来查询数据库中表的记录(数据)。关键字:select,

where 等

4) DCL(Data Control Language)数据控制语言(了解)

用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等

5e57e4092c1a0ff9a1702eb59b626377.png

7.DDL 操作数据库、表

(1)操作数据库:CRUD

*C(Create):创建

# - - > 创建db3数据库,判断是否存在,并指定字符集为gbk

create database if not exists db3 character set gbk;

*R(Retrive):查询

#查询所有数据库的名称:show databases;

#查看某个数据库的字符集(查看某个数据库的创建语句):show create database 数据库名称;

*U(Update):修改

#修改数据库的字符集: alter database 数据库名称 character set 字符集名称;

*D(Delete):删除

#删除数据库 drop database 数据库名称;

drop databases if exist db3;

*使用数据库

#查询当前正在使用的数据库名称:select database();

#使用数据库:use 数据库名称;

(2)操作表

*C(Create):创建

#创建表:create table 表名称(

列名1   数据类型1,

列名2   数据类型1,

. . . . .

列名n 数据类型n

);

#注意最后一列不需要加逗号

#复制表:create table 表名 like 被复制的表名;

#数据类型:

1. int : 整数类型    *  age int,

2.double : 小数类型  * score double(5,2),    #第一个参数表示最大有几位,第二个参数为小数点后面保留几位,此时最大值为999.99

3.data : 日期,只包含年月日,yyyy-MM-dd

4.datatime:日期,包含年月日,时分秒 yyyy-MM-dd HH:mm:ss

5.timestamp:时间戳类型  包含年月日,时分秒 yyyy-MM-dd HH:mm:ss

*如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间来自动赋值

6.varchar:字符串: name varchar(20); 表示姓名最大20个字符

#案例:创建学生表

create table student(

id  int,

name varchar(32),

age int,

score double(4,1),

birthday data,

create_time timestamp

);

*R(Retrive):查询

#查询某个数据库中所有的表名称:show tables;

#查看表结构:desc 表名;

*U(Update):修改

#修改表名:alter table 表名 rename to 新表名

#修改表的字符集:alter table 表名 character set 字符集名称

#添加一列:alter table 表名 add 列名 数据类型;

#修改列名称 类型:1. alter table 表名 change 列名 新列名  数据类型;   2. alter table 表名 modify 列名  新数据类型;

#删除列:alter table 表名 drop 列名;

*D(Delete):删除

# drop table if exists 表名;

8.DML:增删改表中数据

(1)添加数据:

*insert into 表名(列名1,列名2...列名n) values (值1,值2,...值n);

注意:

*若表名后不定义列名,则默认给所有列添加值

*除了数字类型,其他类型需要使用引号引起来(单双都可以)

(2)删除数据

* delect from 表名 【where 条件】

注意:

*如果不加条件,则删除表中所有数据

*如果要删除所有记录:

(1)delete form 表名; - - 不推荐使用,效率低,有多少记录,则执行多少次删除操作

(2)truncate table 表名; - - 先删除表,再创建一张一样的空表,推荐,效率高

(3)修改数据

*update 表名 set 列名1 = 值1 , 列名2 = 值2,... ,【where 条件】

注意:

*如果不加任何条件,则会将表中所有记录全部修改

9.DQL:查询表中的记录

查询表中的记录:select * from 表名

语法:

select  字段列表  from 表名列表  where 条件列表  group by  分组字段  having 分组之后的条件 order by 排序  limit 分页限定

097d09a04e135f9183e94e7a6e0b005e.png

基础查询:

(1)多个字段的查询 :select 字段名1,字段名2 from 表名称;

SELECT  NAME,   age,  sex FROM  student3;

*注意:如果查询所有字段,则可以使用*替代

(2)去除重复

SELECT DISTINCT address FROM student3;

(3)计算列:一般可以使用四则运算计算一些列的值(一般只会进行数值的运算)

计算math和english的和 :SELECT NAME,math,english,math + english FROM student3;

如果有null参与的运算,计算结果都为null 解决:SELECT NAME,math,english,math + IFNULL(english,0) FROM student3;

ifnull(表达式1,表达式2)  表达式1:那个字段需要判断是否为null  表达式2:null字段的替换值

(4)起别名:as 或省略 空格

SELECT NAME,math,english,math + IFNULL(english,0) AS 总分 FROM student3;

条件查询:

1.where 子句后跟条件

2.运算符

* >、=、=、<>不等于 或者 !=

*BETWEEN...AND

*IN(集合)

*LIKE '张%'  模糊查询

*占位符 _ : 单个任意字符  % : 多个任意字符

* is null

* and 或 &&

* or 或 ||

*not 或 !

查询年龄大于20岁的人:SELECT * FROM student3 WHERE age >= 20;

查询年龄为18,22,35的人:SELECT * FROM student3 WHERE age in (18,22,35) ;

查询英语程序为null的人:SELECT * FROM student3 WHERE english is null;

查询班里姓马的人:select * from student3 where name like '马%';

查询姓名中第二个字时化的人:SELECT * FROM student3 WHERE NAME LIKE '_化%';

查询姓名是三个字的人:SELECT * FROM student3 WHERE NAME LIKE '___';

查询姓名中包含马的人:SELECT * FROM student3 WHERE NAME LIKE '%马%' ;

10.DQL排序查询、聚合函数、分组查询、分页查询

(1)排序查询 语法:order by 排序字段1 排序方式1,排序字段2 排序方式2

*排序方式:

*ASC:升序,默认的

*DESC:降序

按照数学成绩降序排名,如果一样,则按英语成绩降序排名:SELECT * FROM student3 ORDER BY  math DESC, english DESC;

(2)聚合函数:将一列数据作为一个整体,进行纵向的计算

1.count:计算个数

一般选择非空的列:主键

count(*) :只要一行中有一个值不会空,则算一个

SELECT COUNT(IFNULL(english,0)) FROM student3;

2.max:计算最大值

3.min:计算最小值

4.sum:求和

5.avg:计算平均值

*注意:聚合函数的计算会排除null值

解决方案:选择不包含空的列或者使用IFNULL函数

(3)分组查询:group by 分组字段

*分组之后查询的字段:分组字段、聚合函数

如:查询男女之间,数学的平均分,以及男女个数:

SELECT sex,AVG(math),COUNT(id) FROM student3 GROUP BY sex;

*where 和 having 的区别:

*where在分组之前进行限定,如果不满足这个条件则不进行分组,having是在分组之后进行限定,如果不满足结果则不会被查询出来

*where之后不可以跟聚合函数,having之后可以跟聚合函数

如:查询男女之间,数学的平均分,以及男女个数,分数低于70分的不参与分组

SELECT sex,AVG(math),COUNT(id) FROM student3 WHERE math > 70 GROUP BY sex;

如:查询男女之间,数学的平均分,以及男女个数,分数低于70分的不参与分组,分组之后,人数要大于两个人

SELECT sex,AVG(math),COUNT(id) 此处可以加别名 FROM student3 WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;

(4)分页查询:limit  开始索引,每页查询的条数

--每页显示三条记录

SELECT * FROM student3 LIMIT 0,3; -- 第一页

SELECT * FROM student3 LIMIT 3,3; -- 第二页

SELECT * FROM student3 LIMIT 6,3; -- 第三页

*公式:开始的索引 = (当前的页码 - 1)* 每页显示的条数

*分页的操作是一个'方言',在不同的数据库是不一样的

11.约束

概念:对表中的数据进行限定,保证数据的正确性、有效性和完整性。

分类:

1.主键约束:primary key

2.非空约束: not null

3.唯一约束:unique

4.外键约束:foreign key

*非空约束:not null

1.创建表时添加非空约束

CREATE TABLE stu(

id INT,

NAME VARCHAR(20) NOT NULL -- name 为非空

);

2.创建表后,添加非空约束

ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;

3.删除非空约束

ALTER TABLE stu MODIFY NAME VARCHAR(20) ;

*唯一约束:unique,某一列的值不能重复,唯一约束可以有null值,但是也只能由一个null

1.创建表时添加唯一约束

CREATE TABLE stu(

id INT,

phone_number VARCHAR(20) UNIQUE -- 手机号

);

2.删除唯一约束

ALTER TABLE stu DROP INDEX phone_number ; 与删除非空约束不同

3.创建表后添加唯一约束

ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;

*主键约束:primary key  非空且唯一  一张表只能有一个字段为主键

1.创建表时,添加主键约束

CREATE TABLE stu_info(

id INT PRIMARY KEY ,

NAME VARCHAR(20)

);

2.删除主键

ALTER TABLE stu_info DROP PRIMARY KEY;

3.创建表后,添加主键约束

ALTER TABLE stu_info MODIFY id INT PRIMARY KEY;

4.自动增长:如果某一列是数值类型的,使用auto——increment 可以来完成值的自动增长

创建表时,添加主键约束,并且完成自动增长

CREATE TABLE stu_info(

id INT PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(20)

);

删除自动增长:ALTER TABLE stu3 MODIFY id INT;

创建表后,添加自动增长:ALTER TABLE stu3 MODIFY id INT AUTO_INCREMENT;

*外键约束:让表与表产生关系,从而保证数据的正确性

1.创建表时,可以添加外键

CREATE TABLE 表名(

......

外键列

constraint  外键名称 foreign key  (外键列名称)  references 主表名称(主表列名称)

);

2.删除外键

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

3.在创建表后,添加外键

ALTER TABLE 表名称 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);

ALTER TABLE employee ADD CONSTRAINT emp_dep_fk FOREIGN KEY (dep_id) REFERENCES department(id);

4.级联操作,设置级联更新,设置级联删除

ALTER TABLE 表名称 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称)ON UPDATE CASCADE DELETE CASCADE;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值