• sql数据类型,约束以及单表查询


    数据类型

    常见的数据类型
    数值类型
    整数类型 TINYINT SMALLINT MEDIUMINT INT BIGINT
    整型可以指定是有符号的和无符号的,默认是有符号的
    可以通过UNSIGNED来说明某个字段是无符号的。

    浮点数类型 FLOAT DOUBLE

    字符串类型:
    CHAR系列 CHAR VARCHAR
    BINARY系列 BINARY VARBINARY
    枚举类型: ENUM
    集合类型: SET

    时间和日期类型:
    DATE TIME DATETIME TIMESTAMP YEAR

    基本上主要分为数值类型,浮点数类型,字符串类型和其他类型的
    注意事项:

    # 整数类型
    int(5) # 这个的话,指定int显示5位,并不是说 int 只能插入5位 在我测试的时候,创建表字段的时候 int 制定了 3 位 ,但是查看表结构的时候,mysql8.0版本以上显示不了,5版本的可以显示 
    # 上面这个6位以上的也可以添加,也不受影响
    
    # 浮点型
    float(5,3) # 这个的制定了精读,整数两位,小数三位,(5,3) 这个5表示一共有这么多位,3 表示小数有三位
    # 浮点数和定点数都可以用类型名称后加(M,D)的方式来表示,(M,D)表示一共显示M位数字(整数位
    +小数位),其中D位于小数点后面,M和D又称为精度和标度。
    # 如上,添加一个 5.4567  在数据库中会显示 5.458  失去精度的时候四舍五入
    
    # CHAR、VARCHAR
    # 作用:用于存储用户的姓名、爱好、发布的文章等
    # CHAR     列的长度固定为创建表时声明的长度: 0 ~ 255
    # VARCHAR  列中的值为可变长字符串,长度: 0 ~ 65535
    # 注:在检索的时候,CHAR列删除了尾部的空格,而VARCHAR则保留这些空格
    # 字符串类型
    # ENUM类型即枚举类型、集合类型SET测试
    # 字段的值只能在给定范围中选择
    # 常见的是单选按钮和复选框
    enum  # 单选	  只能在给定的范围内选一个值,如性别 sex 男male/女female
    set  # 多选    在给定的范围内可以选择一个或一个以上的值(爱好1,爱好2,爱好3...)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    约束条件

    约束条件						      说明
    - NULL                   标识是否允许为空,默认为NULL。
    - NOT NULL			         标识该字段不能为空,可以修改。
    - UNIQUE KEY  (UK)		   标识该字段的值是唯一的,可以为空,一个表中可以有多个UNIQUE KEY
    - DEFAULT				         为该字段设置默认值
    - UNSIGNED               无符号,正数
    - PRIMARY KEY (PK)		   标识该字段为该表的主键,可以唯一的标识记录,不可以为空
    - AUTO_INCREMENT		     标识该字段的值自动增长(整数类型,而且为主键)   自增键,每张表只能一个字段为自增
    - UNIQUE + NOT NULL          唯一,不能为空 
    - FOREIGN KEY (FK)		   标识该字段为该表的外键,实现表与表(父表主键/子表1外键/子表2外键)之间的关联
    - ZEROFULL           补全0 适合int制定显示位数的时候
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    DML 数据操作语句

    在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括使用INSERT实现数据
    的插入、DELETE实现数据的删除以及UPDATE实现数据的更新。
    更新数据   insert
    更新数据   update
    删除数据   delete
    
    • 1
    • 2
    • 3
    • 4
    • 5

    一、插入数据INSERT

    1. 插入完整数据(顺序插入)
    	语法一:
    	INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES (1,2,3…值n);
    
    	语法二:
    	INSERT INTO 表名 VALUES (1,2,3…值n);
    
    2. 指定字段插入数据
    	语法:
    	INSERT INTO 表名(字段2,字段3) VALUES (2,3);
    
    3. 插入多条记录
    	语法:
    	INSERT INTO 表名 VALUES
    		(1,2,3…值n),
    		(1,2,3…值n),
    		(1,2,3…值n);
    		
    4. 插入查询结果
    	语法:
    	INSERT INTO1(字段1,字段2,字段3…字段n) 
    					SELECT (字段1,字段2,字段3…字段n) FROM2
    					WHERE;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    二、更新数据UPDATE

    语法:
    	UPDATE 表名 SET 字段1=1,字段2=2  WHERE CONDITION;
    
    • 1
    • 2

    三、删除数据DELETE

    语法:
    	DELETE FROM 表名 
    		WHERE CONITION;
    示例:
    	DELETE FROM mysql.user 
    		WHERE authentication_string=’’;
    
    delete from 表名 WHERE 条件;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    四、MySQL单表查询

    SELECT   字段名称,字段名称2    from  表名   条件
    # 避免重复DISTINCT
    SELECT DISTINCT post  FROM employee5;	
    
    # 定义显示格式
    # CONCAT() 函数用于连接字符串
    SELECT CONCAT(name, ' annual salary: ', salary*14)  AS Annual_salary FROM employee5;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    五、关键词

    # where
    select * from 表名 where 条件
    el:
    select * from so where id = 1 
    # 上面这个sql语句的意思是 查询 so表中 id =1 的全部信息
    # 多条件查询使用 and 链接 el:
    select * from so where id = 1  and sex = '男'
    # 上面这个sql语句的意思是 查询 so表中 id =1 和 sex = ‘男’ 的全部信息
    
    -----------------------------------------------------------------
    
    # BETWEEN AND
    select * from 表名 where 字段名 between x and y
    el:
    select * from so where id between 1 and 10
    # 查询so表中 id范围在 1 到 10 之间的所有信息
    
    -----------------------------------------------------------------
    
    # IS NULL
    select * from 表名 where 字段名 is null
    select * from 表名 where 字段名 is not null
    select * from 表名 where 字段名 = ''
    
    el:
    SELECT * FROM e WHERE name IS NULL;
    # 上面 查询e表中name为空的所有信息
    SELECT * FROM e WHERE name IS NOT NULL;
    # 上面 查询e表中name为不为空的所有信息
    SELECT * FROM e WHERE name='';
    # 上面 查询e表中name为‘’(空字符串,并不是 null)的所有信息
    NULL说明:
            1、等价于没有任何值、是未知数。
            2NULL0、空字符串、空格都不同,NULL没有分配存储空间。
            3、对空值做加、减、乘、除等运算操作,结果仍为空。
            4、比较时使用关键字用“is null”和“is not null”。
            5、排序时比其他数据都小,所以NULL值总是排在最前。
    
    -----------------------------------------------------------------
    
    # 关键字IN集合查询
    SELECT name, salary FROM employee5 WHERE salary=4000 OR salary=5000 OR salary=6000 OR salary=9000;
    # 上面这个等同于下面这个sql语句    in的意思是只要salary满足其中一个,则将符合的记录查询出来
    SELECT name, salary FROM employee5 WHERE salary IN (4000,5000,6000,9000) ;
    # 下面则是查询salary不等于 4000,5000,6000,9000的记录
    SELECT name, salary FROM employee5 WHERE salary NOT IN (4000,5000,6000,9000) ;
    
    -----------------------------------------------------------------
    
    # 排序查询 order by
    select * from 表名 order by 字段 asc(默认值,可不写)  # 默认是升序排序
    select * from 表名 order by 字段 desc   # 降序排序
    # 某表通过某个字段降序/升序进行排序查询
    
    -----------------------------------------------------------------
    
    # limit 限制查询结果的返回数量   也被称为分页查询
    select * from 表名 limit n,m
    el:
    select * from a limit 3,3;
    # 查询a表中从第四条数据开始的三条数据
    limit 3,3 
    # 第一个 3 偏移量  偏移量为0的时候是从第一条数据开始显示的
    # 第二个3是显示几条数据
    
    ----------------------------------------------------------------
    
    # 分组查询
    #  GROUP BY和GROUP_CONCAT()函数一起使用
    select group_concat(name), class_id from student group by class_id;
    # 这个的话,你们自己试一试,很厉害的
    select group_concat(字段1), 字段2 from student group by 字段2;
    # 为 字段2 进行分组
    
    # 练习的表  下面是sql语句
    CREATE TABLE company.employee5(
         id int primary key AUTO_INCREMENT not null,
         name varchar(30) not null,
         sex enum('male','female') default 'male' not null,
         hire_date date not null,
         post varchar(50) not null,
         job_description varchar(100),
         salary double(15,2) not null,
         office int,
         dep_id int
         );
    
    insert into company.employee5(name,sex,hire_date,post,job_description,salary,office,dep_id) values 
    	('jack','male','20180202','instructor','teach',5000,501,100),
    	('tom','male','20180203','instructor','teach',5500,501,100),
    	('robin','male','20180202','instructor','teach',8000,501,100),
    	('alice','female','20180202','instructor','teach',7200,501,100),
    	('tianyun','male','20180202','hr','hrcc',600,502,101),
    	('harry','male','20180202','hr',NULL,6000,502,101),
    	('emma','female','20180206','sale','salecc',20000,503,102),
    	('christine','female','20180205','sale','salecc',2200,503,102),
        ('zhuzhu','male','20180205','sale',NULL,2200,503,102),
        ('gougou','male','20180205','sale','',2200,503,102);
             
    # 可以试试下面这个分组查询的sql语句
    SELECT dep_id,GROUP_CONCAT(name) FROM employee5 GROUP BY dep_id;
    SELECT dep_id,GROUP_CONCAT(name) as emp_members FROM employee5   GROUP BY dep_id;
    
    ---------------------------------------------------------------------
    
    # 模糊查询(通配符)   
     #    %  所有字符
     SELECT * from employee5 WHERE salary like '%20%';
    
    ---------------------------------------------------------------------
    
    # 正则查询    后面有一个简单的正则表达式的规则,可以了解了解
        SELECT * FROM employee5 WHERE salary regexp '72+';
        SELECT * FROM employee5 WHERE name REGEXP '^ali';
        SELECT * FROM employee5 WHERE name REGEXP 'yun$';
        SELECT * FROM employee5 WHERE name REGEXP 'm{2}';
        
    ---------------------------------------------------------------------
    
    # 函数
        count()
        max()
        min()
        avg()
        database()
        user()
        now()
        sum()
        password()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129

    正则规则
    在这里插入图片描述

  • 相关阅读:
    信创办公–基于WPS的PPT最佳实践系列 (绘制自选图形)
    【OpenCV 图像处理 Python版】图像处理的基本操作
    一个.Net简单、易用的配置文件操作库
    JAVA中小型医院信息管理系统源码 医院系统源码
    【云原生】k8s-----集群调度
    python内置函数
    LuatOS-SOC接口文档(air780E)--mcu - 封装mcu一些特殊操作
    Pwn2Own Austin 2021 Cisco RV34x RCE 漏洞链复现
    [JVM] 浅析JVM的垃圾回收机制的相关概念
    不知道照片加水印怎么弄?这三个方法让你轻松实现
  • 原文地址:https://blog.csdn.net/XiaoLinZuoTi/article/details/133362098