2024.08.17 day06-MySQL学习笔记
前言
前面说过,三层架构,其中dao层用于操作数据。在上面的项目中,数据放在了xml文件中。在企业开发中,数据一般存储在数据库中,我们直接对数据库操作。今天就学习如何操作数据库。
首先来了解一下什么是数据库。
- 数据库:英文为 DataBase,简称DB,它是存储和管理数据的仓库。
像我们日常访问的电商网站京东,企业内部的管理系统OA、ERP、CRM这类的系统,以及大家每天都会刷的头条、抖音类的app,那这些大家所看到的数据,其实都是存储在数据库中的。最终这些数据,只是在浏览器或app中展示出来而已,最终数据的存储和管理都是数据库负责的。
可以这么理解,只要是个应用,都会用到数据库。
数据是存储在数据库中的,那我们要如何来操作数据库以及数据库中所存放的数据呢?
那这里呢,会涉及到一个软件:数据库管理系统(DataBase Management System,简称DBMS)
- DBMS是操作和管理数据库的大型软件。将来我们只需要操作这个软件,就可以通过这个软件来操纵和管理数据库了。
此时又出现一个问题:DBMS这个软件怎么知道要操作的是哪个数据库、哪个数据呢?是对数据做修改还是查询呢?
- 需要给DBMS软件发送一条指令,告诉这个软件我们要执行的是什么样的操作,要对哪个数据进行操作。而这个指令就是SQL语句
SQL(Structured Query Language,简称SQL):结构化查询语言,它是操作关系型数据库的编程语言,定义了一套操作关系型数据库的统一标准。我们学习数据库开发,最为重要的就是学习SQL语句 。
关系型数据库:我们后面会详细讲解,现在大家只需要知道我们学习的数据库属于关系型数据库即可。
这里需要知道两个名词
- DB:数据库
- DBMS:数据库管理系统,这是一个软件,用于操作数据库
- SQL:这个是数据库操作语言。
结论:程序员给数据库管理系统(DBMS)发送SQL语句,再由数据库管理系统操作数据库当中的数据。
我们用DBMS发生SQL操作数据库的数据
- Oracle:大型的收费数据库,Oracle公司产品,价格昂贵。(通常是不差钱的公司会选择使用这个数据库)
- MySQL:开源免费的中小型数据库,后来Sun公司收购了MySQL,而Oracle又收购了Sun公司。目前Oracle推出两个版本的Mysql:社区版(开源免费)、商业版(收费)。
- SQL Server:Microsoft 公司推出的收费的中型数据库,C#、.net等语言常用。
- PostgreSQL:开源免费的中小型数据库。
- DB2:IBM公司的大型收费数据库产品。
- SQLLite:嵌入式的微型数据库。Android内置的数据库采用的就是该数据库。
- MariaDB:开源免费的中小型数据库。是MySQL数据库的另外一个分支、另外一个衍生产品,与MySQL数据库有很好的兼容性。
目前有很多数据库。他们都是使用sql语言的。常用的还是MySQL
数据库概述
安装
下载安装
我之前学习过数据库。最让我头疼的是数据库的安装。我是在官网上下载的exe执行文件。打开后都是英语。很头疼。今天学习到了一种新的方式,去官网下载zip压缩文件,解压即安装。
点开下面的链接:https://dev.mysql.com/downloads/mysql/,在【Select Version】处选择需要下载的MySQL版本;在【Select Operating System】选择电脑的操作系统;
因为下载的是MySQL的压缩包。所以点击【Windows (x86, 64-bit), ZIP Archive】旁边的【Download】等待下载完成。
完成后选择一个目录解压压缩包即可完成安装,相比于一大堆英语,这个已经是很简单了,
配置
添加环境变量
我的MySQL解压目录是D:\Develop\mysql-8.0.31-winx64
打开环境变量,新增系统变量MYSQL_HOME
,如下
- 变量名:
MYSQL_HOME
- 变量值:
D:\Develop\mysql-8.0.31-winx64
随后双击打开系统变量中的path变量,添加%MYSQL_HOME%\bin
打开cmd,运行命令mysql
如果出现提示,安装成功
PS C:\Users\yang> mysql
ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)
虽然这个提示是错误的,的是可以确定的是MySQL的环境配置成功了。
初始化MySQL
以管理员的方式运行cmd,执行如下命令:
mysqld --initialize-insecure
执行完成后,会在MySQL目录下生成一个data目录
注册MySQL服务
还是执行命令如下
mysqld -install
PS C:\Users\yang> mysqld -install
Service successfully installed.
successfully成功,现在你的计算机上已经安装好了MySQL服务了。
启动MySQL服务
在黑框里敲入net start mysql
,回车。
net start mysql // 启动mysql服务
net stop mysql // 停止mysql服务
修改默认账户密码
在黑框里敲入mysqladmin -u root password 000000
,000000
就是指默认管理员(即root账户)的密码,可以自行修改成你喜欢的。一般学习的话,最好是000000
mysqladmin -u root password 000000
连接MySQL
以上内容完成后,就可以连接数据库了。命令如下:
mysql -u用户名 -p密码 [-h数据库服务器的IP地址 -P端口号]
-h 参数不加,默认连接的是本地 127.0.0.1 的MySQL服务器
-P 参数不加,默认连接的端口号是 3306
上述指令,可以有两种形式:
密码直接在-p参数之后直接指定 (这种方式不安全,密码直接以明文形式出现在命令行)
密码在-p回车之后,在命令行中输入密码,然后回车
数据模型
关系型数据库:
关系型数据库(RDBMS)
概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。
而所谓二维表,指的是由行和列组成的表,如下图:
mysql属于关系型数据库。也有非关系型数据库。
关系型数据库类似于表格,excel电子表格
二维表的优点:
使用表存储数据,格式统一,便于维护
使用SQL语言操作,标准统一,使用方便,可用于复杂查询
数据模型:
接下来,了解一下MySQL的数据模型
MySQL是关系型数据库,是基于二维表进行数据存储的,具体的结构图下:
- 通过MySQL客户端连接数据库管理系统DBMS,然后通过DBMS操作数据库
- 使用MySQL客户端,向数据库管理系统发送一条SQL语句,由数据库管理系统根据SQL语句指令去操作数据库中的表结构及数据
- 一个数据库服务器中可以创建多个数据库,一个数据库中也可以包含多张表,而一张表中又可以包含多行记录。
在Mysql数据库服务器当中存储数据,你需要:
- 先去创建数据库(可以创建多个数据库,之间是相互独立的)
- 在数据库下再去创建数据表(一个数据库下可以创建多张表)
- 再将数据存放在数据表中(一张表可以存储多行数据)
SQL简介
SQL:结构化查询语言。一门操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准。
上面提到过好很多数据库。只要是关系型数据库。无论是什么。都执行的SQL语言。
SQL通用语法
1、SQL语句可以单行或多行书写,以分号结尾。
2、SQL语句可以使用空格/缩进来增强语句的可读性。
3、MySQL数据库的SQL语句不区分大小写。
4、注释:
- 单行注释:-- 注释内容 或 # 注释内容(MySQL特有)
- 多行注释: /* 注释内容 */
以上就是SQL语句的通用语法,这些通用语法大家目前先有一个直观的认识,我们后面在讲解每一类SQL语句的时候,还会再来强调通用语法。
上面是一些语法特点。后面在写sql语句的时候就会体现出来。
分类
SQL语句根据其功能被分为四大类:DDL、DML、DQL、DCL
分类 全称 说明 DDL Data Definition Language 数据定义语言,用来定义数据库对象(数据库,表,字段) DML Data Manipulation Language 数据操作语言,用来对数据库表中的数据进行增删改 DQL Data Query Language 数据查询语言,用来查询数据库中表的记录 DCL Data Control Language 数据控制语言,用来创建数据库用户、控制数据库的访问权限
SQL语言是一个统称,他还能细分。
创建数据库表或者字段,就是数据定义语言DDL;
对数据表中的数据进行增删改没有查操作,就是数据操作语言,DML
查询数据库表中的数据,把操作这个操作单独出来了,数据查询语言,DQL
DCL,数据控制语言,是对数据库的操作。
数据库设计-DDL
项目开发流程
需求文档:
- 在我们开发一个项目或者项目当中的某个模块之前,会先会拿到产品经理给我们提供的页面原型及需求文档。
设计:
- 拿到产品原型和需求文档之后,我们首先要做的不是编码,而是要先进行项目的设计,其中就包括概要设计、详细设计、接口设计、数据库设计等等。
- 数据库设计根据产品原型以及需求文档,要分析各个模块涉及到的表结构以及表结构之间的关系,以及表结构的详细信息。最终我们需要将数据库以及数据库当中的表结构设计创建出来。
开发/测试:
- 参照页面原型和需求进行编码,实现业务功能。在这个过程当中,我们就需要来操作设计出来的数据库表结构,来完成业务的增删改查操作等。
部署上线:
- 在项目的功能开发测试完成之后,项目就可以上线运行了,后期如果项目遇到性能瓶颈,还需要对项目进行优化。优化很重要的一个部分就是数据库的优化,包括数据库当中索引的建立、SQL 的优化、分库分表等操作。
软件开发流程会在大学的软件工程概论中学到,这里面包含很多知识。也包含上面的内容
软件开发中,先有需求文档,确定做什么;设计,用例图、流程图、数据库什么的。开发项目测试项目,然后上线。之前学习过一点点软件工程概论。
知不知道与学习数据库没有关系。
在上述的流程当中,针对于数据库来说,主要包括三个阶段:
- 数据库设计阶段
- 参照页面原型以及需求文档设计数据库表结构
- 数据库操作阶段
- 根据业务功能的实现,编写SQL语句对数据表中的数据进行增删改查操作
- 数据库优化阶段
- 通过数据库的优化来提高数据库的访问性能。优化手段:索引、SQL优化、分库分表等
设计数据库,操作数据表,优化SQL语句。这三部分是比较注重的e
数据库操作
查询数据库
查询所有数据库:
SHOW DATABASES;
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
目前这四个数据库都是系统内置的数据库。
如果创建了数据库,在执行这个命令,就会有你建的数据库 了、
查询当前数据库
SELECT DATABASE();
创建数据库
CREATE DATABASE [ IF NOT EXISTS ] 数据库名;
执行命令CREATE DATABASE database_demo01;
就是创建一个数据库名是database_demo01
的数据库。执行完后会有ok的提示
mysql> CREATE DATABASE database_demo01;
Query OK, 1 row affected (0.01 sec)
[ IF NOT EXISTS ]
,如果不存在就创建。不能创建两个同名的数据库,为了避免这个问题,就可以加上上面这条指令
CREATE DATABASE IF NOT EXISTS database_demo01;
执行上面的命令后,代码不会出现error,会有一个warning
mysql> CREATE DATABASE IF NOT EXISTS database_demo01;
Query OK, 1 row affected, 1 warning (0.00 sec)
如果数据库被重复创建,会有ERROR 1007 (HY000)
报错,还会有提示音。
mysql> CREATE DATABASE database_demo01;
ERROR 1007 (HY000): Can't create database 'database_demo01'; database exists
在后面的命令中还会出现IF EXISTS
的选择,大部分都是加上,避免出现错误。
使用数据库
USE 数据库名;
USE database_demo01;
切换到刚刚创建的database_demo01
,执行命令后会有Database changed
提示,表示切换成功
mysql> USE databasee_demo01;
Database changed
删除数据库
DROP DATABASE [ IF EXISTS ] 数据库名
删除一个不存在的数据库或报错,为了解决这个问题,加上IF EXISTS
比如删除数据库database_demo01
DROP DATABASE IF EXISTS database_demo01;
命令执行后会有提示Query OK, 0 rows affected (0.01 sec)
删除成功
mysql> CREATE DATABASE database_demo01;
Query OK, 1 row affected (0.01 sec)
表操作
会创建数据库了,接下来就是对表的操作。库是多张表的集合。
关于表结构的操作也是包含四个部分:创建表、查询表、修改表、删除表。
创表
语法
create table 表名(
字段1 字段1类型 [约束] [COMMENT 字段1注释 ],
字段2 字段2类型 [约束] [COMMENT 字段2注释 ],
......
字段n 字段n类型 [约束] [COMMENT 字段n注释 ]
) [ COMMENT 表注释 ] ;
[]
属于可选。最后一个字段没有逗号。
比如说我要创建一个user表,他的结构如下
id
、username
、name
、age
、gender
、
CREATe TABLE user (
id INT COMMENT 'ID,唯一标识', # id是一行数据的唯一标识(不能重复)
username VARCHAR(20) COMMENT '用户名',
name VARCHAR(10) COMMENT '姓名',
age INT COMMENT '年龄',
gender char(1) COMMENT '性别'
) COMMENT '用户表';
COMMENT
是一个注释,这个注释sql语句是会识别的。
而#
也是注释,这个就是给我自己看的
id是唯一标识,但是现在你可以输入两个相同的id,这是因为没有约束限制。
约束
概念:所谓约束就是作用在表中字段上的规则,用于限制存储在表中的数据。
作用:就是来保证数据库当中数据的正确性、有效性和完整性。(后面的学习会验证这些)
在MySQL数据库当中,提供了以下5种约束:
约束 描述 关键字 非空约束 限制该字段值不能为null not null 唯一约束 保证字段的所有数据都是唯一、不重复的 unique 主键约束 主键是一行数据的唯一标识,要求非空且唯一 primary key 默认约束 保存数据时,如果未指定该字段值,则采用默认值 default 外键约束 让两张表的数据建立连接,保证数据的一致性和完整性 foreign key 注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。
约束,对字段有一些限制。
比如说还是user表,
id
:是一行的唯一标识username
:不能为空且唯一;name
:不能为空、age
:没有要求;gender
:默认男
CREATe TABLE user (
id INT PRIMARY KEY COMMENT 'ID,唯一标识', # id是一行数据的唯一标识(不能重复)
username VARCHAR(20) NOT NULL UNIQUE COMMENT '用户名',
name VARCHAR(10) NOT NULL COMMENT '姓名',
age INT COMMENT '年龄',
gender char(1) DEFAULT '男' COMMENT '性别'
) COMMENT '用户表';
这就是一个添加约束的例子。
id其实可以自己填写。自增
主键自增:auto_increment
- 每次插入新的行记录时,数据库自动生成id字段(主键)下的值
- 具有auto_increment的数据列是一个正数序列开始增长(从1开始自增)
因此修改上面的代码
CREATe TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID,唯一标识', # id是一行数据的唯一标识(不能重复),自动增长
username VARCHAR(20) NOT NULL UNIQUE COMMENT '用户名',
name VARCHAR(10) NOT NULL COMMENT '姓名',
age INT COMMENT '年龄',
gender char(1) DEFAULT '男' COMMENT '性别'
) COMMENT '用户表';
数据类型
MySQL中的数据类型主要分为三类:数值类型、字符串类型、日期时间类型。
数值类型
类型 | 大小 | 有符号(SIGNED)范围 | 无符号(UNSIGNED)范围 | 描述 |
---|---|---|---|---|
TINYINT | 1byte | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2bytes | (-32768,32767) | (0,65535) | 大整数值 |
MEDIUMINT | 3bytes | (-8388608,8388607) | (0,16777215) | 大整数值 |
INT/INTEGER | 4bytes | (-2147483648,2147483647) | (0,4294967295) | 大整数值 |
BIGINT | 8bytes | (-263,263-1) | (0,2^64-1) | 极大整数值 |
FLOAT | 4bytes | (-3.402823466 E+38,3.402823466351 E+38) | 0 和 (1.175494351 E-38,3.402823466 E+38) | 单精度浮点数值 |
DOUBLE | 8bytes | (-1.7976931348623157 E+308,1.7976931348623157 E+308) | 0 和 (2.2250738585072014 E-308,1.7976931348623157 E+308) | 双精度浮点数值 |
DECIMAL | 依赖于M(精度)和D(标度)的值 | 依赖于M(精度)和D(标度)的值 | 小数值(精确定点数) |
示例: 年龄字段 ---不会出现负数, 而且人的年龄不会太大 age tinyint unsigned 分数 ---总分100分, 最多出现一位小数 score double(4,1)
字符串类型
类型 | 大小 | 描述 |
---|---|---|
CHAR | 0-255 bytes | 定长字符串(需要指定长度) |
VARCHAR | 0-65535 bytes | 变长字符串(需要指定长度) |
TINYBLOB | 0-255 bytes | 不超过255个字符的二进制数据 |
TINYTEXT | 0-255 bytes | 短文本字符串 |
BLOB | 0-65 535 bytes | 二进制形式的长文本数据 |
TEXT | 0-65 535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215 bytes | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295 bytes | 极大文本数据 |
char 与 varchar 都可以描述字符串,char是定长字符串,指定长度多长,就占用多少个字符,和字段值的长度无关 。而varchar是变长字符串,指定的长度为最大占用长度 。相对来说,char的性能会更高些。
示例: 用户名 username ---长度不定, 最长不会超过50 username varchar(50) 手机号 phone ---固定长度为11 phone char(11)
日期时间类型
类型 | 大小 | 范围 | 格式 | 描述 |
---|---|---|---|---|
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:01 至 2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值,时间戳 |
示例: 生日字段 birthday ---生日只需要年月日 birthday date 创建时间 createtime --- 需要精确到时分秒 createtime datetime
内容看起来有很多,我觉得作为了解就可以了。反正我是记不住
设计表流程
阅读页面原型及需求文档
基于页面原则和需求文档,确定原型字段(类型、长度限制、约束)
再增加表设计所需要的业务基础字段(id主键、插入时间、修改时间)
查询
查询数据库中的所有表
SHOW TABLES;
mysql> SHOW TABLES;
+---------------------------+
| Tables_in_database_demo01 |
+---------------------------+
| user |
+---------------------------+
1 row in set (0.00 sec)
可以看出目前数据库database_demo01
中只有一张数据表user
查看指定表结构
DESC 表名;
mysql> DESC user;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| username | varchar(20) | NO | UNI | NULL | |
| name | varchar(10) | NO | | NULL | |
| age | int | YES | | NULL | |
| gender | char(1) | YES | | 男 | |
+----------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
查看user表中的结构。
查询指定表的建表语句
SHOW CREATE TABLE 表名 ;
这个会输出创建表的sql代码
修改
添加字段
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];
比如在用户表中添加一个邮箱的字段
ALTER TABLE user ADD email VARCHAR(20) COMMENT '邮箱';
mysql> ALTER TABLE user ADD email VARCHAR(20) COMMENT '邮箱';
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
执行后输出ok,那么就是完成了。可以用DESC user
看一下表结构。
修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
其实对比这两个命令,就可以发现第一条就是用于改数据类型;第二种用于只要你指定了要修改的字段,就可以任意修改
先说第一种,
mysql> ALTER TABLE user MODIFY name CHAR(6);
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
修改了user
表中name
的数据类型,改成了char(6)
再说第二种,修改字段名但是不修改数据类型
mysql> ALTER TABLE user CHANGE age userAge CHAR(2) COMMENT '用户年龄char类型' NOT NULL default '18';
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
修改了字段名和数据类型,还可以添加约束,不放心有没有修改成功,可以查看一下表结构。
mysql> DESC user;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| username | varchar(20) | NO | UNI | NULL | |
| name | char(6) | YES | | NULL | |
| userAge | char(2) | NO | | 18 | |
| gender | char(1) | YES | | 男 | |
| email | varchar(20) | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+
删除字段
ALTER TABLE 表名 DROP 字段名;
mysql> ALTER TABLE user DROP email;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
删除字段email
修改表名
RENAME TABLE 表名 TO 新表名;
mysql> RENAME TABLE user TO user_table;
Query OK, 0 rows affected (0.01 sec)
修改表名。可以用SHOW TABLES;
命令查看有没有修改成功
mysql> SHOW TABLES;
+---------------------------+
| Tables_in_database_demo01 |
+---------------------------+
| user_table |
+---------------------------+
1 row in set (0.00 sec)
删除
删除表语法:
DROP TABLE [IF EXISTS] 表名;
if exists :只有表名存在时才会删除该表,表名不存在,则不执行删除操作(如果不加该参数项,删除一张不存在的表,执行将会报错)。
删除数据表user
mysql> DROP TABLE IF EXISTS user_table;
Query OK, 0 rows affected (0.01 sec)
也可以用SHOW TABLES;
命令查看有没有删除成功
mysql> SHOW TABLES;
Empty set (0.00 sec)
空的
数据库操作-DML
DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增、删、改操作。
- 添加数据(INSERT)
- 修改数据(UPDATE)
- 删除数据(DELETE)
这里学的基本上都是命令,这些命令一时间记不住,敲着敲着就会了。
增加(insert)
insert语法:
-
向指定字段添加数据
INSERT INTO 表名 (字段名1, 字段名2) VALUES (值1, 值2);
-
全部字段添加数据
INSERT INTO 表名 VALUES (值1, 值2, ...);
-
批量添加数据(指定字段)
INSERT INTO 表名 (字段名1, 字段名2) VALUES (值1, 值2), (值1, 值2);
-
批量添加数据(全部字段)
INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...);
接下来,一一演示;给emp表添加数据,emp表是employee的缩写,员工表;emp表结构如下
CREATE TABLE emp (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT 'ID',
username VARCHAR(20) NOT NULL UNIQUE COMMENT '用户名',
password VARCHAR(32) DEFAULT '123456' COMMENT '密码',
name VARCHAR(10) NOT NULL COMMENT '姓名',
gender TINYINT UNSIGNED NOT NULL DEFAULT '1' COMMENT '性别, 说明: 1 男, 2 女',
image VARCHAR(300) COMMENT '图像',
job TINYINT UNSIGNED COMMENT '职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管',
entrydate DATE COMMENT '入职时间',
create_time DATETIME NOT NULL COMMENT '创建时间',
update_time DATETIME NOT NULL COMMENT '修改时间'
) COMMENT '员工表';
mysql> DESC emp;
+-------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+----------------+
| id | int unsigned | NO | PRI | NULL | auto_increment |
| username | varchar(20) | NO | UNI | NULL | |
| password | varchar(32) | YES | | 123456 | |
| name | varchar(10) | NO | | NULL | |
| gender | tinyint unsigned | NO | | 1 | |
| image | varchar(300) | YES | | NULL | |
| job | tinyint unsigned | YES | | NULL | |
| entrydate | date | YES | | NULL | |
| create_time | datetime | NO | | NULL | |
| update_time | datetime | NO | | NULL | |
+-------------+------------------+------+-----+---------+----------------+
10 rows in set (0.00 sec)
给指定字段添加数据,通过DESC emp
命令发现username
、name
、gender
、create_time
和update_time
是不可以为空的,所以给这几个字段增加数据
INSERT INTO emp(username, name, gender, create_time, update_time)
VALUES ('wuji', '张无忌', 1, now(), now());
数据插入成功后,会有提示Query OK, 1 row affected (0.01 sec)
给全部字段添加数据
INSERT INTO emp VALUES (null, 'zhirou', '123', '周芷若', 2, '1.jpg', 1, '2010-01-01', now(), now());
批量指定字段添加数据
INSERT INTO emp(username, name, gender, create_time, update_time)
VALUES ('weifuwang', '韦一笑', 1, now(), now()),
('fengzi', '张三疯', 1, now(), now());
批量给全部字段添加数据
INSERT INTO emp VALUES
(NULL, 'changyuchun', '123456', '常遇春', 1, '2.jpg', 2, '2012-12-05',now(), now()),
(NULL , 'xiaozhao', '123456', '小昭', 2, '3.jpg', 3, '2013-09-05', now(), now());
修改(update)
update语法:
UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , .... [WHERE 条件] ;
注意事项:
修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
在修改数据时,一般需要同时修改公共字段update_time,将其修改为当前操作时间。
比如修改姓名是小昭的密码
UPDATE emp SET password='xiaozhao000' WHERE name='小昭';
删除(delete)
delete语法:
DELETE FROM 表名 [WHERE 条件] ;
注意事项:
• DELETE 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。
• DELETE 语句不能删除某一个字段的值(可以使用UPDATE,将该字段值置为NULL即可)。
• 当进行删除全部数据操作时,会提示询问是否确认删除所有数据,直接点击Execute即可。
清空这张表
DELETE FROM emp;
删除小昭这条数据
DELETE FROM emp WHERE name='小昭';
总结
数据库对应用开发还是很重要的,是离不开的
命令很多,但是不需要记住。用到了就查。另外也可以使用可视化工具,
UES
(NULL, ‘changyuchun’, ‘123456’, ‘常遇春’, 1, ‘2.jpg’, 2, ‘2012-12-05’,now(), now()),
(NULL , ‘xiaozhao’, ‘123456’, ‘小昭’, 2, ‘3.jpg’, 3, ‘2013-09-05’, now(), now());
## 修改(update)
update语法:
```sql
UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , .... [WHERE 条件] ;
注意事项:
修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
在修改数据时,一般需要同时修改公共字段update_time,将其修改为当前操作时间。
比如修改姓名是小昭的密码
UPDATE emp SET password='xiaozhao000' WHERE name='小昭';
删除(delete)
delete语法:
DELETE FROM 表名 [WHERE 条件] ;
注意事项:
• DELETE 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。
• DELETE 语句不能删除某一个字段的值(可以使用UPDATE,将该字段值置为NULL即可)。
• 当进行删除全部数据操作时,会提示询问是否确认删除所有数据,直接点击Execute即可。
清空这张表
DELETE FROM emp;
删除小昭这条数据
DELETE FROM emp WHERE name='小昭';
总结
数据库对应用开发还是很重要的,是离不开的
命令很多,但是不需要记住。用到了就查。另外也可以使用可视化工具,