• MySQL入门(SQL语句、约束)


    目录

    1、什么是数据库?

    2、数据库的特点

    3、数据库的分类

    4、MySQL的登录和退出

    4.1、MySQL的登录

    5、SQL语句

    5.1、什么是SQL?

    5.2、通用语法

    5.3、SQL语句的分类

    6、操作数据库——DDL语言

    7、操作表——DDL语言

    7.1、数据类型

    7.2、创建表

    7.3、查询表

    7.4、修改表

    7.4.1、添加字段

    7.4.2、修改列(字段)类型

    7.4.3、修改列(字段)名和类型

    7.4.4、删除指定列(字段)

    7.4.5、查看表的字符集 

    7.4.6、修改表字符集

    7.4.7、修改表名

    7.4.8、删除字段 

    7.5、删除表

    7.5.1、直接删除表

    7.5.2、如果表存在就删除

    8、约束

    8.1、主键约束(primary key)

    8.2、非空约束(not null)

    8.3、唯一约束(unique)

    8.4、外键约束(foreign key)

    8.5、检查约束(check)

    8.6、自增长(auto_increment)

    8.7、缺省约束 默认值(default)

    8.8、给表中字段添加约束

    8.8.1、给表中字段添加主键约束

    8.8.2、给表中字段添加非空约束

    8.8.3、给表中字段添加唯一约束

    8.8.4、给表中字段添加外键约束

    8.8.5、删除表中的约束

    9、数据操作DML

    9.1、添加数据(insert into)

    9.2、修改数据(update)

    9.3、删除数据(delete)

    10、数据查询DQL

    10.1、单表查询


    1、什么是数据库?

    数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作(CRUD)。

    2、数据库的特点

    1、持久化存储数据的。其实数据库就是一个文件系统 。
    2、方便存储和管理数据、存储数据有一定的格式、行和列的格式
    3、 使用了统一的方式操作数据库、使用图形界面的形式查看数据、使用sql语言进行查看或管理数据

    3、数据库的分类

    数据库分为关系型数据库和非关系型数据库,关系型数据库就是我们平常见到的二维表,就是典型的关系型数据库,非关系型数据库存放的数据没有什么联系,所以存储获取效率比较高,一般用于做缓存数据的Redis数据库就是这样的特点。

    如下图,就是数据库分类汇总 

    4、MySQL的登录和退出

    4.1、MySQL的登录

    本地登录

    mysql -u用户名  -p密码        显示登录(密码会被显示出来)

    mysql -u用户名  -p               隐式登录(不会显示密码  密码会被*替代 安全性高)

    远程连接(指定ip登录)

    mysql  -h主机地址   -u用户名  -p密码

    4.2、MySQL的退出

    三种方式:

    exit或quit,或者直接点击DOS窗口的×号。

    5、SQL语句

    5.1、什么是SQL?

    结构化查询语言(Structured Query Language)简称SQL,SQL语句就是对数据库进行操作的一种语言。 SQL是一套标准,所有的数据库厂商都实现了此标准;但是各自厂商在此标准上增加了特有的语句,这部分内容我们称为方言。

    5.2、通用语法

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

    1.   select * from stu;
    2.   select 
    3.       *
    4.   FROM
    5.       stu;

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

    3、MySQL 数据库的 SQL 语句不区分大小写(仅此于win系统),关键字建议使用大写,库名 表名 字段 别名 建议写小写,关键字建议大写: SHOW DATABASES CREATE。

    4、3种注释
        单行注释: -- 注释内容(这种方式是通用的) 或 # 注释内容(mysql 特有) 
        多行注释: /* 注释 */

    5.3、SQL语句的分类

    分类说明
    DDL(Data Definition Language)数据定义语言定义数据库对象:数据库,表,列等.关键字:create, drop,alter 等
    DML(Data Manipulation Language)数据操作语言(掌握)对数据库中表的数据进行增删改.关键字:insert, delete, update 等
    DQL(Data Query Language)数据查询语言 (掌握)用来查询数据库中表的记录(数据).关键字:select, where 等
    DCL(Data Control Language)数据控制语言(了解)用来定义数据库的访问权限和安全级别,及创建用户.关键字:GRANT,REVOKE 等
    TCL(Transaction Control Language) 事务控制语言用于控制数据库的事务操作,关键字; commit,savepoint,rollback等

    6、操作数据库——DDL语言

    创建数据库

    create database 数据库名;

    创建数据库,并指定字符集

    create database 数据库名 character set 字符集名;

    查询所有数据库名称

    show databases;

    查询某个数据库的字符集,查询某个数据库的创建语句及字符集

    show create database 数据库名;

    修改数据库的字符集

    alter  database 数据库名 character set 字符集名;

    删除数据库

    drop database 数据库名;

    查询当前正在使用的数据库名

    select database();

    使用数据库/进入数据库

    use 数据库名;

    7、操作表——DDL语言

    7.1、数据类型

    数据类型说明
    int整数类型,例如 : age
    double小数类型,例如 : score double(5,2) 111.11
    date日期,只包含年月日,yyyy-MM-dd
    datetime日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss
    timestamp时间戳类型,包含年月日时分秒 yyyy-MM-dd HH:mm:ss 如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值
    varchar可变字符 name varchar(20)
    char不可变字符 name varchar(20)

    varchar与char的长度区别

    1、varchar的可变是指长度可变,比如定义一个name varchar(20) 但是用户输入了一个"张三"只有两个长度,剩余的18个长度会被系统自动释放,varchar的长度也自动降为2个。

    2、char是固定长度,比如定义一个name char(20) 但是用户同样输入一个"张三" 剩余的18个长度不会被释放,而是用留白符补全,char的长度还是20。

    通过比较两者区别,可以得出:

    varchar可以自动释放多余空间,避免了存储空间的浪费,一般开发推荐使用varchar。

    char固定长度,但性能好,如果定义较大长度会造成储存空间浪费,一般会用于定义性别或者身份证号等固定长度的字段。

    7.2、创建表

    语法

    1. create table 表名(
    2. 字段名 数据类型,
    3. 字段名 数据类型,
    4. ....
    5. 字段名 数据类型
    6. );

    示例

    1. create table student(
    2. id int,
    3. name varchar(32),
    4. birthday date,
    5. money double(5,2)
    6. );

    注意事项:最后一个字段定义不用写逗号,其余每一行都要写逗号。

    7.3、查询表

    查询某个数据库中所有的表

    show tables;

     

    查询表结构

    desc 表名;

    7.4、修改表

    column可以省略不写。

    7.4.1、添加字段

    alter table 表名 add 字段名 数据类型 约束;

    默认在表中最后一列添加

    alter table 表名 add column 字段名 类型 约束 默认值;

    添加为第一行

    alter table 表名 add column 字段名 类型 约束 默认值 first;

    添加到指定字段之后

    alter table 表名 add column 字段名 类型 约束 默认值 after 字段名;

    实例

    alter table student add height double(4,1);

    7.4.2、修改列(字段)类型

    alter table 表名 modify 列名 新类型;

    实例

    alter table student modify height int;

    7.4.3、修改列(字段)名和类型

    alter table 表名 change 旧列名 新列名 新类型;

    实例

    alter table student change height width double(4,1);

    7.4.4、删除指定列(字段)

    alter table 表名 drop 列名;

    实例

    alter table student drop width;

    7.4.5、查看表的字符集 

    show create table 表名;

    7.4.6、修改表字符集

    alter table 表名 charset 字符集名;

    实例 

    alter table student charset gbk;

    7.4.7、修改表名

    rename table 旧表名 to 新表名

    实例

    rename table student to teacher

    7.4.8、删除字段 

    alter table 表名 drop column 字段名;

    7.5、删除表

    7.5.1、直接删除表

    drop table 表名;

    7.5.2、如果表存在就删除

    drop table if exists 表名;
    

    8、约束

    约束:规定,限制。限制表中的内容。需要满足一定的规则。数据库中的约束:限制列的内容。

    意义:保证数据的有效性和完整性。可以确保数据库满足业务规则。

    约束说明
    primary key主键约束:非空且唯一
    not null非空约束 : 某一列的值不能为空
    unique唯一约束 : 某一列的值不能重复,但可以为空
    auto_increment自增器,每一次+1
    foreign key外键约束

    8.1、主键约束(primary key)

    限定当前字段中存放的值  非空且唯一,该约束,一张表只能存在一个。

    说明:constraint 约束名   可以省略不写,这里只是给约束起名字,不影响约束创建。

    列级约束(限定一个字段下的内容,声明字段时,在字段之后使用)

    1. create table 表名(
    2. 字段 类型 primary key,
    3. ....
    4. 字段 类型
    5. );

    表级约束 

    1. create table 表名(
    2. 字段 类型,
    3. 字段 类型,
    4. .....
    5. 字段 类型,
    6. constraint 约束名 primary key(字段)
    7. );

    组合唯一 

    1. create table 表名(
    2. 字段 类型,
    3. 字段 类型,
    4. ....
    5. 字段 类型,
    6. constraint 约束名 primary key(字段1,字段2)
    7. );

    8.2、非空约束(not null)

    限定字段中不能存入空值  not null

    1. create table 表名(
    2. 字段 类型 not null,
    3. 字段 类型 not null,
    4. ....
    5. 字段 类型
    6. );

    8.3、唯一约束(unique)

    限定字段中不能存入重复值,不包含null

    列级约束

    1. create table 表名(
    2. 字段名 类型 unique,
    3. 字段名 类型 unique,
    4. ....
    5. 字段名 类型
    6. );

    表级约束

    1. create table 表名(
    2. 字段 类型,
    3. 字段 类型,
    4. .....
    5. 字段 类型,
    6. constraint 约束名 unique(字段),
    7. constraint 约束名 unique(字段)
    8. );

    组合唯一 

    1. create table 表名(
    2. 字段 类型,
    3. 字段 类型,
    4. ....
    5. 字段 类型,
    6. constraint 约束名 unique(字段1,字段2)
    7. );

    8.4、外键约束(foreign key)

    建立表与表之间的关系,限定从表中的外键字段的值只能依赖主表中的关联字段设置。

    注意事项

    1、添加数据时  必须先添加主表信息,后添加从表信息


    2、删除数据时,必须先删除从表信息,再删除主表信息


    3、外键字段的数据类型必须与主表关联字段类型一致


    4、只能关联主表中的主键字段或被唯一约束的字段

    列级约束(MySQL中失效)

    1. create table 表名(
    2. 字段 类型 references 主表名(字段),
    3. ......
    4. 字段 类型
    5. );

    表级约束

    1. create table 表名(
    2. 字段 类型,
    3. .........
    4. 字段 类型,
    5. constraint 约束名 foreign key(字段),
    6. references 主表名(字段)
    7. );

    组合外键

    1. create table 表名(
    2. 字段 类型,
    3. .........
    4. 字段 类型,
    5. constraint 约束名 foreign key(字段1,字段2),
    6. references 主表名(字段1,字段2)
    7. );

    8.5、检查约束(check)

    给字段提供筛选条件。在mysql失效

    列级约束

    1. create table 表名(
    2. 字段 类型 check(字段条件),
    3. 字段 类型 check(字段条件and/or字段条件)
    4. );

    实例

    1. create table student(
    2. id int,
    3. name varchar(20),
    4. sex char(1) check(sex='男' or sex='女')
    5. );

    表级约束

    1. create table 表名(
    2. 字段 类型 ,
    3. 字段 类型 ,
    4. ....
    5. 字段 类型,
    6. constraint 约束名 check(字段条件)
    7. );

    组合约束

    1. create table 表名(
    2. 字段 类型 ,
    3. 字段 类型 ,
    4. ....
    5. 字段 类型,
    6. constraint 约束名 check(字段条件1 and 字段条件2 or 字段条件3)
    7. );

    8.6、自增长(auto_increment)

    产生一个每次增加1的序列

    注意

    1、自增长一张表中只能设置一个。
    2、自增长只能设置在主键约束或者唯 一约束字段上。
    3、该序列一旦使用会持续往后增长,不会自动回到之前的序号。

    1. create table 表名(
    2. 字段 类型 primary key auto_increment,
    3. .......
    4. 字段 类型
    5. );

    8.7、缺省约束 默认值(default)

    未给字段输入值时,使用默认值填充

    1. create table 表名(
    2. 字段 类型 default 值,
    3. 字段 类型 default 值,
    4. .....
    5. 字段 类型
    6. );

    注意: 默认值必须与字段类型一致。

    8.8、给表中字段添加约束

    8.8.1、给表中字段添加主键约束

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

    8.8.2、给表中字段添加非空约束

    alter table 表名 modify 字段名 类型 not null;

    8.8.3、给表中字段添加唯一约束

    alter table 表名 add constraint 约束名 unique(字段名);

    8.8.4、给表中字段添加外键约束

    alter table 表名 add constraint 约束名 foreign key(字段名) references 主表名(字段名);

    8.8.5、删除表中的约束

    删除表中的主键约束

    alter table 表名 drop primary key;

    删除表中的唯一约束

    alter table 表名 drop index 约束名;

    删除非空约束

    alter table 表名 modify 字段名 类型 null;

    删除外键约束

    alter table 表名 drop foreign key 约束名;

    查询字段约束的详细信息

    select *  from  information_schema.table_constraints where table_name='表名';

    9、数据操作DML

    9.1、添加数据(insert into)

    全字段,单行数据添加

    insert into 表名 value(值1,值2,...值n);

    注意:值的个数、值的顺序、值的类型必须与表中的字段一致,如果某个字段不需要添加值,则以null占位。

    部分字段添加数据

    insert into 表名(字段名,字段名) value(值1,值2);

    注意:值的个数、值的顺序、值的类型 必须与表名后指定的字段一致。

    多行数据添加

    1. insert into 表名 values(值1,....值n),
    2. (值1...值n),
    3. ....
    4. (值1...值n);

    复制添加

    ​​​​​​​insert into 表名 select 字段,....字段 from 表名;

    注意事项:
    1、查询的字段个数、字段类型、字段顺序要与表中字段一一对应。
    2、不能违反添加数据的表中的约束条件。

    9.2、修改数据(update)

    对指定字段下的所有值进行修改

    update 表名 set 字段名1=值,字段2=值;

    修改指定行的信息

    update 表名 set 字段名=where 条件;

    9.3、删除数据(delete)

    清空表中数据,可通过 rollback 找回。

    delete  from 表名;

    截断表,不可通过rollback找回,删除数据的速度特别快。

    truncate table 表名;

    删除部分数据

    delete from 表名  where 条件;

    10、数据查询DQL

    10.1、单表查询

    查询所有字段

    select * from 表名;

    查询部分字段

    select 字段1,.... 字段n from  表名;

    去重查询(distinct)

    select distinct 字段 from 表名;

    排序查询(order by),默认为升序排序

    select * from 表名 order by 字段名;

    降序排序 desc

    select * from 表名 order by 字段名 desc

    多字段排序

    select * from 表名 order by 字段1,字段2...字段n;

    注意:
    1、多字段排序时,第一个字段中重复的内容再根据第二个字段排序,第二个字段如果依然有重复,再根据后续字段进行排序。
    2、多字段排序时如果每个字段都需要进行降序排序,则每个字段后都需要 desc

    单条件查询

    1、比较运算符进行条件设置

    条件判断说明
    =恒等
    !=非等 
    >大于
    <小于
    >=大于等于
    <=小于等于
    where 字段>值字段大于判断
    where 字段<值字段小于判断

     2、betweent and 范围查询

    select * from 表名 where 字段 betweenand 值;

    等同于

    select * from 表名 where 字段>=and 字段<=值;
    

    3、空值查询和非空值查询

    空值查询

    select * from 表名 where 字段 is null;

    非空查询

    select * from 表名 where 字段  is not null;

    注意
    0、"null"、“NULL” 都不是 null

    4、模糊查询 like

    配合通配符使用 %或_ ,%:任意长度任意字符。   _: 匹配单个任意字符。

    select * from 表名 where 字段 like “关键词%”;

    5、包含查询  in  和 not in

    字段的值只要符合()中的任意一个值即成立。

    in

    select * from 表名 where 字段 in (值1,值2,....值n);

    等同于

    select * from 表名 where 字段 =1 or 字段=2 or....字段=值n;

    not in

    select * from 表名 where 字段 not in (值1,值2,....值n);

    等同于

    select * from 表名 where 字段 !=1 and 字段!=2  and ....字段!=值n;

    多条件查询

    1、分组查询(group by)

    select 分组字段 from 表名 group by 分组字段;

    进行分组筛选

    select 分组字段 from 表名 group by 分组字段 having 条件;

    having 之后的条件只能通过分组字段或聚合函数进行设置,可以在 group by 之前写 where 条件查询,但是含义不同。

    2、聚合函数查询

    统计数量count(*),求字段中的最大值max(字段名),求字段中的最小值min(字段名),求字段中值的和sum(字段名),求平均值avg (字段名),通常,聚合函数和聚合函数一起使用,或和分组字段一起使用。

    3、常用函数查询

    1、字符串函数

    获取字符串长度
    char_length(字段名或字符串)

    拼接字符串
    concat()用来进行字符串拼接
    concat(字符串1,字符串2...,字符串n)

    注意:在mysql中+号不能拼接,字符串中如果为整数,那么会自动转换为整数类型。

    截取字符串
    substring(字符串或字段名,起始位置,截取长度);
    起始位置是从1开始。

    替换内容
    replace(字符串,原有内容,新内容)

    字符大写形式
    upper(字符串)

    字符小写形式
    lower(字符串)

    把日期字符串解析为日期
    str to date ("日期字符串","格式");

    2、日期函数

    获取系统日期
    now()

    把日期按照指定格式,转换为字符串
    date_format(日期,"格式");

    %Y  四位年
    %y  两位年
    %m 月 2位数
    %c   月 
    %d  日
    %h  时
    %i   分
    %s  秒


    求两个日期的相差天数
    datediff(日期1,日期2);


    日期加减
    adddate(日期,interval 相加数量 类型);
    adddate(日期,interval 2 DAY);
    注意:减日期就是把天数改为负数

    3、数学函数

    向上取整
    ceiling(数字)

    向下取整
    floor(数字)

    四舍五入取整
    round(数字)

    求次幂

    pow(数字,次方)

    平方根

    SQRT(数字)

    4、别名查询 

    1、字段别名

    给查询结果中的内容指定一个新的字段名称

    select 字段 as 别名,字段 as 别名 from 表名;

    as 使用在 where 之前,不能用于 where 之后,可以省略,可以使用在 order by 之后。

    2、表别名

    多表查询时,替代表名,表名  as  别名,as 可以省略,在 where 之后可以使用。

  • 相关阅读:
    ProxySQL + Mysql MGR实现数据库高可用
    Oracle-表空间管理
    springboot毕设项目高校宿舍管理系统的设计与实现ukgdt(java+VUE+Mybatis+Maven+Mysql)
    WEB-Wordlist-Generator:为扫描后的Web应用生成相关联的字典
    Dubbo详解,用心看这一篇文章就够了【重点】
    java后端:nacos 实现动态配置
    【项目】基于C++11实现的数据库连接池
    如何修复 HTML 中的乱码
    蓝桥杯每日一题0223.10.23
    K8S容器持续Terminating无法正常关闭(sider-car容器异常,微服务容器正常)
  • 原文地址:https://blog.csdn.net/select_myname/article/details/126314725