mysql随堂笔记

 

知识点

数据:信息、记录、阅读

数据库:数据的仓库,存储数据

    按照结构来组织、存放、管理数据的,建立在计算机上面。

       DBMS:

            数据库管理系统

               Oracle Sqlserver db2 MySQL

    mysql简介

         关系型数据库管理系统

          1996 1.0版本

          1999~2000年 瑞典 MySQL AB公司

          2008 sun 10亿

          2009 Oracle 74亿

          属于Oracle

          知识改变命运

       mysql特点

              1、开源、免费 (github)

              2、体积小、简单易学

              3、性能好、服务稳定、安全性高

              4、支持友好

       解压注意点

          路径不能有中文、空格、特殊字符

    bin目录:

          服务端:mysqld.exe

          客户端:mysql.exe

       四个参数:

       账号:root

       密码:默认为空    

       端口:3306

          IP:127.0.0.1/localhost

       命令:

          启动:mysqld

          链接:mysql -u root -p

          显示数据库:show databases;

          使用某个数据库:use[数据库名]

       显示表:show tables;

          退出链接:exit/quit

          停止服务端:mysqladmin -u root shutdown

          设置新密码:

             use mysql;

             update user set password=password("root") where user ="root";

       mysql图形化工具

           mysqlweb\phpadmin\navicat...

       Navicat:

           简单

              功能强大

       库、表、字段 概念见图

       命名规范:

           1、匈牙利命名法

                 小写字母,下划线链接,见名知意

        2、驼峰命名法

              3、数据库:db_数据库名

              4、表:tb_表名

             

    创建一个库:

        数据库:db_star

              表名:tb_star_info

              编号:s_id

              姓名:s_name

              性别:s_sex

              年龄:s_age

              身份证号码:s_card_id

              录入时间:s_entry_time

       utf8 or utf8mb4(针对移动端)

       在mysql5.5.3之后添加的, utf8mb4是utf8的超集

       数据类型:

           数字类型:int

              字类型:

                char(10):定长

          varchar(10):变长

                日期类型:

                  data  2018-09-27

                     time  22:45:40

                     datatime 2018-09-27 22:45:40

       作业:

       1、命令抄写直到闭着眼写出来

       2、环境配好

       3、明星表补充好,添加10条数据

       注意命名规范

       添加后navicat拍照上传SVN

       命令要手写拍照!

       作业命名规范:学号+姓名

知识点:

       乱码问题:数据库默认的编码格式:latin1

     设置:utf-8/utf-8mb4

乱码问题

    数据库默认的编码格式:latin1

    设置:utf8/utf8mb4

  服务式启动mysql

    my.ini

    [mysqld]

    character-set-server = utf8mb4

       [mysql]

       default-character-set = utf8mb4

       [mysql.server]

       default-character-set = utf8mb4

       [mysqld_safe]

       default-character-set = utf8mb4

       [client]

       default-character-set = utf8mb4

       查看编码

    show variables like "%character%";

 

    character_set_client为客户端编码方式;

       character_set_connection为建立连接使用的编码;

       character_set_database数据库的编码;

       character_set_results结果集的编码;

       character_set_server数据库服务器的编码;

       只要保证以上四个采用的编码方式一样,就不会出现乱码问题。

 

配环境变量

[没有data文件夹的]初始化mysql

    mysqld --initialize-insecure --user=mysql

    安装服务

    mysqld --install mysql

    启动服务

    net start mysql

    关闭服务

    net stop mysql

    移除服务

    mysqld --remove mysql

 

 

 

 

 

   服务式启动

查看编码(cmd)

   show variable like %character%;

初始化mysql(没有data文件夹的情况下):

mysqld –initialize-insecure

安装服务:

mysql –-install mysql

启动:

net start mysql

关闭服务:

net stop mysql

还可以移除服务:

mysqld –-remove

通常第一次安装需要服务启动设置 以上两个常用用于解决乱码

 

2、什么是约束

   规则

什么是数据约束

   对数据进行约束限制(定义)规则

数据类型:简单的数据约束

目的:

为了保证数据的完整性符合逻辑、正确();

数据完整性:

       域完整性:表中字段满足特定的数据类型或者约束。

       实体完整性:主键标识一个实体

引用完整性:表与表之间的规则

自定义完整性(用户自己定义的规则):

           对表中字段属性的约束。

数据类型:

  int 11个长度 第一位为正负

  char 定长(10) 不足10位,空格补齐

varchar 变长(10)最大10位

约束分类:

非空约束(not null):不能为空,必须有值

唯一约束(unique):不能重复

主键约束(primary):非空+唯一组合(一张表只有一个主键)

默认值(default):

自增长(auto-increase): 用在int型+主键

SQL语言

     (Structured Query Language ) 结构化查询语言

作用:处理数据库的计算机语言,建库、建表、约束等增删改查操作。

 遵循ANSI标准

     SQL语言分类:

        DML:数据处理语言(增删改数据)insert into   delete  update

DQL:数据查询语言(查询数据)select

DDL:数据定义语言(创建库、表、约束。。)

1、DML

单行注释(--)

多行注释(/*语句*/)

单行运行需要选中单行运行

--增加数据

INSERT INTO  tb_star_info VALUE(10,’张学友’,’男’,52,’51162117540021’,’2018-10-9’);

右键运行已选择的实现插入数据。

--修改数据

UPDATE tb_star_info SET s_age=53,s_card_id=’511621486’ WHERE s_id=10;

--删除

DELETE FROM tb_star_info WHERE s_id=5;--常通过主键来删除。删除切记带条件

 

其他删除功能:效果顺序

drop>trancate>delete

总结:乱码问题

       约束定义、作用

完整性:域完整性、实体完整性、引用完整性、自定义完整性

约束的分类:默认、非空、主键、自增

SQL概念

SQL语言分类:DML、DQL、DDL

语句要么全大写要么全小写,关键字建议大写

DML增加insert into表名value(值);值和字段对应

    修改:update 表名 set 字段1=值1,字段2=值2.。。【where 条件】

    删除:delete from 表【where 条件】

作业:

建电影表

 

用SQL语句并抄写

插入5条数据

并使用修改、删除

lesson 3

回顾

 DML:数据处理语言

   增加:INSERT INTO 表 VALUES(值1,值2,。。。);

   删:DELETE FROM 表 【WHERE 条件】;

改:UPDATE 表 SET 字段1=值1,字段2=值2,。。。【WHERE 条件】;

DQL:数据查询语句

DDL:数据定义语言

 

新知识点

指定字段

INSERT INTO tb_star_info(s_name,s_age,s_card_id,s_sex) VALUES(‘唐嫣’,23,‘12546483’,‘女’);

注意:字段顺序可以变换,但是形参和实参必须一对一;

2、批量插入

 INSERT INTO tb_star_info(s_name,s_age,s_card_id,s_sex)  VALUES(值1,值2,…),( 值1,值2,…),( 值1,值2,…),( 值1,值2,…);

3、全表删除

  1)DELETE FROM 表【WHERE 条件】当不加条件就全表删除,一条一条删除

2) truncate表 关键字也是清空表。一次清空

  3)drop关键字将整个表删除

  4)效率drop>truncate>delete

  5)delete删除后自增将不是从1开始

  6)truncate删除后自增从1开始

4、设置当前时间:默认值 CURRENT_TIMESTAMP,字段类型需要datetime或者timestamp;

5、查询

5.1 查询全表数据

   select * from 表名;

   注:*代表通配符。

5.2 指定字段查询

SELECT f_name FROM tb_film_info;

5.3精确查询

SELECT * FROM tb_film_info WHERE f_type=’科幻片’;

 

5.3.2 条件精确查询

 SELECT f_name, f_score FROM tb_ film_info WHERE f_score>80;

格式:SELECTE 字段1,字段2,。。。FROM 表名 WHERE 条件;

6、关系运算符:=

!=

 >

<

>=

<=

7、多条件查询:AND\OR

SELECT * FROM tb_ film_info WHERE (f_type=’爱情片’ OR f_type=’动作片’) AND f_score>90;

注意:优先级AND>OR,可以采用括号改变优先级。

8、NOT IN条件查询(不包含于)

SELECT * FROM tb_ film_info WHERE f_type NOT IN (‘爱情片’,‘动作片’);

9、IN查询

SELECT * FROM tb_ film_info WHERE f_type IN (‘爱情片’,‘动作片’);等价于OR

10、IS NULL为空 和 IS NOT NULL 不为空

SELECT * FROM tb_ film_info WHERE f_type IS NULL

SELECT * FROM tb_ film_info WHERE f_type IS NOT NULL;

 

11 BETWEEN关键字

评分50-90

SELECT * FROM tb_ film_info WHERE f_score  BETWEEN 50 AND 90;

评分<50或者>90;

SELECT * FROM tb_ film_info WHERE f_score NOT BETWEEN 50 AND 90;

范围查询:IN—包含 相当于OR;

         NOT IN -不包含于 相当于多个AND;

        BETWEEN 值1 AND 值2;

        NOT BETWEEN

12、模糊查询:

    like +’%A%’

    like +’A&’

    like+’%A’

    like+’A%B’

    模糊定位:-

 

方式1中间含有某个关键字

SELECT * FROM tb_ film_info WHERE f_name LIKE%神%’;

方式2以某个关键字结尾:…神

SELECT * FROM tb_ film_info WHERE f_name LIKE ‘%神’;

方式3以某个关键字开头:神…

SELECT * FROM tb_ film_info WHERE f_name LIKE ‘神%’

方式3 多个关键字查询  神…局

SELECT * FROM tb_ film_info WHERE f_name LIKE ‘神%局’;

(模糊定位)方式4 下划线代表一个字符

SELECT * FROM tb_ film_info WHERE f_name LIKE ‘神_特工局’

 

作业例题:

-- 查询类型不是恐怖片的电影

SELECT * FROM tb_film_info WHERE f_type !='恐怖片';

-- 查询分数大于50分,小于等于90的电影用 and

SELECT * FROM tb_film_info WHERE f_score>50 AND f_score<90;

-- 查询分数大于50分,小于等于90的电影用 BETWEEN

SELECT * FROM tb_film_info WHERE f_score BETWEEN 50 AND 90;

-- 查询分数小于50分或者大于90的电影用 OR

SELECT * FROM tb_film_info WHERE f_score<50 OR f_score>90;

-- 查询分数小于50分或者大于90的电影用 BETWEEN

SELECT * FROM tb_film_info WHERE f_score NOT BETWEEN 50 AND 90;

-- 查询电影类别为空的电影信息

SELECT * FROM tb_film_info WHERE f_type IS NULL;

-- 查询电影类别不为空的电影信息

SELECT * FROM tb_film_info WHERE f_type IS NOT NULL;

-- 查询中国 或者美国的电影

SELECT * FROM tb_film_info WHERE f_origin='中国' OR f_origin='美国';、

-- 查询动作片 或者 科幻片

SELECT * FROM tb_film_info WHERE f_type='动作片' OR f_type='科幻片';

-- 查询 美国的电影,并且是科幻片

SELECT * FROM tb_film_info WHERE f_origin='美国' AND f_type='科幻片';

-- 查询 科幻片 并且是 美国的,并且评分大于80 的电影信息

SELECT * FROM tb_film_info WHERE f_origin='美国' AND f_type='科幻片' AND f_score>80;

-- 查询不是印度片,但是分数要大于等于75分,并且年份是最近两年(2017-2018年)电影信息

SELECT * FROM tb_film_info WHERE f_score>=75 AND f_origin !='印度' AND f_play_year BETWEEN 2017 AND 2018;

-- 查询美国的电影 并且  是科幻片 或者评分大于80 电影信息

SELECT * FROM tb_film_info WHERE f_origin='美国' AND (f_type='科幻片' OR f_score>80);

-- 查询动作片和科幻片,并且要评分大于50分的电影信息(只需要显示电影的名称、类别、评分)

SELECT f_name, f_type,f_score FROM tb_film_info WHERE (f_type='动作片' OR f_type='科幻片' ) AND f_score>50;

-- 查询日本的爱情、动作片,并且评分大于80分的电影信息  (只需要显示电影名称,和电影类别,电影产地)

SELECT f_name,f_type,f_origin FROM tb_film_info WHERE f_origin='日本' AND (f_type='爱情片' OR f_type='动作片') AND f_score>80;

-- 查询 科幻片 动作片 爱情片的电影信息(只需要显示电影名称,和电影类别)用两种方式-- in

SELECT f_name,f_type FROM tb_film_info WHERE f_type IN('科幻片','动作片','爱情片');

SELECT f_name,f_type FROM tb_film_info WHERE f_type='科幻片' OR f_type='动作片' OR f_type='爱情片';

-- 查询电影类别不是恐怖片,剧情片的电影信息(用两种方式)

SELECT * FROM tb_film_info WHERE f_type !='恐怖片' AND f_type !='剧情片';

SELECT * FROM tb_film_info WHERE f_type NOT IN('恐怖片','剧情片');

-- 查询出所有带神字的电影

SELECT * FROM tb_film_info WHERE f_name LIKE'%神%';

-- 查询最后一个字为神的电影

SELECT * FROM tb_film_info WHERE f_name LIKE '%神';

-- 查询第一个字为神的电影

SELECT * FROM tb_film_info WHERE f_name LIKE '神%';

-- 查询开头尾我,结尾为神的电影

SELECT * FROM tb_film_info WHERE f_name LIKE '我%' AND f_name LIKE '%神';

-- 查询电影名字中包含神的电影,并且他的类型为科幻片,并且是评分>=70

SELECT * FROM tb_film_info WHERE f_name LIKE '%神%' AND f_type='科幻片' AND f_score>=70;

 

lesson 4

 

知识点:

 1、 模糊定位_

   _:表示任意单个字符

like ‘_a’

like ‘a_’

like ‘_ _’

如要查找四个字的电影:SELECT * FROM tb_film WHERE f_name LIKE ‘_ _ _ _’;

 

2、分组查询

关键词:group by 关键字

select s_class from tb_stu_info group by s_class;

分组查询结果只显示每个组的第一条数据。

3、聚合函数

   count()  //count(*)统计有多少条数据

max()

    min()

   sum()

avg()

别名: AS 别名

例:

 select s_subject,count(*) from tb_stu_info group by s_subject;

select s_subject as ‘科目’,count(*) as ‘参加人数’ from tb_stu_info group by s_subject;

 

SELECT MAX(s_score) FROM tb_stu_info;

 

SELECT MIN(s_score) FROM tb_stu_info;

 

SELECT SUM(s_score) FROM tb_stu_info WHERE s_name=’蒋建兵’;

 

SELECT AVG(s_score) AS ‘平均分’ FROM tb_stu_info WHERE s_name=’黄镇东’;

 

SELECT s_class, SUM(s_score) FROM tb_stu_info GROUP BY s_class;

 

SELECT s_class, AVG(s_score) FROM tb_stu_info GROUP BY s_class;

 

SELECT s_subject, MAX(s_score) FROM tb_stu_info GROUP BY s_subject;

 

SELECT s_subject, MIN(s_score) FROM tb_stu_info GROUP BY s_ subject;

 

查询每个学生的总分和平均分

SELECT s_name,SUM(s_score),AVG(s_score) FROM tb_stu_info GROUP BY s_ name;

 

排序查询,order by 字段 [asc\desc],字段2[asc\desc] //如果字段1相等时按照字段2排序

                 asc:升序

                 dsc:降序

                 默认:asc

查询出6班成绩大于70并且按照从高到低

SELECT s_name, s_score FROM tb_stu_info WHERE s_class=’6班’ AND s_score>70 ORDER BY s_score DESC;

 

GROUP BY s_student_id HAVING s_score>70 ODER BY s_score ASC;

其中HAVING表示分组后的条件

     而 where是原始数据条件。

 

group by x;将所有具有相同X字段值得记录放在一个分组里

group by x,y;将所有具有相同X字段和Y字段的记录放在一个分组

DISTINCT:去除重复关键字,如COUNT(DISTINCT s_student_id)

lesson5

知识点:

   数据约束

   自增

主键

非空

唯一

外键约束

2、外键:指另一张表的主键

   作用:多张表建立连接,保证数据一致性、完整性

restrict与no action表示删除时检查是否有外键,如果有则不允许删除。

cascade级联删除,表示删除主键信息时,外键信息同时都删除

    set null :主键删除记录时,把外键字段设置为null

3、连接查询

 1)内连接 INNER JOIN ON 查询两张表有对应关系的数据

-- 两个表ID相同连接

  SELECT * FROM student_info AS st INNER JOIN score_info AS sc ON st.s_id=sc.s_id;

-- 查总成绩,按照降序

SELECT s_name,SUM(s_score) sum FROM score_info sc INNER JOIN student_info st ON sc.s_id=sc.s_id GROUP BY st.name ORDER BY sum DESC;

2)外连接查询

   左连接

LEFT JOIN ON 以左边的表为基准展示,右边的没有数据的显示为空

右连接

RIGHT JOIN ON 以右边的表为基准展示,左边的的数据没有的显示为空

4、分页查询

SELECT * FROM 表名 LIMIT n,m;

其中n:代表从第几条数据开始

     m:代表显示多少条数据。

写法二:LIMIT n;

      相当于LIMIT 0,n;

分页逻辑:LIMIT(当前页-1)*每页显示条数,每页显示条数;

5、合并查询:

union 去重查询

union all 不去重查询

 

 

lesson6

1、子查询

    当一个结果是另一个查询的条件时,称之

     子查询的时候要记得写上别名,不然容易混淆表字段

2、嵌套查询

   当一个查询的结果的表当做另一个查询的原表

3、

  字符串函数

   char_length(str):返回字符串(str)字数  字符数

length(str):获取存储的长度【utf-8字符占3个字节】。字节数

用法select +函数

4、拼接字符串

   concat(str,str2,…)拼接字符串

5、替换函数

   replace(str1,str2,str3);

          str1:需要替换的字符串 目标字符串

          str2:需要替换的字符   被替换的字符

str3:替换成什么字符        用于替换的字符

update 表  set  f_name=concat(‘《’,f_name,’》’);

 

substring(str,index);截取函数;

substring(str,index,length);

  str:截取的字符串

  index:开始的位置

   length:截取的长度

ltrim()去掉左边空格

rtrim()去掉右边空格

lower()转换小写

upper()转大写

6、数字函数

ABS(x)绝对值

ceil(x):返回大于X的最大整数

floor(x):返回小于x 的最大整数

round(x):四舍五入

rand():返回[0,1)的随机数,不包括1

7、日期函数

  

  获取当前系统日期:now():

获取当前日期:curdate()

获取当前时间:curtime();

选取当前日期:date(now());

选取当前时间:time(now());

选取当前时间的年月日:

  year(now());

  month(now());

  day(now);

date_format(date,’%Y-%m-%d %H:%i:%s’);

8、时间比较函数

TIMESTAMPDIFF(str,date1,date2)

str1:比较的类型:年、月、日 可以按照年、月或者日来比较

 值=date2-date1

lesson 7

DDL数据定义语言

1、 创建数据库:

  CREATE DATABASE 库名

创建库设置编码

ALTER DATABASE aaa CHARACTER SET utf8mb4

-- 建库设置编码

CREATE DATABASE  IF NOT EXISTS 库名 CHARACTER SET utf8mb4;

-- 删除数据库

DROP DATABASE IF EXISTS 库名;

注意:在创建或者删除数据库的时候加上判断 IF EXISTS/ NOT EXISTS

  建库总结:

   新建:create if not exists

   修改:alter

   删除:drop if exists

  注意:drop谨慎

2、建表

create table表名(字段1 数据类型,字段2 数据类型)

步骤:

use 库名;

 create table if not exists 表名(s_id int, s_name varchar(50), s_sex char(1), s_card char(18));内部括号内指定长度

 

3、查看创建的表

DESC 表名

4、修改已经创建的表名

ALTER TABLE student_info RENAME tb_student_info;

5、修改已经创建的字段数据类型

 alter tablemodify 字段 新类型  例如 float(总长度,小数点后位数)

6、添加新字段

alter tableadd(新字段1 数据类型,新字段2 数据类型);

7、修改字段名

alter table 表 change 字段名 新字段名 新数据类型;

8、删除列

alter table 表 drop 字段列

9、删除表

drop if exists 要删除的表

10、查看表结构

  desc 表名;

  修改:

修改表名

alter table表名 rename 新的表名;

修改列名:

   alter table表名 change 原列名 新列名 新数据类型或者原数据类型

 修改字段数据类型:

    alter table表名 modify 列 数据类型;

添加字段:

    alter table表名 add(字段1 数据类型,字段2 数据类型);

删除字段:

alter table表名 drop 字段名;

删除表:

    drop table if exists表名

删除列: alter tabledrop

  

11、数据约束:

 非空:

   添加 alter table表名 modify 列 数据类型 not null;

   删除 alter table表名 modify 列 数据类型 null;

默认:

   添加 alter table表名 alterset default ‘值’;

   删除 alter table表名 alterdrop default;

唯一:

   添加 alter table表名 add unique 约束名(对应字段);

   删除 alter table表名 drop key 约束名;

主键:

    添加 alter table表名 add primary key(对应字段);

    删除 alter table表名 drop primary key;

自增长:

    添加 alter table表名 modify 列名 int auto_increments;

    添加 alter table表名 modify 列名 int;

外键:

    添加 alter table 外键表 add constraint 约束名 foreign key(外键列) references 主键表(主键列) on delete set null

           on update set null

          删除 :

              第一步:删除外键

              alter table 外键表 drop foreign key 约束名;

              第二步:删除索引名

              alter table 外键表 drop index 索引名;

注意:在mysql中 唯一约束=唯一索引

lesson 8

DCL 数据库控制语言

1、创建用户

   create user 用户名@IP地址 IDENTFIED BY ‘密码’;

2、给用户授权

   GRANT ALL ON db_star.* TO 创建好的用户@IP地址

3、撤销授权

   revoke 权限2,权限2 ON 数据库.* from 用户名@IP地址;

4、查看权限

show grant for 用户名@IP地址

5、删除用户

  DROP USER 用户名@IP地址;

 

JDBC:java连接数据库

1、连接数据库

  通过JDBC连接数据库步骤

  1)导包(驱动)

  2)加载驱动 Class.forName(“com,mysql,jdbc.Driver”);

     Class.forName() 含义:加载参数指定的类,并且初始化它.

   3)参数

     数据库地址:jdbc:mysql://127.0.0.1【localhost】:3306/数据库名

     用户名:root

密码:root

4) Connection con=DriverManager.getConnection(数据库地址,用户名,密码 );

注意两个异常uploading.4e448015.gif转存失败重新上传取消

第一个异常可能没导包,

第二个异常可能链接异常

1、确认mysql是否启动

2、url\账户\密码参数是否正确

3、URL:数据库、IP地址、端口号是否正确

JDBC原理:

   公用接口 协议标准

   各个数据库厂商遵循这个规范 实现这个接口 JDBC驱动

uploading.4e448015.gif转存失败重新上传取消

lesson9

JDBC增删改

1、创建发送器

   通过Conection对象创建Statement发送器

2、通过Statement的一个方法,executeUpdate(String sql)

3、返回受影响行数,int类型

注意:SQL后面不需要额外加分号,程序自动加,只能写一条,不可以多写几条语句。

 查询

1、创建发送器

2、通过Statement的executeQuery(String sql)

3、返回结果集Resultset

  解析ResultSet提供了getXxx()方法

关闭资源

  倒着关闭

JDBC操作数据库步骤:

1、 导jar包

2、注册驱动

3、创建发送器

4、发送sql 语句(执行)

5、处理执行结果

6、释放资源

Statement类

int executeUpadate(String sql)

ResultSet executeQuery(String sql);

 

 

lesson10

知识点

float(a,b)

double(a,b)

decimal(a,b)精确

bigint 大数据

 

视图:

  数据库中虚拟的表,内容由查询定义

语法:select * from 视图名

 

JDBC

获取结果集(列)

ResultSet:getMetaData();

得到元数据集ResultSetMetaData 对象

返回列数 getcolumn()获得列数

 

防SQL注入

   PreparedStatement   Statement接口的子接口,更加强大

  

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值