学习指南
数据库
也叫做数据库管理系统(Database Management System),简称DBMS。是由数据库及其管理软件组成的系统,用来集中,结构化的管理数据。
数据库常见名词:
数据库(Database)
数据库管理系统(Database Management System)[简称:DBMS]
数据库管理员(Database Administrator)[简称DBA]
数据库开发人员(Database Developer)[简称DBD]
和在linux中一样,数据库中也是通过一条条命令来对数据进行操作的。linux中有命令,而MySQL数据库是通过SQL语句来对其进行操作的,你想玩MySQL,就得先搞明白这是个啥语句。
对于数据库和数据表,你可以把其当成是一本书和其中的章节。一个数据库是一本书,数据库中的每一个数据表都是一个章节,一个章节中可以有若干内容。
SQL语句
结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
SQL从功能上可以分为3部分:数据定义、数据操纵和数据控制。
结构化查询语言包含6个部分
1、数据查询语言(DQL):其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出,使用SELECT来实现。
2、数据操作语言(DML):其语句包括动词INSERT、UPDATE和DELETE。它们分别用于记录的添加、修改和删除。
3、事务控制语言(TCL):它的语句能确保被DML语句影响的表的所有行及时得以更新。包括COMMIT(提交)命令、SAVEPOINT(保存点)命令、ROLLBACK(回滚)命令。
4、数据控制语言(DCL):它的语句通过GRANT或REVOKE实现权限控制,确定单个用户和用户组对数据库对象的访问。
5、数据定义语言(DDL):其语句包括动词CREATE,ALTER和DROP。在数据库中创建新表或修改、删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。
6、指针控制语言(CCL):用于对一个或多个表单独行的操作。
登录MySQL
注:数据库版本8.0.13
对于刚安装完成的MySQL,默认是空密码登录,直接输入mysql即可进入到数据库中。
mysql
对于这种直接可以登录的,都设置了相关的路径优化,要么把mysql安装目录/bin/*在PATH路径中创建一个软连接,要么将其写入到了/etc/profile文件中的PATH路径。
对于没有优化路径的数据库,只能通过绝对路径的方式进入
/usr/local/mysql/bin/mysql
直接exit退出数据库
mysql> exit
Bye
设置数据库管理员密码
为了安全考虑,我们需要给root设置一个登录数据库密码(root就是数据库管理员啊),当然对于练习来说,没有太大的必要,不过命令还是要知道的。
mysqladmin -u root password "test.com"
#命令关键字 -u 指定用户 password "密码内容"
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
其中有一个警告,说的是在命令行中显示明文密码不安全,这个不用管,密码已经设置成功了。
再次登录mysql数据库测试
mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
数据库拒绝root访问,在设置完密码后,空密码就无法登录了。
接下来输入密码登录数据库中
不安全登录方式:
mysql -u root -ptest.com
mysql: [Warning] Using a password on the command line interface can be insecure.
#每次在命令行中输入密码都会输出不安全警告
相对安全登录方式:
mysql -u root -p
Enter password:
默认存在数据库说明
在初始化数据库后,有四个默认存在的数据库
mysql> show databases; #查看数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
information_schema:数据库中的信息数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权 限等。
mysql:存储数据库中用户信息,权限信息及mysql需要使用的控制和管理信息。
performance_schema:主要用于收集数据库服务器性能参数。
sys:sys库里面的表、视图、函数、存储过程可以使我们更方便、快捷的了解到MySQL的一些信息,比如哪些语句使用了临时表、哪个SQL没有使用索引、哪个schema中有冗余索引、查找使用全表扫描的SQL、查找用户占用的IO等,sys库里这些视图中的数据,大多是从performance_schema里面获得的。目标是把performance_schema的复杂度降低,让我们更快的了解DB的运行情况。
数据库基础操作
DDL语句操作
DDL是数据定义语言的缩写,简单来说,就是对数据库内部的对象进行创建,删除,修改等操作的语言。它和DML语句的最大区别是DML只是对表内部数据操作,而不涉及表的定义,结构的修改,更不会涉及其他对象。DDL语句更多地由数据库管理员(DBA)使用,开发人员一般很少使用。
注:数据库中默认不严格区分大小写
查看帮助
这是功能简直是健忘者的福音,和linux中使用命令 --help一样,在linux中也有这个语法帮助。
语法:help 命令
就拿show来说,看看命令可以跟的参数及语法。
mysql> help show;
Name: 'SHOW'
Description:
SHOW has many forms that provide information about databases, tables,
columns, or status information about the server. This section describes
those following:
SHOW {BINARY | MASTER} LOGS
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
SHOW CHARACTER SET [like_or_where]
SHOW COLLATION [like_or_where]
SHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [like_or_where]
SHOW CREATE DATABASE db_name
SHOW CREATE EVENT event_name
SHOW CREATE FUNCTION func_name
SHOW CREATE PROCEDURE proc_name
SHOW CREATE TABLE tbl_name
SHOW CREATE TRIGGER trigger_name
SHOW CREATE VIEW view_name
SHOW DATABASES [like_or_where]
SHOW ENGINE engine_name {STATUS | MUTEX}
SHOW [STORAGE] ENGINES
SHOW ERRORS [LIMIT [offset,] row_count]
SHOW EVENTS
SHOW FUNCTION CODE func_name
SHOW FUNCTION STATUS [like_or_where]
SHOW GRANTS FOR user
SHOW INDEX FROM tbl_name [FROM db_name]
SHOW MASTER STATUS
SHOW OPEN TABLES [FROM db_name] [like_or_where]
SHOW PLUGINS
SHOW PROCEDURE CODE proc_name
SHOW PROCEDURE STATUS [like_or_where]
SHOW PRIVILEGES
SHOW [FULL] PROCESSLIST
SHOW PROFILE [types] [FOR QUERY n] [OFFSET n] [LIMIT n]
SHOW PROFILES
SHOW RELAYLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
SHOW SLAVE HOSTS
SHOW SLAVE STATUS [FOR CHANNEL channel]
SHOW [GLOBAL | SESSION] STATUS [like_or_where]
SHOW TABLE STATUS [FROM db_name] [like_or_where]
SHOW [FULL] TABLES [FROM db_name] [like_or_where]
SHOW TRIGGERS [FROM db_name] [like_or_where]
SHOW [GLOBAL | SESSION] VARIABLES [like_or_where]
SHOW WARNINGS [LIMIT [offset,] row_count]
like_or_where:
LIKE 'pattern'
| WHERE expr
If the syntax for a given SHOW statement includes a LIKE 'pattern'
part, 'pattern' is a string that can contain the SQL % and _ wildcard
characters. The pattern is useful for restricting statement output to
matching values.
Several SHOW statements also accept a WHERE clause that provides more
flexibility in specifying which rows to display. See
http://dev.mysql.com/doc/refman/8.0/en/extended-show.html.
URL: http://dev.mysql.com/doc/refman/8.0/en/show.html
查看数据库
使用show databases即可查看数据库,后面的;是书写格式,
mysql> show databases;
查看数据库的几种方式
正常查看方式:show databases;
以行的方式查看:show databases \G
也可以在shell环境中查看: mysql -e ‘show databases’ -uroot -ptest.com
-e可以输入sql语句,使用’'扩住,-u输入用户名,-p输入密码
创建数据库
语法:create database 数据库名称;
创建个库试试看
mysql> create database test;
Query OK, 0 rows affected (0.07 sec)
出现Query OK字样就表示执行成功,若出现ERROR字样,你的语句就出现了错误。
在对数据库命名的时候,名称中不能有特殊符号,例如:!@#¥%……等等,_例外。也不能以纯数字命名,而对字母没有限制。
如果非要带有特殊字符或纯数字的话,可以使用``将其括住,那样就创建成功了。
mysql> create database `@_@`;
使用特殊符号创建的库,查看数据库存放目录,我所创建的@_@变成了什么。
ls /data/mysql/data/ #内容只列举了包含创建库目录的一些内容
@0040_@0040 binlog.index ib_logfile0 private_key.pem
@0040_@0040就是我创建的@_@,和在数据库中的具体名称不匹配,不建议使用特殊符号。
切换数据库
语法:use 数据库名称;
mysql> use test;
对数据库的所有操作,都是在进入到数据库进行的,默认没有进入任何一个库中,只能对数据库进行创建,进入数据库后,就能添加表,添加数据等数据了。
删除数据库
语法:drop database 数据库名称;
drop database test;
对于数据的删除操作需要谨慎使用,以免对数据造成“不可逆”损失,虽说大多数情况下都可以通过二进制文件恢复或通过备份恢复,但误删除的恢复还是很麻烦不是,删除慎用啊!!!
数据表基础操作
在说明如何创建表之前,要先来了解一下字段类型,类型对于表的创建必不可少,定义了可以存储什么类型的数据。
数据类型
数据类型是数据的一种属性,其可以决定数据的存储格式,有效范围和相应的限制。mysql的数据类型包括整数类型,浮点数类型,日期和时间类型,字符串类型和二进制类型。
浮点数型与整数类型和为一类,字符串类型与二进制类型和为一类。所以大致可以分为三类:数值、日期/时间和字符串(字符)类型。
数值类型
类型 | 大小 | 范围 | 用途 |
---|---|---|---|
TINYINT | 1 字节 | (-128,127) | 小整数值 |
SMALLINT | 2 字节 | (-32 768,32 767) | 大整数值 |
MEDIUMINT | 3 字节 | (-8 388 608,8 388 607) | 大整数值 |
INT或INTEGER | 4 字节 | (-2 147 483 648,2 147 483 647) | 大整数值 |
BIGINT | 8 字节 | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | 极大整数值 |
FLOAT | 4 字节 | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 单精度,浮点数值 |
DOUBLE | 8 字节 | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度,浮点数值 |
日期和时间类型
类型 | 大小 | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3字节 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3字节 | ‘-838:59:59’/‘838:59:59’ | HH:MM:SS | 时间值或持续时间 |
YEAR | 1字节 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8字节 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4字节 | 1970-01-01 00:00:00/2038,结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
字符串类型
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255字节 | 定长字符串 |
VARCHAR | 0-65535 字节 | 变长字符串 |
TINYBLOB | 0-255字节 | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255字节 | 短文本字符串 |
BLOB | 0-65 535字节 | 二进制形式的长文本数据 |
TEXT | 0-65 535字节 | 长文本数据 |
MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
创建数据表
语法:create table 表名(字符名 类型,字段名 类型,字段名 类型);
在创建表的时候,需要进入到库中,否则将会报错,以下是创建一个名为test_table的表
mysql> use test;
Database changed
mysql> create table test_table(id int(20),name char(20),age int);
对于字段的数据类型,要根据实际情况来自行选择,拿我创建的age字段来说,其数据类型为int,一个人的年龄最多也就130岁,而我给的数据类型范围极大,这就显得类型极不合适,而且其大小为4字节,数据越多,越浪费存储资源。建议将age改为TINYINT类型即可,最大为127,大小为1字节。当然,自己的宝贝疙瘩,想怎么定义怎么定义。
也可为表指定存储引擎和字符集在插入语法后面添加即可。
例如:指定存储引擎为InnoDB,字符集为utf8
mysql> create table test2(id int(10),name char(20),age int) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected, 1 warning (0.10 sec)
其实默认存储引擎和字符集就是InnoDB和utf8,使用show create table 表名即可查看。
查看数据表
使用使用show tables即可查看库中的表
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test_table |
+----------------+
1 row in set (0.00 sec)
使用desc 表名来查看表的结构
mysql> desc test_table;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(20) | YES | | NULL | |
| name | char(20) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
使用show create table 表名可查看创建表执行了哪些命令
mysql> show create table test_table;
修改数据表
修改表名
语法:alter table 表名 rename 新表名;
将创建的test_table表改为hahaha
mysql> alter table test_table rename hahaha;
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| hahaha |
+----------------+
1 row in set (0.00 sec)
修改表的字段类型
语法:alter table 表名 modify 要修改的字段名要修改的类型;
先看看原有表中的字段类型
mysql> desc hahaha;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(20) | YES | | NULL | |
| name | char(20) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
修改字段name的char(20)字段类型为char(10)
mysql> alter table hahaha modify name char(10);
Query OK, 0 rows affected (0.46 sec)
Records: 0 Duplicates: 0 Warnings: 0
再次查看表的结构
mysql> desc hahaha;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(20) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
修改表中的字段类型和字段名称
语法:alter table 表名 change 原字段名 新字段名 新字段类型;
将字段id名称改为uid,新字段类型改为int(11)
mysql> alter table hahaha change id uid int(11);
Query OK, 0 rows affected (0.07 sec)
Records: 0 Duplicates: 0 Warnings: 0
再次查看数据表结构
mysql> desc hahaha;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| uid | int(11) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
CHANGE 和MODIFY的区别:
CHANGE 对列进行重命名和更改列的类型,需给定旧的列名称和新的列名称、当前的类型。 MODIFY 可以改变列的类型,此时不需要重命名(不需给定新的列名称)。
在表中添加字段
语法:alter table 表名 add字段名 字段类型;
在hahaha表中添加sex字段
mysql> alter table hahaha add sex enum('M','W');
这个enum字段类型是枚举,用于限定值的取值范围,只能在值中选择一个,是男不是女,是女不是男。
查看表结构
mysql> desc hahaha;
+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| uid | int(11) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | enum('M','W') | YES | | NULL | |
+-------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
sex字段就添加进去了,其类型为enum。
在表中第一列添加字段
mysql> alter table hahaha add id int(10) first;
Query OK, 0 rows affected (0.19 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc hahaha;
+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| id | int(10) | YES | | NULL | |
| uid | int(11) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | enum('M','W') | YES | | NULL | |
+-------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
在指定字段位置后面添加字段
语法:alter table 表名 add 字段 字段类型 after 指定字段位置;
先看看现在的表结构
mysql> desc hahaha;
+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| id | int(10) | YES | | NULL | |
| uid | int(11) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | enum('M','W') | YES | | NULL | |
+-------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
sex后面添加一个test字段,字段类型为char(10)
mysql> alter table hahaha add test char(10) after sex;
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
再次查看表结构
mysql> desc hahaha;
+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| id | int(10) | YES | | NULL | |
| uid | int(11) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | enum('M','W') | YES | | NULL | |
| test | char(10) | YES | | NULL | |
+-------+---------------+------+-----+---------+-------+
6 rows in set (0.01 sec)
删除数据表
删除表中字段
语法:alter table 表名 drop 字段名;
将表hahaha中的test字段删除
mysql> alter table hahaha drop test;
Query OK, 0 rows affected (0.10 sec)
Records: 0 Duplicates: 0 Warnings: 0
删除数据表
格式:drop table 表名;
把我们创建的hahaha表删除
mysql> drop table hahaha;
Query OK, 0 rows affected (0.36 sec)
查看数据库中的表
mysql> show tables;
Empty set (0.00 sec)
本来就一个表,删除了之后什么都没得了,还是那句话,删除操作慎用。
if exists和if no exists
这是个if语句,功能如其名称,如果存在则执行什么操作,如果不存在则执行什么操作,可以避免创建或删除数据库时产生的报错。
语法:创建或删除语句 if [not] exists 数据库名称
如果hahaha数据库不存在则创建
mysql> create database if not exists hahaha;
Query OK, 1 row affected (0.14 sec)
如果hahaha数据库存在则删除
mysql> drop database if exists hahaha;
Query OK, 0 rows affected (0.11 sec)
表中数据操作
DML语句操作
DML操作是指对数据库中表记录的操作,主要包括表记录的插入(insert),更新(update),删除(delete)和查询(select),是开发人员日常使用最为频繁的操作
插入记录
语法:insert into 表名 values(字段值1,字段值2,字段值3);
重新创建一个表,用于说明插入字段
mysql> create table staff(id int(20),name char(40),age int);
在其中添加一条记录
insert into staff values(1,'张三',21);
字符串类型字段在插入的时候需要加上引号,要不然就会输出错误。
也可同时插入多条记录
语法:insert into 表名 values(记录1),(记录2)
mysql> insert into staff values(2,'李四',22),(3,'王五',23);
或者分开插入表记录
语法:insert into 表名(字段1,字段2)values(值1,值2)
mysql> insert into staff (id,name,age)values(4,'赵六',24);
查询记录
DQL语句
语法:select * from 表名称
注:*号表示表中所有的字段,可将其换成指定字段
有两种查询方式,1)是进入数据库中查询
mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from staff;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | 张三 | 21 |
| 2 | 李四 | 22 |
| 3 | 王五 | 23 |
| 4 | 赵六 | 24 |
+------+--------+------+
4 rows in set (0.00 sec)
2)在其他库中查询表,在刚进入数据库管理系统中,默认是没有进入任何库中的。直接使用select * from staff会产生报错。
mysql> select * from staff;
ERROR 1046 (3D000): No database selected
这个情况,将表名部分修改一下就OK了。
修改后语法:select * from 库名称.表名称
我们使用那种语法试试看
mysql> select * from test.staff;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | 张三 | 21 |
| 2 | 李四 | 22 |
| 3 | 王五 | 23 |
| 4 | 赵六 | 24 |
+------+--------+------+
4 rows in set (0.00 sec)
这样就OK了。
刚才单独说明了*是查看所有字段,可以单独查询字段记录。
mysql> select id from test.staff;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
+------+
4 rows in set (0.00 sec)
除非有特殊需求,通常情况下都是查看全部记录,当然,输入字段也可实现效果,只不过比较麻烦。
mysql> select id,name,age from test.staff;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | 张三 | 21 |
| 2 | 李四 | 22 |
| 3 | 王五 | 23 |
| 4 | 赵六 | 24 |
+------+--------+------+
4 rows in set (0.00 sec)
使用select还可以查看一些别的数据,例如:登录用户,系统时间等等。
例如:查看时间,用户和数据库
mysql> select now(),user(),database();
+---------------------+----------------+------------+
| now() | user() | database() |
+---------------------+----------------+------------+
| 2020-04-18 16:05:54 | root@localhost | test |
+---------------------+----------------+------------+
1 row in set (0.00 sec)
更新记录
语法:update 表名 set 新字段=新值 where 原字段=原值
mysql> select * from staff;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | 张三 | 21 |
| 2 | 李四 | 22 |
| 3 | 王五 | 23 |
| 4 | 赵六 | 24 |
+------+--------+------+
4 rows in set (0.00 sec)
结合实例你就理解如何使用了,例如将id为1记录的age更新为31。
mysql> update staff set age=31 where id=1;
update:语句关键字
staff:表名
set:语句关键字
age=31:更新字段
where:条件
id=1:原字段
mysql> select * from staff;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | 张三 | 31 |
| 2 | 李四 | 22 |
| 3 | 王五 | 23 |
| 4 | 赵六 | 24 |
+------+--------+------+
4 rows in set (0.00 sec)
再次查看,字段已经更新了,如果不指定条件,则会对所有记录的字段进行更改。
例如:将所有记录的age字段改为18
mysql> update staff set age=18;
Query OK, 4 rows affected (0.11 sec)
Rows matched: 4 Changed: 4 Warnings: 0
mysql> select * from staff;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | 张三 | 18 |
| 2 | 李四 | 18 |
| 3 | 王五 | 18 |
| 4 | 赵六 | 18 |
+------+--------+------+
4 rows in set (0.00 sec)
同时更新多个字段的值
在set后面写入更新字段即可,使用,分隔
将赵六的id改为233,age改为23
mysql> update staff set id=233,age=23 where name='赵六';
Query OK, 1 row affected (0.09 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from staff;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | 张三 | 18 |
| 2 | 李四 | 18 |
| 3 | 王五 | 18 |
| 233 | 赵六 | 23 |
+------+--------+------+
4 rows in set (0.00 sec)
删除记录
语法:delete from 表名 where 字段=值
注:这个其中的where是条件的意思,由你指定删除什么条件的字段,此项可以省略,则会删除所有记录。
删除id为233的记录
mysql> delete from staff where id=233;
Query OK, 1 row affected (0.05 sec)
mysql> select * from staff;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | 张三 | 18 |
| 2 | 李四 | 18 |
| 3 | 王五 | 18 |
+------+--------+------+
3 rows in set (0.00 sec)
删除所有记录
mysql> delete from staff ;
Query OK, 3 rows affected (0.01 sec)
mysql> select * from staff;
Empty set (0.00 sec)
命令总结
主要命令 | 作用 |
---|---|
show | 查询库和表 |
create | 创建库和表 |
use | 进入数据库 |
drop | 删除库和表 |
alter | 修改数据表 |
desc | 查询表结构 |
insert | 插入记录 |
select | 查询记录 |
update | 修改记录 |
delete | 删除记录 |
若觉得对你有帮助,点赞支持一下哦