MySQL数据库

 

 MySQL的使用

MySQL服务器的操作

1.进入MySQL数据库:mysql -h 服务器地址 -u 用户名 -p 密码;

mysql -h localhost -u root -p
Enter password: ****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.7.34-log MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

2.查看MySQL版本信息:select version();

mysql> select version();
+------------+
| version()  |
+------------+
| 5.7.34-log |
+------------+
1 row in set (0.04 sec)

3.查看MySQL基本配置信息:status;

mysql> status;
--------------
mysql  Ver 14.14 Distrib 5.7.34, for Win64 (x86_64)

Connection id:          11
Current database:
Current user:           root@localhost
SSL:                    Cipher in use is ECDHE-RSA-AES128-GCM-SHA256
Using delimiter:        ;
Server version:         5.7.34-log MySQL Community Server (GPL)
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    gbk
Conn.  characterset:    gbk
TCP port:               3306
Uptime:                 5 days 10 hours 59 min 59 sec

Threads: 1  Questions: 896  Slow queries: 0  Opens: 314  Flush tables: 1  Open tables: 238  Queries per second avg: 0.001
--------------

4.查看MySQL当前连接数show variables like '%connection%';

mysql> show variables like '%connection%';
+--------------------------+----------------+
| Variable_name            | Value          |
+--------------------------+----------------+
| character_set_connection | gbk            |
| collation_connection     | gbk_chinese_ci |
| max_connections          | 151            |
| max_user_connections     | 0              |
+--------------------------+----------------+
4 rows in set, 1 warning (0.00 sec)

5.查看当前时间:select now();

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2021-11-17 20:10:00 |
+---------------------+
1 row in set (0.04 sec)

6.查看超时:show variables like '%timeout%';

mysql> show variables like '%timeout%';
+-----------------------------+----------+
| Variable_name               | Value    |
+-----------------------------+----------+
| connect_timeout             | 10       |
| delayed_insert_timeout      | 300      |
| have_statement_timeout      | YES      |
| innodb_flush_log_at_timeout | 1        |
| innodb_lock_wait_timeout    | 50       |
| innodb_rollback_on_timeout  | OFF      |
| interactive_timeout         | 28800    |
| lock_wait_timeout           | 31536000 |
| net_read_timeout            | 30       |
| net_write_timeout           | 60       |
| rpl_stop_slave_timeout      | 31536000 |
| slave_net_timeout           | 60       |
| wait_timeout                | 28800    |
+-----------------------------+----------+
13 rows in set, 1 warning (0.00 sec)

●MySQL数据库

1.查看服务器有多少数据库:show databases;

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| employees          |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

2.创建数据库:create database 名称;

mysql> create database testdev;
Query OK, 1 row affected (0.00 sec)

3.删除数据库:drop database 数据库名称

mysql> drop database testdev;
Query OK, 0 rows affected (0.00 sec)

4.进入数据库:use 数据库名称;

mysql> use testdev;
Database changed

5.查看数据库所在本地磁盘目录:show variables like '%datadir%';

mysql> show variables like '%datadir%';
+---------------+---------------------------------------------+
| Variable_name | Value                                       |
+---------------+---------------------------------------------+
| datadir       | C:\ProgramData\MySQL\MySQL Server 5.7\Data\ |
+---------------+---------------------------------------------+
1 row in set, 1 warning (0.00 sec)

6.查看当前使用的是哪个数据库:select database();

mysql> select database();
+------------+
| database() |
+------------+
| employees  |
+------------+
1 row in set (0.00 sec)

●MySQL表

1.表的数据类型

1.1整型
类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1字节 (-128,127) (0,225) 小整数值
SMALLINT 2字节 (-32768,32767) (0,65535) 大整数值
 MEDIUMINT  3字节  (-8388608,8388607)  (0,16777215)  大整数值 
 INT或INTEGER  4字节  (-2147483648,2147483647)   (0,4294967295)  大整数值 
 BIGINT  8字节 (-9233372036854775808,9223372036854775807)  (0,18446744073709551615)  极大整数值 
整型(N)形式:

我们会碰到有些定义整型的写法是int(11),这种写法从我个人开发的角度看我认为是没有多大用,不过作为一个知识点做一下讲解吧。

int(N)我们只需要记住两点:

  • 无论N等于多少,int永远占4个字节
  • N表示的是显示宽度,不足的用0补足,超过的无视长度而直接显示整个数字,但这要整型设置了unsigned zerofill才有效

如:

drop table if exists test_int_width;
create table test_int_width (
    a int(5),
    b int(5) unsigned,
    c int(5) unsigned zerofill,
    d int(8) unsigned zerofill
) engine=innodb charset=utf8;

insert into test_int_width values(1, 1, 1, 1111111111);

select * from test_int_width;

 得到的结果 :

+------+------+-------+------------+
| a    | b    | c     | d          |
+------+------+-------+------------+
|    1 |    1 | 00001 | 1111111111 |
+------+------+-------+------------+
 1.2浮点类
数据类型 字节数 备注
float 4 单精度浮点型
double 8 双精度浮点型
float(M,D)、double(M、D)的用法规则:
  • D表示浮点型数据小数点之后的精度,假如超过D位则四舍五入,即1.233四舍五入为1.23,1.237四舍五入为1.24
  • M表示浮点型数据总共的位数,D=2则表示总共支持五位,即小数点前只支持三位数,所以我们并没有看到1000.23、10000.233、100000.233这三条数据的插入,因为插入都报错了

   当我们不指定M、D的时候,会按照实际的精度来处理。

如:

drop table if exists test_float;
create table test_float (
    num float(5, 2)
) engine=innodb charset=utf8;

insert into test_float values(1.233);
insert into test_float values(1.237);
insert into test_float values(10.233);
insert into test_float values(100.233);
insert into test_float values(1000.233);
insert into test_float values(10000.233);
insert into test_float values(100000.233);

 输出的结果为:

 mysql> insert into test_float values(1000.233);
  ERROR 1264 (22003): Out of range value for column 'num' at row 1
 mysql> insert into test_float values(10000.233);
  ERROR 1264 (22003): Out of range value for column 'num' at row 1
 mysql> insert into test_float values(100000.233);
  ERROR 1264 (22003): Out of range value for column 'num' at row 1


mysql> select * from test_float; +--------+ | num | +--------+ | 1.23 | | 1.24 | | 10.23 | | 100.23 | +--------+ 4 rows in set (0.00 sec)
1.3日期和时间类型

 

数据类型 字节数 格式 备注
date 3 yyyy-MM-dd 存储日期值

time

3 HH:mm:ss 存储时分秒
year 1 yyyy 存储年
datetime 8 yyyy-MM-dd HH:mm:ss 存储日期+时间
timestamp 4 yyyy-MM-dd HH:mm:ss 存储日期+时间,可作时间戳

如:

mysql> create table test_time (
    ->     date_value date,
    ->     time_value time,
    ->     year_value year,
    ->     datetime_value datetime,
    ->     timestamp_value timestamp
    -> ) engine=innodb charset=utf8;
Query OK, 0 rows affected (0.05 sec)
mysql> insert into test_time values(now(), now(), now(), now(), now());

输出:

mysql> select * from test_time;
+------------+------------+------------+---------------------+---------------------+
| date_value | time_value | year_value | datetime_value      | timestamp_value     |
+------------+------------+------------+---------------------+---------------------+
| 2021-11-22 | 19:45:52   |       2021 | 2021-11-22 19:45:52 | 2021-11-22 19:45:52 |
+------------+------------+------------+---------------------+---------------------+
1 row in set (0.00 sec)
 1.4字符串(字符)类型
数据类型 大小(范围) 用途
char(M)[BINARY]

M个字节,0 <= M <= 255 (L为固定的=255,不够补空格)

定长字符串;CHAR 类型可以使用 BINARY 修饰符。当用于比较运算时,这个修饰符使 CHAR 以二进制方式参于运算,而不是以传统的区分大小写的方式。CHAR值根据缺省字符集以大小写不区分的方式排序和比较,除非给出BINARY关键词
varchar(M) [BINARY]

L+1个字节,其中L <= 0 <= M <= 65535(MySQL5.0之前都是最大255)

变长字符串;VARCHAR 类型在使用 BINARY 修饰符时与 CHAR 类型完全相同
tinyblob,tinytext

L+1个字节,其中L < 28-1 (255)

tinyblob不超过 255 个字符的二进制字符串;tinytext短文本字符串
blob,text

L+2个字节,其中L < 216-1 (65535)

blob:二进制形式的长文本数据,在分类和比较时BLOB 类型区分大小写;text:长文本数据,在分类和比较时TEXT 不区分大小写
mediumblob,mediumtext

L+3个字节,其中L < 224-1

mediumblob:二进制形式的中等长度文本数据;mediumtext :中等长度文本数据,
longblob,longtext

L+4个字节,其中L < 232-1

longblob:二进制形式的极大文本数据   ;longtext :极大文本数据
enum('value1','value2',...)

1或2个字节,取决于枚举值的个数(最多65,535个值)

 
set('value1','value2',...)

1、2、3、4或者8个字节,取决于set成员的数目(最多64个成员)

 

 2.表结构的操作

2.1表的创建:
2.1.1新建表
CREATE TABLE 表名 (
    属性名 数据类型 [完整约束条件],
    属性名 数据类型 [完整约束条件],
    ...
    ...
    属性名 数据类型 [完整约束条件]
);

如要创建一个有属性id跟name的user表:

mysql> create table user(
    -> id int(11),
    -> name varchar(20)
    -> );
Query OK, 0 rows affected (0.06 sec)
2.1.2克隆表
  • 首先查到表的信息
    mysql> show create table salaries \G;
    *************************** 1. row ***************************
           Table: salaries
    Create Table: CREATE TABLE `salaries` (
      `emp_no` int(11) NOT NULL,
      `salary` int(11) NOT NULL,
      `from_date` date NOT NULL,
      `to_date` date NOT NULL,
      PRIMARY KEY (`emp_no`,`from_date`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1
    1 row in set (0.01 sec)
  • 分支表结果信息
  • 更改名称复制代码即可
2.1.3表的约束条件:

 

约束条件

说明

PRIMARY KEY

 标识该属性为该表的主键,可以唯一的标识对应的元组

FOREIGN KEY

 标识该属性为该表的外键,是与之联系某表的主键
 NOT NULL

 标识该属性不能为空

UNIQUE

 标识该属性的值是唯一的
AUTO_INCREMENT

 标识该属性的值是自动增加,这是MySQL的SQL语句的特色

 DEFAULT

为该属性设置默认值

 

  • 设置表的主键
    单字段主键格式:属性名 数据类型 PRIMARY KEY
    多字段主键格式:PRIMARY KEY(属性名1,属性名2....属性名n)
  • 设置表的外键   CONSTRAINT 外键别名 FOREIGN KEY(属性1,属性2,....属性n) REFERENCES 表名(属性1',属性2',...属性n')
  • 设置表的非空约束  属性名 数据类型 NOT NULL

  • 设置表的唯一性约束 (就是这个属性的值是不能重复的)   格式:属性名 数据类型 UNIQUE
  • 设置表的属性值自动增加(AUTO_INCREMENT约束的字段可以是任何整数类型(TINYINT、SMALLINT、INT和BIGINT),在默认的情况下,该字段的值是从1开始自增)    属性名 数据类型 AUTO_INCREMENT
  • 设置表的属性的默认值      属性名 数据类型 DEFAULT 默认值

如:

mysql>  CREATE TABLE student3 (
    ->  id int PRIMARY KEY AUTO_INCREMENT,
    ->  teacher_id int UNIQUE,
    ->  name varchar(20) NOT NULL,
    ->  sex varchar(10) DEFAULT 'male'
    ->  );
Query OK, 0 rows affected (0.06 sec)

mysql> desc student3;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| id         | int(11)     | NO   | PRI | NULL    | auto_increment |
| teacher_id | int(11)     | YES  | UNI | NULL    |                |
| name       | varchar(20) | NO   |     | NULL    |                |
| sex        | varchar(10) | YES  |     | male    |                |
+------------+-------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
2.2表的查询

2.2.1查询表信息:show create table 表名称 \G;

mysql> show create table student3 \G;
*************************** 1. row ***************************
       Table: student3
Create Table: CREATE TABLE `student3` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `teacher_id` int(11) DEFAULT NULL,
  `name` varchar(20) NOT NULL,
  `sex` varchar(10) DEFAULT 'male',
  PRIMARY KEY (`id`),
  UNIQUE KEY `teacher_id` (`teacher_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

2.2.2查询表数据信息:desc 表名称;

mysql> desc student3;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| id         | int(11)     | NO   | PRI | NULL    | auto_increment |
| teacher_id | int(11)     | YES  | UNI | NULL    |                |
| name       | varchar(20) | NO   |     | NULL    |                |
| sex        | varchar(10) | YES  |     | male    |                |
+------------+-------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
2.3表名称的修改

①alter table 旧表名 rename 新表名

mysql> alter table student3 rename student4;
Query OK, 0 rows affected (0.04 sec)

② rename table 旧表名 to 新表名

mysql> rename table user  to userinfo;
Query OK, 0 rows affected (0.05 sec)
 2.4表的删除

   drop table 表名

mysql> show tables;   #查询数据库现有的表
+-------------------+
| Tables_in_testdev |
+-------------------+
| dept_emp          |
| salaries          |
| student4          |
| test_float        |
| test_int_width    |
| test_time         |
| test_tinyint      |
| userinfo          |
+-------------------+
8 rows in set (0.00 sec)

mysql> drop table userinfo;   #删除表userinfo
Query OK, 0 rows affected (0.04 sec)

mysql> show tables;   #查询删除之后剩余的表
+-------------------+
| Tables_in_testdev |
+-------------------+
| dept_emp          |
| salaries          |
| student4          |
| test_float        |
| test_int_width    |
| test_time         |
| test_tinyint      |
+-------------------+
7 rows in set (0.00 sec)

3.表的管理

3.1修改字段名称   

格式:alter table 表名称 change 原字段名称 新字段名称 新字段类型

mysql> desc user;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | YES  |     | NULL    |       |
| name   | varchar(20) | YES  |     | NULL    |       |
| city   | varchar(20) | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

mysql> alter table user change city to_date date;
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc user;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(11)     | YES  |     | NULL    |       |
| name    | varchar(20) | YES  |     | NULL    |       |
| to_date | date        | YES  |     | NULL    |       |
| salary  | float       | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
3.2修改字段数据类型

格式:alter table 表名称 modify 字段名称 新字段类型

mysql> desc user;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(11)     | YES  |     | NULL    |       |
| name    | varchar(20) | YES  |     | NULL    |       |
| to_date | date        | YES  |     | NULL    |       |
| salary  | float       | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

mysql> alter table user modify id varchar(20);
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc user;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | varchar(20) | YES  |     | NULL    |       |
| name    | varchar(20) | YES  |     | NULL    |       |
| to_date | date        | YES  |     | NULL    |       |
| salary  | float       | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
 3.3添加字段
3.3.1添加字段(默认添加到最后)  alter table 表名 add 字段名称 字段数据类型
mysql> desc user;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | varchar(20) | YES  |     | NULL    |       |
| name    | varchar(20) | YES  |     | NULL    |       |
| to_date | date        | YES  |     | NULL    |       |
| salary  | float       | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.02 sec)

mysql> alter table user add city varchar(10) ;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc user;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | varchar(20) | YES  |     | NULL    |       |
| name    | varchar(20) | YES  |     | NULL    |       |
| to_date | date        | YES  |     | NULL    |       |
| salary  | float       | YES  |     | NULL    |       |
| city    | varchar(10) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

 

3.3.2添加字段在某一字段之后   alter table 表名 add 字段名称 字段数据类型 after 某一字段名称
mysql> desc user;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | varchar(20) | YES  |     | NULL    |       |
| name    | varchar(20) | YES  |     | NULL    |       |
| to_date | date        | YES  |     | NULL    |       |
| salary  | float       | YES  |     | NULL    |       |
| city    | varchar(10) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

mysql> alter table user add from_date date after name;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc user;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id        | varchar(20) | YES  |     | NULL    |       |
| name      | varchar(20) | YES  |     | NULL    |       |
| from_date | date        | YES  |     | NULL    |       |
| to_date   | date        | YES  |     | NULL    |       |
| salary    | float       | YES  |     | NULL    |       |
| city      | varchar(10) | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

 

3.3.3添加字段在第一个  alter table 表名 add  字段名称 字段数据类型 first
mysql> desc user;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id        | varchar(20) | YES  |     | NULL    |       |
| name      | varchar(20) | YES  |     | NULL    |       |
| from_date | date        | YES  |     | NULL    |       |
| to_date   | date        | YES  |     | NULL    |       |
| salary    | float       | YES  |     | NULL    |       |
| city      | varchar(10) | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

mysql> alter table user add stu_id varchar(20) first;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc user;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| stu_id    | varchar(20) | YES  |     | NULL    |       |
| id        | varchar(20) | YES  |     | NULL    |       |
| name      | varchar(20) | YES  |     | NULL    |       |
| from_date | date        | YES  |     | NULL    |       |
| to_date   | date        | YES  |     | NULL    |       |
| salary    | float       | YES  |     | NULL    |       |
| city      | varchar(10) | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

 

3.4.删除字段

alter table 表名 drop 列名

mysql> alter table user add stu_id varchar(20) first;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc user;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| stu_id    | varchar(20) | YES  |     | NULL    |       |
| id        | varchar(20) | YES  |     | NULL    |       |
| name      | varchar(20) | YES  |     | NULL    |       |
| from_date | date        | YES  |     | NULL    |       |
| to_date   | date        | YES  |     | NULL    |       |
| salary    | float       | YES  |     | NULL    |       |
| city      | varchar(10) | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

mysql> alter table user drop stu_id;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc user;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id        | varchar(20) | YES  |     | NULL    |       |
| name      | varchar(20) | YES  |     | NULL    |       |
| from_date | date        | YES  |     | NULL    |       |
| to_date   | date        | YES  |     | NULL    |       |
| salary    | float       | YES  |     | NULL    |       |
| city      | varchar(10) | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

 

 4.表数据的管理

4.1插入  insert
4.1.1单条数据的的插入

insert into 表名 values (插入的数据)

mysql> insert into user values(1,"tang","2020-03-13","9999-01-01",8997.9,"西安");
Query OK, 1 row affected (0.00 sec)

mysql> select * from user;
+------+------+------------+------------+--------+------+
| id   | name | from_date  | to_date    | salary | city |
+------+------+------------+------------+--------+------+
|    1 | tang | 2020-03-13 | 9999-01-01 | 8997.9 | 西安 |
+------+------+------------+------------+--------+------+

 

4.1.2多条数据的插入

insert into 表名 values  (插入的数据),(插入的数据),(插入的数据);

mysql> insert into user values
    -> (2,"zhangsan","2019-04-12","9999-01-01",8979.7,"北京"),
    -> (3,"lisi","2021-07-22","9999-01-01",6999.7,"杭州"),
    -> (4,"wangwu","2018-07-22","9999-01-01",9545.8,"咸阳");
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from user;
+------+----------+------------+------------+--------+------+
| id   | name     | from_date  | to_date    | salary | city |
+------+----------+------------+------------+--------+------+
|    1 | tang     | 2020-03-13 | 9999-01-01 | 8997.9 | 西安 |
|    2 | zhangsan | 2019-04-12 | 9999-01-01 | 8979.7 | 北京 |
|    3 | lisi     | 2021-07-22 | 9999-01-01 | 6999.7 | 杭州 |
|    4 | wangwu   | 2018-07-22 | 9999-01-01 | 9545.8 | 咸阳 |
+------+----------+------------+------------+--------+------+
4 rows in set (0.01 sec)

 

4.2  修改 update
4.2.1 修改字段某一数据  

update 表名 set 字段名 修改之后的数据 where 条件(这里的条件是单一的)

mysql> select * from user;
+------+----------+------------+------------+--------+------+
| id   | name     | from_date  | to_date    | salary | city |
+------+----------+------------+------------+--------+------+
|    1 | tang     | 2020-03-13 | 9999-01-01 | 8997.9 | 西安 |
|    2 | zhangsan | 2019-04-12 | 9999-01-01 | 8979.7 | 北京 |
|    3 | lisi     | 2021-07-22 | 9999-01-01 | 6999.7 | 杭州 |
|    4 | wangwu   | 2018-07-22 | 9999-01-01 | 9545.8 | 咸阳 |
+------+----------+------------+------------+--------+------+

 

如表user 我们想要修改id为4的字段city数据为“上海”

mysql> update user set city ="上海" where id=4;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

 

修改之后我们再执行select查询语句查看表user,"咸阳"以及更改为"上海"

mysql> select * from user;
+------+----------+------------+------------+--------+------+
| id   | name     | from_date  | to_date    | salary | city |
+------+----------+------------+------------+--------+------+
|    1 | tang     | 2020-03-13 | 9999-01-01 | 8997.9 | 西安 |
|    2 | zhangsan | 2019-04-12 | 9999-01-01 | 8979.7 | 北京 |
|    3 | lisi     | 2021-07-22 | 9999-01-01 | 6999.7 | 杭州 |
|    4 | wangwu   | 2018-07-22 | 9999-01-01 | 9545.8 | 上海 |
+------+----------+------------+------------+--------+------+
4 rows in set (0.00 sec)

 

4.2.2修改多个数据

①update 表名 set 字段名 修改之后的数据  where 条件 and 条件 (and表示两个或多个条件都要符合,只要其中一个条件不符合就不会执行)

mysql> select * from user;
+------+----------+------------+------------+--------+------+
| id   | name     | from_date  | to_date    | salary | city |
+------+----------+------------+------------+--------+------+
|    1 | tang     | 2020-03-13 | 9999-01-01 | 8997.9 | 西安 |
|    2 | zhangsan | 2019-04-12 | 9999-01-01 | 8979.7 | 北京 |
|    3 | lisi     | 2021-07-22 | 9999-01-01 | 6999.7 | 杭州 |
|    4 | wangwu   | 2018-07-22 | 9999-01-01 | 9545.8 | 上海 |
+------+----------+------------+------------+--------+------+
4 rows in set (0.00 sec)

 

我们想要修改id=4,name=lisi的salary为9999.9

执行:

mysql> update user set salary=9999.9 where name="lisi" and id=3;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

 

执行之后我们再去查询表user

mysql> select * from user;
+------+----------+------------+------------+--------+------+
| id   | name     | from_date  | to_date    | salary | city |
+------+----------+------------+------------+--------+------+
|    1 | tang     | 2020-03-13 | 9999-01-01 | 8997.9 | 西安 |
|    2 | zhangsan | 2019-04-12 | 9999-01-01 | 8979.7 | 北京 |
|    3 | lisi     | 2021-07-22 | 9999-01-01 | 9999.9 | 杭州 |
|    4 | wangwu   | 2018-07-22 | 9999-01-01 | 9545.8 | 上海 |
+------+----------+------------+------------+--------+------+
4 rows in set (0.00 sec)

 

②update 表名 set 字段名 修改之后的数据  where 条件 or 条件 (or表示两个或多个条件,只要其中一个条件符合就可以)

mysql> select * from user;
+------+----------+------------+------------+--------+------+
| id   | name     | from_date  | to_date    | salary | city |
+------+----------+------------+------------+--------+------+
|    1 | tang     | 2020-03-13 | 9999-01-01 | 8997.9 | 西安 |
|    2 | zhangsan | 2019-04-12 | 9999-01-01 | 8979.7 | 北京 |
|    3 | lisi     | 2021-07-22 | 9999-01-01 | 9999.9 | 杭州 |
|    4 | wangwu   | 2018-07-22 | 9999-01-01 | 9545.8 | 上海 |
+------+----------+------------+------------+--------+------+
4 rows in set (0.00 sec)

 

如我们像修改name为lisi或者id为4的city为“广州“

执行: 

mysql> update user set city="广州" where name="lisi" or id=4;
Query OK, 2 rows affected (0.01 sec)
Rows matched: 2  Changed: 2  Warnings: 0

 我们查询更改之后的表数据:

mysql> select * from user;
+------+----------+------------+------------+--------+------+
| id   | name     | from_date  | to_date    | salary | city |
+------+----------+------------+------------+--------+------+
|    1 | tang     | 2020-03-13 | 9999-01-01 | 8997.9 | 西安 |
|    2 | zhangsan | 2019-04-12 | 9999-01-01 | 8979.7 | 北京 |
|    3 | lisi     | 2021-07-22 | 9999-01-01 | 9999.9 | 广州 |
|    4 | wangwu   | 2018-07-22 | 9999-01-01 | 9545.8 | 广州 |
+------+----------+------------+------------+--------+------+
4 rows in set (0.00 sec)

 

4.3 删除 delete
4.3.1单条件删除

delete from 表名 where 删除条件

mysql> select * from user;
+------+----------+------------+------------+--------+------+
| id   | name     | from_date  | to_date    | salary | city |
+------+----------+------------+------------+--------+------+
|    1 | tang     | 2020-03-13 | 9999-01-01 | 8997.9 | 西安 |
|    2 | zhangsan | 2019-04-12 | 9999-01-01 | 8979.7 | 北京 |
|    3 | lisi     | 2021-07-22 | 9999-01-01 | 9999.9 | 广州 |
|    4 | wangwu   | 2018-07-22 | 9999-01-01 | 9545.8 | 广州 |
+------+----------+------------+------------+--------+------+
4 rows in set (0.00 sec)

 

如我们像删除name为lisi的表数据

delete from user where name="lisi"

 

查询删除之后的表数据:

mysql> select * from user;
+------+----------+------------+------------+--------+------+
| id   | name     | from_date  | to_date    | salary | city |
+------+----------+------------+------------+--------+------+
|    1 | tang     | 2020-03-13 | 9999-01-01 | 8997.9 | 西安 |
|    2 | zhangsan | 2019-04-12 | 9999-01-01 | 8979.7 | 北京 |
|    4 | wangwu   | 2018-07-22 | 9999-01-01 | 9545.8 | 广州 |
+------+----------+------------+------------+--------+------+
3 rows in set (0.00 sec)

 

4.3.2 多条件删除

delete from 表名 where 多个条件(这里的条件可以是and关系,也可以使or关系)

mysql> delete from user where id=4 and city="广州";
Query OK, 1 row affected (0.01 sec)

mysql> delete from user where id=1 or name="zhangsan";
Query OK, 2 rows affected (0.01 sec)

 

posted @ 2021-11-23 11:22  特昂糖-  阅读(82)  评论(0)    收藏  举报