java_day14

MySQL数据库

数据库是按照特定的格式将数据存储在⽂件中,通过SQL语句可以⽅便的对⼤量数据进⾏增、删、改、
查操作,数据库是对⼤量的信息进⾏管理的⾼效的解决⽅案

SQL语句

结构化查询语⾔(Structured Query Language)简称SQL,SQL语句就是对数据库进⾏操作的⼀种语

SQL语句分类

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

⽤来定义数据库对象:数据库,表,列等。关键
字:create, drop,alter等
2. DML(Data Manipulation Language)数据操作语⾔

⽤来对数据库中表的数据进⾏增删改。关键
字:insert, delete, update等
3. DCL(Data Control Language)数据控制语⾔
⽤来定义数据库的访问权限和安全级别,及创建⽤户。关键字:GRANT, REVOKE等
4. DQL(Data Query Language) 数据查询语⾔
DQL语⾔并不是属于MYSQL官⽅的分类,但是对数据库的操作最多就是查询,所以
我们的程序员把查询语句的语句称作为DQ

 SQL通⽤语法

1. SQL语句可以单⾏或多⾏书写,以分号结尾。
2. 可使⽤空格和缩进来增强语句的可读性。
3. MySQL数据库的SQL语句不区分⼤⼩写,关键字建议使⽤⼤写。
4. 3种注释 单⾏注释: -- 注释内容 或 # 注释内容(mysql特有) 多⾏注释: /* 注释 */

 DDL操作数据库

创建数据库

关键字:CREATE,ALTER,SHOW,DROP

-- 直接创建数据库
CREATE DATABASE 数据库名;

-- 判断是否存在并创建数据库
CREATE DATABASE IF NOT EXISTS db1;

-- 创建数据库并指定字符集
CREATE DATABASE db3 DEFAULT CHARACTER SET gbk;

-- 查看所有的数据库
SHOW DATABASES

-- 修改数据库字符集
ALTER DATABASE db3 DEFAULT CHARACTER SET uft8;

-- 删除数据库
DROP DATABASE db1;

-- 查看某个数据库的自定义信息
SHOW CREATE DATABASE db3;

-- 查看正在使用的数据库
SELECT DATABASE();

-- 切换数据库
USE db3;

DDL创建表

CREATE TABLE 表名(
    字段名1 字段类型1
    字段名2 字段类型2
);
--创--创建student表包含id,NAME,birthday学习
CREATE TABLE student(
    id INT,
    NAME VARCHAR(10),
    birthday DATE

);

-- 查看某个数据库的表
SHOW TABLES;

-- 查看表结构
DESC student;

-- 查看创建表的SQL语句
SHOW CREATE TABLE 表名;

-- ``重音符合/飘号,`student`表示字符串

DDL删除表

-- 快速创建一个表结构相同的表
CREATE TABLE 表名 LIKE 其他表;

-- 直接删除表
DROP TABLE S1;

-- 判断表是否存在并删除
DROP TABLE IF EXISTS S1;

-- 修改表结构
-- 1.所有的修改表结构的语句都是:ALTER TABLE 表名 XXX;
-- 2.添加表一列
ALTER TABLE student ADD remark VARCHAR(20);
-- 3.修改类型
ALTER TABLE 表名 MODIFY 字段名 新类型;
-- 4.修改字段名和类型
ALTER TABLE 表名 CHANGE 老字段名 新字段名 类型;
-- 5.删除一列
ALTER TABLE 表名 DROP 字段名;

-- 6.修改表的字符集
ALTER TABLE 表名 DEFAULT CHARACTER SET 新字符集;

-- 1.不带条件的修改数据
UPDATE 表名 SET 字段名=新值
-- 2.带条件修改数据
UPDATE student SET sex='' WHERE id=1;
-- 3.带条件修改多个数据
UPDATE student SET brethday='1995-03-23', address('北京') WHERE id=3;

 

 

DML(DML是对表中的数据进行增删改)

DML插入记录(增加)

CREATE TABLE student(
    id INT,
    name VARCHAR(20).
    birthday DATE,
    sex char(2).
    address varchar(50)
);

-- 添加数据
-- 除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号)
INSERT INTO 表名 (字段名1, 字段名2, 字段名3, ...) VALUES (值1, 值2, 值3, ...);   -- 字段名可以省略,要按照顺序填值
INSERT INTO 表名 VALUES (值1, 值2, 值3, ...);

-- 只需要指定要插入数据的字段  没有添加数据的字段会为Null
INSERT INTO 表名 (字段名1, 字段名2...) VALUES (字段值1, 字段值2);

DML更新表记录(修改)

-- 1.不带条件修改书籍
UPDATE 表名 SET 字段名=新值;
-- 例子:不带条件修改数据,将所有的性别改成女
UPDATE student SET sex=''; 

-- 2.带条件修改书籍
UPDATE 表名 SET 字段名=新值 WHERE 条件;
-- 例子:带条件修改数据,将id号为2的学生性别改成男
UPDATE student SET sex='' WHERE id=2; 

-- 例子:一次修改多个列,把id为3的学生,年龄改成26岁,address改成北京
UPDATE student SET age=26, address='北京' WHERE id=3;
DML删除表记录(删除)
-- 1.带条件删除数据
DELETE FROM 表名 WHERE 条件;
-- 例子:带条件删除数据,删除id为3的记录
DELETE FROM student WHERE id=3;


-- 2.不带条件删除数据
DELETE FROM 表名;
-- 例子:不带条件删除数据,删除表中的所有数据
DELETE FROM student

DQL没有条件的简单查询(查询)

-- 查询student表中所有字段
SELECT 字段名1, 字段名2 FROM 表名;
-- 例子:
SELECT id, NAMAE, age, sex, address FROM student;

SELECT * FROM student;  -- *代表所有列

-- 别名查询
SELECT 字段名1 AS 别名,字段名2 AS 别名...FROM 表名 AS 表名;
SELECT 字段名1 别名,字段名2 别名...FROM 表名 表名; -- AS关键字可以去掉

-- 清除重复值
SELECT DISTINCT 字段名 FROM 表名;
-- 例子:查询address列并且结果不出现重复的address
SELECT DISTINCT address 城市 FROM student;

查询结果参与运算

-- 1.某列数据和固定值运算
SELECT 字段名 +FROM 表名:

-- 2.某数据和其他列数据参与运算
SELECT 字段1 + 字段2 FROM 表名;  -- 注意:参与运算的必须是数值类型
-- 例子:修改student表结构,添加数学和英语成绩列
ALTER TABLE student ADD math INT;
ALTER TABLE student ADD english INT;
-- 查询math列 + english列的和
SELECT math + english FROM student;
-- 查询math + english的和使用别名”总成绩”
SELECT math + english 总成绩 FROM student;

DQL查询语句-条件查询

SELECT * FROM 表名 WHERE 条件;

-- 准备数据
CREATE TABLE student3 (
  id int,
  name varchar(20),
  age int,
  sex varchar(5),
  address varchar(100),
  math int,
  english int
);

INSERT INTO student3(id,NAME,age,sex,address,math,english) 
VALUES 
(1,'马云',55,'','杭州',66,78),
(2,'马化腾',45,'','深圳',98,87),
(3,'马景涛',55,'','香港',56,77),
(4,'柳岩',20,'','湖南',76,65),
(5,'柳青',20,'','湖南',86,NULL),
(6,'刘德华',57,'','香港',99,99),
(7,'马德',22,'','香港',99,99),
(8,'德玛西亚',18,'','南京',56,65);

比较运算符

`>`大于 
`<`小于
`<=`小于等于
`>=`大于等于
`=`等于
`<>`、`!=`不等于
-- 1.查询math分数大于80分的学生
SELECT * FROM student3 WHERE math>80;
-- 2.查询english分数小于或等于80分的学生
SELECT * FROM student3 WHERE english<=80;
-- 3.查询age等于20岁的学生
SELECT * FROM student3 WHERE age=20;
-- 4.查询age不等于20岁的学生
SELECT * FROM student3 WHERE age!=20;
SELECT * FROM student3 WHERE age<>20;

逻辑运算符

and(&&) 多个条件同时满足
or(||)多个条件其中一个满足
not(!)不满足
-- 1.查询age大于35且性别为男的学生(两个条件同时满足)
SELECT * FROM student3 WHERE age>35 AND sex='';
-- 2.查询age大于35或性别为男的学生(两个条件其中一个满足)
SELECT * FROM student3 WHERE age>35 OR sex='';
-- 3.查询id是1或3或5的学生
SELECT * FROM student3 WHERE id=3 OR id=5;

in关键字

SELECT * FROM 表名 WHERE 字段名 in (值1, 值2, 值3);
-- in`里面的每个数据都会作为一次条件,只要满足条件的就会显示

-- 1.查询id是1或3或5的学生
SELECT * FROM student3 WHERE id IN(1,3,5);
-- 2.查询id不是1或3或5的学生
LELECT * FROM student3 WHERE id NOT IN(1,3,5);

范围

-- 某个范围内的数据
SELECT * FROM 表名 WHERE 字段名 BETWEEN 值1 AND 值2;
-- 1.查询english成绩大于等于75,且小于等于90的学生    BETWEEN:在两者之间
SELECT * FROM student3 WHERE english>75 AND english<=90;
SELECT * FROM student3 WHERE english BETWEEN 75 AND 90;

DQL查询语句-排序

-- 通过`ORDER BY`子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序) 
SELECT * FROM 表名 WHERE 条件 ORDER BY 字段名 [AsC/DESC]

-- 1.查询所有数据,使用年龄降序排序
 SELECT * FROM student ORDER BY age DESC; --降序
 
-- 组合排序就是先按第一个字段进行排序,如果第一个字段相同,才按第二个字段进行排序,依次类推
SELECT * FROM 表名 WHERE 条件 ORDER BY 字段名 [ASC|DESC], 字段名 [ASC|DESC];
-- 1.查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩降序排序
SELECT * FROM student ORDER BY age DESC,math DESC;

 数据库的约束

对表中的数据进行进一步的限制,保证数据的正确性、有效性和完整性

PRIMARY KEY :主键约束

-- 每张表都应该有主键,并且每张表只能有一个主键
-- 作用是唯一的区分一条记录  例如id
-- 特点:主键必须包含唯一的值,主键不能包含NULL
-- 主键:PRIMARY KEY
-- 1.在创建表的时候给字段添加主键 
CREATE TABLE 表名(
    字段名1 字段类型1 PRIMARY KEY,  -- 这里是字段1作为主键
    字段名2 字段类型2
);

-- 例子:创建表学生表st5, 包含字段(id, name, age)将id做为主键
CREATE TABLE st5 (
    id INT PRIMARY KEY, -- id是主键
    NAME VARCHAR(20),
    age INT
);

-- 2.在已有表中添加主键
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
-- 例子
INSERT INTO st5 (id, NAME) VALUES (1, '唐伯虎');
INSERT INTO st5 (id, NAME) VALUES (2, '周文宾');

-- 3.删除主键
ALTER TABLE 表名 DROP PRIMARY KEY;
-- 例子:删除st5表的主键
ALTER TABLE st5 DROP PRIMARY KEY;

主键自动增长

-- 字段名 字段类型 PRIMARY KEY AUTO_INCREMENT
-- 例子:创建学生表st6, 包含字段(id, name, age)将id做为主键并自动增长
CREATE TABLE st6(
    id INT PRIMARY KEY AUTO_INCREMENT, -- 主键自增
    NAME VARCHAR(20),
    age INT     
);    -- 主键默认从1开始自动增长,删除后按删除前的主键+1

-- 修改自动增长的开始
ALTER TABLE st6 AUTO_INCREMENT = 10086;-- 添加1条数据删除后再次添加数据,按照删除前的值+1,也就是10087
-- DELETE和TRUNCATE的区别
-- 1.DELETE 只会删除数据,表还存在的
DELETE FROM st6;  
-- 2.TRUNCATE 表名;摧毁表,重新创建一张表结构一样的表
TRUNCATE st6;    

UNIQUE:唯一约束

让某个字段的值不能重复

CREATE TABLE 表名 (
    字段名 字段类型 UNIQUE,
    字段名 字段类型
);
-- 例子:创建学生表st7, 包含字段(id, name),name这一列设置唯一约束,不能出现同名的学生
CREATE TABLE st7(
    id INT,
    NAME VARCHAR(20) UNIQUE  -- 加UNIQUE
);

NOT NULL:非空约束

让这个字段的值不能为空

CREATE TABLE 表名 (
    字段名 字段类型 NOT NULL,
    字段名 字段类型
);
-- 例子:创建表学生表st8, 包含字段(id,name,gender)其中name不能为NULL
CREATE TABLE st7(
    id INT,
    NAME VARCHAR(20) UNIQUE NOT NULL, -- 让这个值不能为空
    gender CHAR(1)
);
-- 一个字段可以同时添加多个约束
-- 主键唯一,非空,普通的字段我们也可以添加唯一和非空,有区别吗?
-- 1.主键:一张表只能有一个,主键可以自动增长
-- 2.普通字段:可以可以字段非空唯一

DEFAULT:默认约束

CREATE TABLE 表名(
    字段名1 字段类型1 DEFAULT 值,-- 默认值  添加记录给了值就不会使用默认值
    字段名2 字段类型2
);
-- 创建一个学生表 st9,包含字段(id,name,address), 地址默认值是广州
CREATE TABLE st9 (
    id INT,
    NAME VARCHAR(20),
    address VARCHAR(50) DEFAULT '广州'
);

FOREIGN KEY:外键约束

一个表中的某个字段引用其他表的主键,这个字段称为外键

主表:主键所在的表

-- 新建表示增加外键约束
CREATE TABLE 表名(
    字段名 字段类型,
    字段名 字段类型,
    -- 添加外键
    CONSTRAINT 外键约束 FOREIGN KEY (外键字段名) REFERENCES 主表(主键字段名)
);
-- CONSTRAINT:表示约束
-- 外键约束名:给新增的外键约束取个名字
-- FOREIGN KEY:(外键字段名):指定哪个字段作为外键
-- REFERENCES:主表(主键名)指定引用哪张表的注解

-- 删除外键约束
ALTER TABLE 表名 DROP FOREIGN KEY 外键约束名;

-- 在以有表中加外键
ALTER TABLE 从表 ADD CONSTRAINT 外键约束名称 OREIGN KEY (外键字段名) REFERENCES 主表(主键字段名)

 

posted @ 2019-11-09 16:28  仟梦  阅读(151)  评论(0)    收藏  举报