java开发学习-数据库(1)

2021-08-16 11:33:33 浏览数 (1)

sql11-Java开发学习-数据库篇

1.为什么要学习数据库

京东商城

淘宝商城

因为作为软件开发领域来讲,一个软件必须要保证:活!

数据是灵活的,是动态的,而不是写死的!

数据库量大的问题

数据安全问题

等等一系列问题……

我们破解希望需要一种方式(软件)帮我们解决上面这些问题

那么这种技术叫做-数据库技术!

2.数据库介绍

2.1.数据库的概念

数据库(DataBase,DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合。(文件系统)

数据库管理系统(DataBaseManagement System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中的数据。

数据库软件应该为数据库管理系统,数据库是通过数据库管理系统创建和操作的。

数据库:存储、维护和管理数据的集合。

2.2.数据库的分类

Mysql(重点)

Oracle(重点)

Sql Server(了解)

DB2

PostgreSQL

  • MySQL数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database ManagementSystem,关系数据库管理系统) 应用软件。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。

例如 Oracle、DB2、SQLServer等相比,MySQL [1] 自有它的不足之处,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于 MySQL是开放源码软件,因此可以大大降低总体拥有成本。

Linux作为操作系统,Apache 或Nginx作为 Web 服务器,MySQL 作为数据库,PHP/Perl/Python作为服务器端脚本解释器。由于这四个软件都是免费或开放源码软件(FLOSS),因此使用这种方式不用花一分钱(除开人工成本)就可以建立起一个稳定、免费的网站系统,被业界称为“LAMP“或“LNMP”组合。

MySQL 是开源的,所以你不需要支付额外的费用。

Mysql的两个小插曲:

Mysql之父[U1]

Mysql的兄弟- mariaDB

国外软件产品特点

mariaDB[U2] 简介

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB(英语:XtraDB)来代替MySQL的InnoDB。 MariaDB由MySQL的创始人Michael Widenius(英语:Michael Widenius)主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。MariaDB名称来自Michael Widenius的女儿Maria的名字。

MariaDB基于事务的Maria存储引擎,替换了MySQL的MyISAM存储引擎,它使用了Percona的 XtraDB,InnoDB的变体,分支的开发者希望提供访问即将到来的MySQL 5.4 InnoDB性能。这个版本还包括了 PrimeBase XT (PBXT) 和 FederatedX存储引擎。

国外产品特点:

it人士吗,可能内心缺少关爱,因为这些动物的话,更亲和,可以毫无顾忌的聊聊天,发泄一下。

  • Oracle数据库

甲骨文公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989年正式进入中国市场。2013年,甲骨文已超越 IBM ,成为继 Microsoft 后全球第二大软件公司。 [1]

2017年6月7日发布的2017年美国《财富》500强,甲骨文公司排名第81位。 [2] 2017年6月,《2017年BrandZ最具价值全球品牌100强》公布,甲骨文公司排名第46位。 [3]

甲骨文介绍:

https://baike.baidu.com/item/甲骨文公司/430115?fr=aladdin

  • SqlServer数据库

SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的膝上型电脑到运行MicrosoftWindows 2012 的大型多处理器的服务器等多种平台使用。

Microsoft SQLServer 是一个全面的数据库平台,使用集成的商业智能 (BI)工具提供了企业级的数据管理。Microsoft SQLServer 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。

SQL Server 是一个关系数据库管理系统。它最初是由Microsoft、Sybase 和Ashton-Tate三家公司共同开发的,于1988 年推出了第一个OS/2版本。在Windows NT 推出后,Microsoft与Sybase 在SQL Server 的开发上就分道扬镳了,Microsoft 将SQL Server移植到Windows NT系统上,专注于开发推广SQL Server 的Windows NT 版本。Sybase 则较专注于SQL Server在UNⅨ操作系统上的应用。

SQL Server 2000 是Microsoft 公司推出的SQL Server数据库管理系统,该版本继承了SQL Server 7.0 版本的优点,同时又比它增加了许多更先进的功能。具有使用方便可伸缩性好与相关软件集成

程度高等优点,可跨越从运行Microsoft Windows 98 的膝上型电脑到运行MicrosoftWindows 2000 的大型多处理器的服务器等多种平台使用。

其它数据库产品:

• DB2:IBM的产品。

• SQL Server:Microsoft的产品。软件界面友好、易学易用,在操作性和交互性方面独树一帜。

• PostgreSQL:加州大学伯克利分校以教学目的开发的数据库系统,支持关系和面向对象的数据库,属于自由数据库管理系统。

3.数据库的安装

3.1.基本步骤

a)下载Mysql数据库软件

https://www.mysql.com/

b)安装Mysql

*安装

*参照图解

*一路下一步

* 配置

*参照图解

*到选择字符集时停

登录Mysql:

mysql -u root -p

*卸载

1.停止mysql服务 net stop mysql 启动mysql服务 net start mysql

2.卸载mysql

3.找到mysql 安装目录下的 my.ini datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"

*修改密码

运行cmd

*安装成功了打开cmd --> mysql -uroot -p你的密码

*修改mysql root用户密码

1) 停止mysql服务 运行输入services.msc 停止mysql服务

或者 cmd --> net stop mysql

2)在cmd下 输入 mysqld --skip-grant-tables 启动服务器光标不动 (不要关闭该窗口)

3)新打开cmd 输入mysql -u root -p 不需要密码

usemysql;

updateuser set password=password('abc') WHERE User='root';

4)关闭两个cmd窗口 在任务管理器结束mysqld 进程

5)在服务管理页面 重启mysql 服务

密码修改完成

4.数据库其它知识点介绍

4.1.数据库软件、数据库、表的关系

l 所谓安装数据库服务器,只是在机器上装了一个数据库管理程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。

l 为保存应用中实体的数据,一般会在数据库创建 多个表,以保存程序中实体的数据。

l 数据库服务器、数据库和表的关系如图所示:

4.2.数据在数据库中的存储方式

4.3.如何操作数据库

数据库管理系统可以通过SQL(结构化查询语言)来定义和操作数据,维护数据的完整性和安全性,以及进行各种数据库的管理等。

5.Sql的介绍

5.1.Sql的概念

SQL:Structure Query Language。

SQL被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后来被国际化标准组织(ISO)采纳为关系数据库语言的国际标准。

SQL优点:

不是某个特定数据库供应商专有的语言。几乎所有重要的数据库管理系统都支持SQL。

简单易学,该语言的语句都是由描述性很强的英语单词组成,且这些单词的数目不多。

高度非过程化,即用SQL操作数据库,只需指出“做什么”,无须指明“怎么做”,存取路径的选择和操作的执行由DBMS自动完成

5.2.常见sql的使用

  • 创建数据库
  • 创建数据库中的数据表
  • 给表中添加数据
  • 查询表中数据
  • 对表数据进行修改
  • 对表数据进行删除

增删改查

5.3.创建数据库

create database mydb1;

以上代码代表:创建了一个叫:mydb1的数据库

Showdatabases;

注意点:在敲终端里面敲这些mysql命令的时候,每一行命令后面,必须要带有;否则会出问题

在命令后面 ;在后面一行再添加上;

  • 在命令后面 ;
  • 在后面一行再添加上;

接下来思考:上面的这些代码都是在命令行工具中编写的,所以问题很大,因为都没有任何的提示,一不小心,手一抖,一切就game over了!

【mysql客户端工具】

  • SqlYog
  • Navicat for MySql

注意:以上两款工具都是收费版本

5.4.创建数据库中的数据表

5.4.1.基本语法

create table 表名(

字段1 字段类型,

字段2 字段类型,

...

字段n 字段类型

);

思考:为何创建数据库的语法辣么简单,但是创建表的语法却又辣么难呢?

创建表练习:

字段名

id

整型

name

字符串

gender

字符型

birthday

日期型

salary

浮点型

创建表的步骤:

  • 选择数据库
  • 在选择的数据库上创建表

5.4.2.创建表的代码实战:

查看创建了哪些表

Show tables;

5.5给数据表添加数据

5.1.步骤:

1)选择数据库

2)选择数据表

3)给指定数据库的指定表添加数据

5.2.添加数据的基本语法

INSERT

语法: INSERT INTO 表名(列名1,列名2 ...)VALUES(列值1,列值2...);

注意:

  • 列名与列值的类型、个数、顺序要一一对应。
  • 可以把列名当做java中的形参,把列值当做实参。
  • 值不要超出列定义的长度。
  • 如果插入空值,请使用null
  • 插入的日期和字符一样,都使用引号括起来。
  • Int类型的不能使用引号引起来,字符串相关的类型,引号是单引号

5.3.代码实战:

如何查看表中数据

Select * from tb_user;

【小练习】:

创建一个商品表

给商品表插入10条记录

5.6.查询表中数据

5.6.1.基本查询

查询所有列

SELECT* FROM stu;

查询指定列

SELECTsid, sname, age FROM stu;

5.6.2.条件查询

5.6.2.1.条件查询介绍
5.6.2.2.条件查询实战
5.6.2.2.1.条件查询介绍

条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:

l =、!=、<>、<、<=、>、>=;

l BETWEEN…AND; (在什么范围之间)

l IN(set);(在什么里面)

l IS NULL; IS NOT NULL

l AND;(与)

l OR; (或)

l NOT; (非)

5.6.2.2.2.条件查询
1)基本查询

条件查询使用关键字 where

查询练习题:

  1. 1. 查询性别为男,并且年龄为20的学生记录
  2. 2. 查询学号是1001或者名字是关羽的记录
  3. 3. 查询学号是1001,1002,1003的记录
  4. 4. 查询姓名为null的记录
  5. 5. 查询姓名不为null的学生记录
  6. 6. 查询年龄在18-20之间的学生记录
  7. 7. 查询性别非男的学生记录

查询性别为男,并且年龄为20的学生记录

SELECT * FROM tb_user WHERE gender='男' AND age = 20

查询学号是1001或者名字是关羽的记录

SELECT * from tb_user WHERE id=1001 OR `name`='关羽'

查询学号是1001,1002,1003的记录

SELECT * from tb_user WHERE id=1001 or id=1002 or id=1003

查询姓名为null的记录

查询姓名不为null的学生记录

SELECT * from tb_user WHERE `name` IS NOT NULL;

查询年龄在18-20之间的学生记录

SELECT * from tb_user WHERE age>=18 AND age<=20

查询性别非男的学生记录

2)取别名

给数据表中的每一列取别名

SELECT id AS '编号',name as '姓名',age as '年龄',gender as '性别',department as '部门' from tb_user

3)去重查询 distinct

如果在一个数据表中有两个相同name的信息

SELECT DISTINCT `name` from tb_user

4)排序

对查询出来的结果进行排序

排序:升序(ASC) 降序(DESC)

降序

5)聚合函数

对查询的结果进行统计计算

5.1.count => 总记录数

SELECT COUNT(salary) from tb_user; -- 统计这张表里面salary的总记录数

Count 练习题

查询tb_user表中总记录数

查询tb_user表中工资大于2500的总人数

SELECT COUNT(*) from tb_user WHERE salary>2500;

5.2.Sum =>计算出总和

SELECT SUM(salary) as '员工工资总和' from tb_user

5.3.AVG => 求出平均值

SELECT AVG(salary) as '平均值' from tb_user;

5.4.MAX=> 计算出最大值

SELECT MAX(salary) from tb_user;

5.5.MIN=> 计算出最小值

6)分组查询

将查询结构按照1个或者多个字段进行分组,字段值相同的为一组

生活场景:在这里有一堆人,有女人和男人,根据性别进行分组

6.1.基本分组查询

仔细观察:直接使用group by 进行分组之后,发现数据,只显示每一组的第一条数据的!

所以group by单独使用,没有任何意义!

分组的注意事项:在group by 后面出现的字段和select仅挨着的保持一致!

6.2.高级分组(聚合函数)

SELECT department,GROUP_CONCAT(`name`) from tb_user GROUP BY department

SELECT department,GROUP_CONCAT(`name`),SUM(salary) as '每一组工资总和' from tb_user GROUP BY department

分组的小练习:

查询每个部门的名称和每个部门工资总和

SELECT department,GROUP_CONCAT(salary),SUM(salary) from tb_user GROUP BY department;

查询每个部门的名称和每个部门的人数

查询每个部门的部门名称以及每个部门工资大于1500的人数

6.3.高级分组(having)

对分组之后的数据进行条件过滤!

-- 查询工资总和大于9000的部门名称

Where 和having的区别

8)select查询书写顺序

7)模糊查询

根据指定的关键字进行查询

使用like关键后跟通配符进行查询

通配符:

_ 任意一个字符

% 任意 0-n个字符

查询姓名由5个字符构成的学生记录

SELECT * from tb_user WHERE `name` LIKE '_____'

查询姓名由5个字符构成,并且第5个字符为”醉”

SELECT * from tb_user WHERE `name` LIKE '____醉'

查询姓名以’关’开头的学生记录

SELECT * from tb_user WHERE `name` LIKE '关%'

查询姓名中第2个字母为”关”的学生记录

SELECT * from tb_user WHERE `name` LIKE '_关%'

查询姓名中包含”二”

8)分页查询

limit子句(方言)

LIMIT用来限定查询结果的起始行,以及总行数。

例如:查询起始行为第5行,一共查询3行记录

SELECT * FROM emp LIMIT 4, 3;

--> 其中4表示从第5行开始,其中3表示一共查询3行。即第5、6、7行记录。

select * from emp limit 0, 5;

select * from product limit ?,12

1. 一页的记录数:10行

2. 查询第3页

select * from emp limit 20, 10;

(当前页-1) * 每页记录数

(3-1) * 10

(17-1) * 8, 8

5.7.修改表中数据

UPDATE

5.7.1.基本语法

UPDATE 表名 SET 列名1=列值1,列名2=列值2 。。。 WHERE 列名=值

5.7.2.代码实战

上面代码执行完毕后,全部都废了,因为表中所有数据都被改掉了

所以请在修改的时候一定要慎重!!!

5.8.删除表中数据

5.8.1.基本语法

delete from 表明

例如:delete from tb_user;

在进行删除操作的时候,一定要务必慎重!!!

5.8.2.代码实战

这个代码会删掉整张表以及表中所有数据

所以在删除操作的时候,请一定一定要加上 where条件

5.9.数据完整性

5.9.1.为何要保证数据完整性

5.9.2.数据完整性介绍

5.9.3.处理数据完整性方案分类

5.9.3.1实体完整性
5.9.3.1.1.实体完整性概述

表中的一行(一条记录)代表一个实体(entity)

实体完整性的作用:标识每一行数据不重复,行级约束

添加约束,对实体数据进行约束!

5.9.3.1.2.实体完整性约束类型
1)主键约束

特点:每个表中要有一个主键

数据唯一,且不能为null

方式1:

方式2:可以在后面再去指定主键对应哪一个字段

CREATE TABLE tb_student( id int, name VARCHAR(50), PRIMARY KEY(id))

方式3:联合主键

可以使用多个字段进行组合起来,作为主键

方式4:先创建好表,再去给表添加主键

ALTER TABLE tb_student ADD CONSTRAINT PRIMARY KEY(id)

2)唯一约束

特点:

列中数据不能重复

可以为null值

方式1:在创建表时候指定unique

create TABLE tb_person

3)自动增长约束

指定列的数据自动增长

即使数据删除,下次再添加新数据进去,序号从删除后的开始,而不是从头开始!

create TABLE tb_people(

5.9.3.2.域完整性
5.9.3.2.1.域完整性介绍

限制单元格的数据正确,不对照此列的其它单元格比较

域代表当前单元格

5.9.3.2.2.域完整性约束分类
1.数据类型

数值类型、日期类型、字符串类型

2.非空约束

Not null

3.默认值约束

Default

CREATE TABLE tb_xx

5.9.4.参照(引用)完整性

5.9.4.1.为何需要参照完整性
5.9.4.2.参照完整性概述

表与表之间的一种对应关系

通常情况下可以通过设置两表之间的主键、外键关系、或者编写两张表的触发器来实现

数据库的主键和外键类型必须要一致

设置参照完整性后,外键当中的内值,必须得是主键的内容

有对应参照完整性的两张表格,在对他们进行数据插入、更新、删除的过程中,系统都会被将修改的与另外一张表格进行对照,从而阻止一些不正确的数据的操作

5.9.4.3.参照完整性实战
5.9.4.3.1.主外键关联

方式1:添加表时候添加主外键关联

CREATE TABLE tb_student( id int PRIMARY KEY, name VARCHAR(50), age int) CREATE TABLE tb_score( sid int PRIMARY KEY, score int, CONSTRAINT sc_st_fk FOREIGN KEY(sid) REFERENCES tb_student(id))

当两张表进行了主外键关联后,表中的数据,就不能乱添加了

方式2:表已经创建好了,修改表结构添加主外键

5.6.表与表之间的关系

5.6.1.一对一关系

生活中:中国一夫一妻制

5.6.2.一对多关系

生活中:

一个学生可以考试很多个分数

一个人可以拥有很多辆车

CREATE TABLE tb_person( id int PRIMARY KEY auto_increment, name VARCHAR(50)) CREATE TABLE tb_car( cid int, name VARCHAR(100), color VARCHAR(50), CONSTRAINT c_p_fk FOREIGN KEY(cid) REFERENCES tb_person(id))

一对多关系图:

5.6.3.多对多关系

生活中场景:

一个学生可以选择多门选修课,每门课程可以供多个学生选择

一个学生可以有多个老师,一个老师也可以有多个学生

CREATE TABLE tb_teacher( tid int PRIMARY KEY, name VARCHAR(100)) CREATE TABLE tea_stu_rel( tid int, sid int) -- 修改表结构添加主外键 ALTER TABLE tea_stu_rel ADD CONSTRAINT FOREIGN KEY(tid) REFERENCES tb_teacher(tid); ALTER TABLE tea_stu_rel ADD CONSTRAINT 主外键的组合名称[n5] FOREIGN KEY(sid) REFERENCES tb_student(sid);

思考:为何要把这些数据,进行拆分来处理呢?也就是说为何要拆分表呢??难道一个表不行吗?

5.7.拆分表

因为如果不拆分表,会造成大量的冗余数据(多余的)

约束主要是针对添加操作的,查询的时候,仅仅是把数据从数据库取出来而已!所以跟约束没有任何关系!

5.8.多表查询

5.8.1.合并结果集

5.8.1.1.基本概念

合并结果集

就是把两个select语句的结果集直接拼凑在一起

5.8.1.2.方式

Union 合并去除相同数据

SELECT * from a UNION SELECT * from b;

Union all 不会去除相同数据

SELECT * from a UNION ALL SELECT * from b;

5.8.2.连接查询

5.8.2.1.连接查询概念

连表查询,也叫作:跨表查询,需要关联多张表进行查询

5.8.2.2.笛卡尔积[n6] 概念

SELECT * FROMtb_teacher,tb_student;

如何解决笛卡尔积现象? 多表连查

查询的时候给表取别名

如何进行多表连查,保证数据正确性?

在查询要把主键的外键保持一致

主表当中的数据参照子表的数据

SELECT * FROM tb_student,tb_score where tb_student.sid = tb_score.id[n7]

5.8.2.3.连接方式
5.8.2.3.1.内连接

其实就是上面表连接一种另外写法

SELECT * from tb_student s INNER JOIN tb_score sc ON s.sid= sc.id

5.8.2.3.2.外连接

当两张表中的数据条数不相同的时候,如果直接使用内连接就会出现问题的

经过观察:小张是缺考的!!

SELECT * from tb_student st INNER JOIN tb_score sc on st.sid = sc.id

1)左外连接

查询左边的全部数据,右边的只查询出满足条件的!

2)右外连接

查询右边的全部数据,左边的只查询出满足条件的!

SELECT * from tb_student st RIGHT OUTER JOIN tb_score sc on st.sid = sc.id;

左右连接其实就是查询的时候,正好相反而已!!

sql语句如下所示:

代码语言:javascript复制
/*
Navicat MySQL Data Transfer

Source Server         : zengyu
Source Server Version : 50617
Source Host           : localhost:3306
Source Database       : db1

Target Server Type    : MYSQL
Target Server Version : 50617
File Encoding         : 65001

Date: 2021-08-03 19:36:34
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `tb_user`
-- ----------------------------
DROP TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `gender` varchar(255) DEFAULT NULL,
  `department` varchar(255) DEFAULT NULL,
  `salary` decimal(65,0) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of tb_user
-- ----------------------------
INSERT INTO `tb_user` VALUES ('1001', '吕布', '10', '男', '人事部', '500');
INSERT INTO `tb_user` VALUES ('1002', '张飞', '20', '男', '人事部', '100');
INSERT INTO `tb_user` VALUES ('1003', '诸葛亮', '30', '女', '计谋部', '800');
INSERT INTO `tb_user` VALUES ('1004', '刘备', '20', '男', '傻逼部', '700');
INSERT INTO `tb_user` VALUES ('1005', '小乔', '18', '女', '美女部', '500');
INSERT INTO `tb_user` VALUES ('1006', '大乔', '20', '女', '美女部', '1500');
INSERT INTO `tb_user` VALUES ('1007', '貂蝉', '20', '女', '美女部', '20000');
INSERT INTO `tb_user` VALUES ('1008', '关羽', '100', '男', '将军部', '15000');
INSERT INTO `tb_user` VALUES ('1009', null, '120', '男', '计谋部', '300');
INSERT INTO `tb_user` VALUES ('1010', null, '10', '女', '计谋部', '100');
INSERT INTO `tb_user` VALUES ('1011', '关小羽', '30', '男', '将军部', '290');
INSERT INTO `tb_user` VALUES ('1012', '桃花定终生', '11', '人妖', '销售部', '900');
INSERT INTO `tb_user` VALUES ('1013', '桃花定一生', '12', '人妖', '销售部', '7000');
INSERT INTO `tb_user` VALUES ('1014', '花落红颜醉', '15', '人妖', '后勤部', '8500');
INSERT INTO `tb_user` VALUES ('1015', '关关雎鸠', '100', '人妖', '服务部', '900');
INSERT INTO `tb_user` VALUES ('1016', '王二丫', '45', '女', '公关部', '3400');
INSERT INTO `tb_user` VALUES ('1017', '九五二七', '190', '男', '公关部', '6500');
INSERT INTO `tb_user` VALUES ('1018', '王二小', '10', '男', '喝酒部', '3200');
INSERT INTO `tb_user` VALUES ('1019', '董卓', '90', '男', '喝酒部', '200000');
INSERT INTO `tb_user` VALUES ('1020', '诸葛亮', '100', '男', '采购部', '1000');


[U1]https://news.cnblogs.com/n/577472/

[U2]https://baike.baidu.com/item/mariaDB/6466119?fr=aladdin

[n3]也可以添加在字段和别名之间使用空格分开

[n4]主键不能为null

主键不能重复

一个表可以没有任何主键

[n5]可以省略不写

[n6]https://baike.baidu.com/item/笛卡尔乘积/6323173?fr=aladdin

[n7]99查询法

0 人点赞