MYSQL基础语法

时间:2024-04-07 18:27:52

数据的存储方式

  1. 数据保存在内存

    int[] arr = new int[]{1, 2, 3, 4};
    ArrayList<Integer>list = new ArrayList<Integer>();
    list.add(1);
    list.add(2);
    

    new出来的对象存储在堆中.堆是内存中的一小块空间

    优点:内存速度快
    缺点:断电/程序退出,数据就清除了.内存价格贵

  2. 数据保存在普通文件
    优点:永久保存
    缺点:查找,增加,修改,删除数据比较麻烦,效率低

  3. 数据保存在数据库
    优点:永久保存,通过SQL语句比较方便的操作数据库

数据库的优点

​ 数据库是按照特定的格式将数据存储在文件中,通过SQL语句可以方便的对大量数据进行增、删、改、查操作,数据库是对大量的信息进行管理的高效的解决方案。

常见数据库

MYSQL基础语法
Oracle:收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL。
MYSQL:开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费。
DB2 :IBM公司的数据库产品,收费的。常应用在银行系统中.
SQLServer:MicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。
SyBase:已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。
SQLite: 嵌入式的小型数据库,应用在手机端。

常用数据库MYSQLOracle
在web应用中,使用的最多的就是MySQL数据库,原因如下:

  1. 开源、免费

  2. 功能足够强大,足以应付web应用开发(最高支持千万级别的并发访问)

  3. SQL语句分类

  4. DDL(Data Definition Language)数据定义语言
    用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter等

  5. DML(Data Manipulation Language)数据操作语言
    用来对数据库中表的数据进行增删改。关键字:insert, delete, update等

  6. DQL(Data Query Language) 数据查询语言
    对数据库进行数据查询,关键字select。

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

    是用来设置或更改数据库用户或角色权限的语句,这个比较少用到。#### SQL通用语法

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

  9. 可使用空格和缩进来增强语句的可读性。

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

    SELECT * FROM student;
    
  11. 3种注释
    单行注释: – 注释内容
    多行注释: /* 注释 */

    # 注释内容(mysql特有的单行注释)#### 创建数据库

  12. 直接创建数据库

    CREATE DATABASE 数据库名;
    
  13. 判断是否存在并创建数据库

    CREATE DATABASE IF NOT EXISTS 数据库名;
    
  14. 创建数据库并指定字符集(编码表)

    CREATE DATABASE 数据库名 character set 字符集;
    
  15. 具体操作:

  • 直接创建数据库db1

    CREATE DATABASE db1;
    

    MYSQL基础语法

  • 判断是否存在并创建数据库db2

    CREATE DATABASE IF NOT EXISTS db2;
    

MYSQL基础语法

  • 创建数据库db3并指定字符集为gbk

    CREATE DATABASE db2 CHARACTER SET gbk;
    

MYSQL基础语法

查看数据库

  1. 查看所有的数据库
SHOW DATABASES;

查看某个数据库的定义信息

SHOW CREATE DATABASE 数据库名;

MYSQL基础语法

DDL修改和删除数据库

修改数据库字符集

ALTER 表示修改
ALTER DATABASE 数据库 default character set 新的字符集;

具体操作:

  • 将db3数据库的字符集改成utf8

    ALTER DATABASE db3 DEFAULT CHARACTER SET utf8;
    

MYSQL基础语法### 删除数据库

drop --表示删除数据库或表
DROP DATABASE 数据库名;

具体操作:

  • 删除db2数据库

    DROP DATABASE db2;
    

MYSQL基础语法

DDL使用数据库

讲解

  1. 查看正在使用的数据库

    select -- 查询
    SELECT DATABASE();
    
  2. 使用/切换数据库

    USE 数据库名;
    

具体操作:

  • 查看正在使用的数据库

    SELECT DATABASE();
    

MYSQL基础语法
使用db1数据库

USE db1;

MYSQL基础语法

小结

DDL语句操作 关键字
创建 create database 数据库名;
修改 alter database character set 字符集;
查看 show databases;
删除 drop database 数据库名;

DDL创建表

讲解

前提先使用某个数据库(db1)

创建表

CREATE TABLE 表名 (字段名1 字段类型1, 字段名2 字段类型2...);

建议写成如下格式:

CREATE TABLE 表名 (
    字段名1 字段类型1, 
    字段名2 字段类型2
);

关键字说明:

CREATE -- 表示创建
TABLE -- 表示表

MySQL数据类型

MySQL中的我们常使用的数据类型如下:
MYSQL基础语法

详细的数据类型如下(不建议详细阅读!)

MYSQL基础语法

具体操作:

创建student表包含id,name,birthday字段

CREATE TABLE student (
      id INT,
      name VARCHAR(20),
      birthday DATE
);

小结

  1. 创建表语句:CREATE TABLE 表名 (字段名 类型, 字段名 字段类型…);
  2. 常用数据类型:int, double, varchar, date
  3. DDL查看表

讲解

  1. 查看某个数据库中的所有表

    SHOW TABLES;
    
  2. 查看表结构

    DESC 表名;
    
  3. 查看创建表的SQL语句

    SHOW CREATE TABLE 表名;
    

具体操作:

  • 查看mysql数据库中的所有表

    SHOW TABLES;
    

MYSQL基础语法
查看student的创建表SQL语句

SHOW CREATE TABLE student;

MYSQL基础语法

小结

  1. 查看某个数据库中的所有表:show tables;
  2. 查看表结构:desc 表名;
  3. 查看创建表的SQL语句:show create table 表名;

DDL删除表

讲解

快速创建一个表结构相同的表

CREATE TABLE 表名 LIKE 其他表;

具体操作:

  • 创建s1表,s1表结构和student表结构相同

    CREATE TABLE s1 LIKE student;
    

删除表

  1. 直接删除表

    DROP TABLE 表名;
    
  2. 判断表是否存在并删除表

    DROP TABLE IF EXISTS 表名;
    

具体操作:

  • 直接删除表s1表

    DROP TABLE s1;
    

MYSQL基础语法
判断表是否存在并删除s1表

DROP TABLE IF EXISTS s1;

MYSQL基础语法

小结

  1. 快速创建一个表结构相同的表:CREATE TABLE 表名 LIKE 其他表;
  2. 删除表语法:DROP TABLE 表名;

DDL修改表结构

讲解

修改表结构使用不是很频繁,只需要了解,等需要使用的时候再回来查即可

  1. 添加表列

    ALTER TABLE 表名 ADD 字段名 类型;
    

    具体操作:

    • 为学生表添加一个新的字段remark,类型为varchar(20)

      ALTER TABLE student ADD remark VARCHAR(20);
      

    MYSQL基础语法
    修改列类型

ALTER TABLE 表名 MODIFY 字段名 新的类型;

具体操作:

  • 将student表中的remark字段的改成varchar(100)

    ALTER TABLE student MODIFY remark VARCHAR(100);
    

MYSQL基础语法
修改列名

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型;

具体操作:

  • 将student表中的remark字段名改成intro,类型varchar(30)

    ALTER TABLE student CHANGE remark intro varchar(30);
    

MYSQL基础语法
删除列

ALTER TABLE 表名 DROP 字段名;

具体操作:

  • 删除student表中的字段intro

    ALTER TABLE student DROP intro;
    

MYSQL基础语法
修改表名

RENAME TABLE 表名 TO 新表名;

具体操作:

  • 将学生表student改名成student2,再删除student2表

     RENAME TABLE student TO student2;
     DROP TABLE student2;
    

MYSQL基础语法
修改字符集

ALTER TABLE 表名 character set 字符集;

具体操作:

  • 将sutden2表的编码修改成gbk

    ALTER TABLE student2 character set gbk;
    

MYSQL基础语法

小结

  1. 所有修改表前面的语法都是相同的?ALTER TABLE 表名
  2. 添加一列:add 字段名 类型
  3. 修改类型:modify 字段名 新的类型
  4. 修改字段名和类型:change 旧字段名 新字段名 类型
  5. 删除一列:drop 字段名

DML插入记录(重点)

目标

能够掌握往表中添加记录

讲解

创建student表包含id,name,birthday,sex,address字段。

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

插入全部字段

  • 所有的字段名都写出来

    INSERT -- 表示往表里插入记录
    INSERT INTO 表名 (字段名1, 字段名2...) VALUES (字段值1, 字段值2...);
    
  • 不写字段名

    INSERT INTO 表名 VALUES (字段值1, 字段值2...);
    

插入部分数据

INSERT INTO 表名 (字段名1, 字段名2...) VALUES (字段值1, 字段值2...);

没有添加数据的字段会使用NULL

  1. 关键字说明

    INSERT INTO 表名 – 表示往哪张表中添加数据
    (字段名1, 字段名2,)  --  要给哪些字段设置值
    VALUES (1,2,); -- 设置具体的值
    
  2. 具体操作:

    • 插入部分数据,往学生表中添加 id, name, age, sex数据
    INSERT INTO student (id, NAME, age, sex) VALUES (1, '张三', 20, '男');
    

MYSQL基础语法

  • 向表中插入所有字段

    • 所有的字段名都写出来
     INSERT INTO student (NAME, id, age, sex, address) VALUES ('李四', 2, 23, '女', '广州');
    

MYSQL基础语法

  • 不写字段名
INSERT INTO student VALUES (3, '王五', 18, '男', '北京');

MYSQL基础语法

注意

  • 值与字段必须对应,个数相同,类型相同
  • 值的数据大小必须在字段的长度范围内
  • 除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号)
  • 如果要插入空值,可以不写字段,或者插入null

小结

  1. 向表中添加一条完整记录:
    所有的字段都写出来: INSERT INTO 表名 (字段1, 字段2, …) VALUES (值1, 值2, …);
    不写字段名: INSERT INTO 表名 VALUES (值1, 值2, …);
  2. 向表中添加一条记录部分列:必须写字段名,否则不知道添哪个字段.
    INSERT INTO 表名 (字段1, 字段2, …) VALUES (值1, 值2, …);

DML更新表记录

目标

能够掌握更新表记录

讲解

  1. 不带条件修改数据

    UPDATE 表名 SET 字段名=新的值;
    
  2. 带条件修改数据

    UPDATE 表名 SET 字段名=新的值 WHERE 条件
    
  3. 关键字说明

    UPDATE: 表示修改记录 
    SET: 要改哪个字段
    WHERE: 设置条件
    
  4. 具体操作:

    • 不带条件修改数据,将所有的性别改成女

      UPDATE student SET sex='女';
      

MYSQL基础语法

  • 带条件修改数据,将id号为2的学生性别改成男

    UPDATE student SET sex='男' WHERE id=2;
    

MYSQL基础语法
一次修改多个列,把id为3的学生,年龄改成26岁,address改成北京

UPDATE student SET age=26, address='北京' WHERE id=3;

MYSQL基础语法

小结

  1. 不带条件的更新数据库记录:UPDATE TABLE SET 字段名=新的值;
  2. 带条件:UPDATE TABLE SET 字段名=新的值 WHERE 条件;

DML删除表记录

目标

能够掌握删除表记录

讲解

  1. 不带条件删除数据

    DELETE -- 删除记录
    DELETE FROM 表名;
    
  2. 带条件删除数据

    DELETE FROM 表名 WHERE 条件;
    
  3. truncate删除表记录

    TRUNCATE TABLE 表名;
    

    truncate和delete的区别:

    • delete是将表中的数据一条一条删除
    • truncate是将整个表摧毁,重新创建一个新的表,新的表结构和原来表结构一模一样

MYSQL基础语法
具体操作:

  • 带条件删除数据,删除id为3的记录

    DELETE FROM student WHERE id=3;
    

MYSQL基础语法
不带条件删除数据,删除表中的所有数据

DELETE FROM student;

MYSQL基础语法

小结

  1. 指定条件删除:DELETE FROM 表名 WHERE 条件;
  2. 没有条件删除所有的记录:DELETE FROM 表名;
  3. 删除表结构再创建表:TRUNCATE TABLE 表名;

DQL没有条件的简单查询

目标

能够掌握简单查询

讲解

注意:查询不会对数据库中的数据进行修改,只是一种显示数据的方式。

查询表中所有列数据

  1. 写出查询每列的名称
SELECT -- 表示查询
SELECT 字段名1, 字段名2, ... FROM 表名;

具体操作:

SELECT id, NAME ,age, sex, address FROM student;

MYSQL基础语法
使用*表示所有列

SELECT * FROM 表名;

具体操作:

SELECT * FROM student;

MYSQL基础语法

查询表中指定列数据

查询指定列的数据,多个列之间以逗号分隔

SELECT 字段名1, 字段名2 FROM 表名;

具体操作:
查询student表中的name 和 age 列

SELECT NAME, age FROM student;

MYSQL基础语法

别名查询

  1. 查询时给列、表指定别名需要使用AS关键字

  2. 使用别名的好处是方便观看和处理查询到的数据
    SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名;
    SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名 AS 表别名;
    注意:

    查询给表取别名目前还看不到效果,需要到多表查询的时候才能体现出好处
    AS关键字可以省略

  3. 具体操作:

    • 查询sudent表中name 和 age 列,name列的别名为”姓名”,age列的别名为”年龄”
    SELECT NAME AS 姓名, age AS 年龄 FROM student;
    

MYSQL基础语法

清除重复值

  1. 查询指定列并且结果不出现重复数据

    SELECT DISTINCT 字段名 FROM 表名;
    
  2. 具体操作:

    • 查询address列并且结果不出现重复的address
    SELECT DISTINCT address 城市 FROM student;
    

MYSQL基础语法

查询结果参与运算

  1. 某列数据和固定值运算

    SELECT 列名1 FROM 表名;
    SELECT 列名1 + 固定值 FROM 表名;
    
  2. 某列数据和其他列数据参与运算

    SELECT 列名1 + 列名2 FROM 表名;
    

    注意: 参与运算的必须是数值类型

  3. 需求:

    • 添加数学,英语成绩列,给每条记录添加对应的数学和英语成绩
    • 查询的时候将数学和英语的成绩相加
  4. 实现:

  • 修改student表结构,添加数学和英语成绩列

    ALTER TABLE student ADD math INT;
    ALTER TABLE student ADD english INT;
    
  • 给每条记录添加对应的数学和英语成绩
    MYSQL基础语法
    查询math + english的和

SELECT math + english FROM student;

MYSQL基础语法
查询math + english的和使用别名”总成绩”

SELECT math + english 总成绩 FROM student;

MYSQL基础语法

  • 查询姓名、年龄,将每个人的数学增加10分

    SELECT name, math + 10 FROM student;
    

小结

  1. 简单查询格式:SELECT 字段名 FROM 表名;
  2. 定义别名:SELECT 字段名 AS 别名 FROM 表名;
  3. 去除重复行:SELECT DISTINCT 字段名 FROM 表名;
  4. 数值列,可以进行计算,不会影响表中数据
DML语句操作 关键字
添加 INSERT INTO 表名 (字段名…) VALUES (值…);
修改 UPDATE 表名 SET 字段名=新的值 WHERE 条件;
删除 DELETE FROM 表名 WHERE 条件;
查询 SELETE 字段名 FROM 表名;

蠕虫复制

目标

了解蠕虫复制

讲解

什么是蠕虫复制:在已有的数据基础之上,将原来的数据进行复制,插入到对应的表中
语法格式:

INSERT INTO 表名1 SELECT * FROM 表名2;

作用:将表名2中的数据复制到表名1

具体操作:

  • 创建student2表,student2结构和student表结构一样
CREATE TABLE student2 LIKE student;
  • 将student表中的数据添加到student2表中
INSERT INTO student2 SELECT * FROM student;

注意:如果只想复制student表中name,age字段数据到student2表中使用如下格式
INSERT INTO student2(NAME, age) SELECT NAME, age FROM student;
MYSQL基础语法