mysql数据库应用
数据库基础知识在系统环境变量里面的path路径下添加MySQLservicesbin简单来说它是一种以 “表格Table” 为核心来存储数据的数据库数据被组织成一张张类似 Excel 表格的结构并且表与表之间可以通过 “关系”比如外键关联起来。这里的 “关系” 有两层含义数据存储的 “表格关系”数据按行记录和列字段整齐排列就像 Excel 里的工作表结构清晰。表与表之间的关联关系不同的表可以通过共同的字段比如用户 ID建立联系避免数据重复存储保证数据一致性。举个例子你做一个小程序的用户系统会有两张表user 表存用户的 ID、昵称、手机号order 表存订单的 ID、用户 ID、订单金额两张表通过 user_id 字段关联就能知道每个订单属于哪个用户这就是 “关系” 的体现。概念通俗解释作用举例表Table数据库里的“工作表”就像 Excel 里的 Sheet比如user表存所有用户数据行Row/记录表中的一条数据对应 Excel 里的一行比如id1、name张三、phone138xxxx这一条数据列Column/字段表中的一个属性对应 Excel 里的一列比如name、phone、age这些属性主键Primary Key表中用来唯一标识一条记录的字段比如user_id每个用户的ID都是唯一的不会重复外键Foreign Key用来关联其他表的字段建立表与表的关系订单表的user_id关联用户表的id知道订单属于哪个用户索引Index类似书的目录能大幅加快数据查询速度给phone字段建索引按手机号查用户会快很多约束Constraint给字段加的规则保证数据的合法性比如age字段设置CHECK(age0)不能存负数年龄常见的关系型数据库数据库特点适用场景MySQL开源免费、轻量、社区活跃性能优秀中小项目、小程序、Web 后端你正在装的就是它PostgreSQL开源免费、功能强大支持复杂查询和高级特性中大型项目、数据仓库、地理信息系统Oracle功能极强、稳定性高企业级首选银行、金融、大型企业核心系统收费昂贵SQL Server微软出品和 .NET 生态适配好Windows 平台的企业项目、ASP.NET 开发SQLite轻量、无服务器文件型数据库手机APP、桌面软件、嵌入式设备本地存储SQL基础通用规则大小写不敏感关键字SELECT/FROM大写小写都行推荐关键字大写表名/列名小写代码更清晰。例select * from user和SELECT * FROM user效果完全一样。语句必须以分号;结尾这是 SQL 语句的结束标志多条语句必须用分号分隔。注释写法通用单行注释-- 注释内容两个横杠 空格多行注释/* 注释内容 */空格/换行不影响执行为了好看可以随意换行数据库只认语法和分号。字符串/文本用单引号 例张三、13800138000双引号仅部分数据库支持通用写法用单引号。SQL 四大核心分类分类全称作用核心关键字DDL数据定义语言建库、建表、修改表结构CREATE/ALTER/DROPDML数据操作语言增、删、改表中的数据INSERT/UPDATE/DELETEDQL数据查询语言查询表中的数据最常用SELECTDCL数据控制语言设置用户权限、事务GRANT/COMMIT最常用通用 SQL 语法1. 查询数据DQL通用格式-- 1. 查询指定列SELECT列名1,列名2FROM表名;-- 2. 查询所有列* 代表所有SELECT*FROM表名;-- 3. 带条件查询SELECT*FROM表名WHERE条件;-- 4. 排序ASC升序/DESC降序SELECT*FROM表名ORDERBY列名DESC;示例-- 查询用户表中年龄大于18的所有数据按ID倒序SELECT*FROMuserWHEREage18ORDERBYidDESC;2. 新增数据DML通用格式-- 给指定列插入数据INSERTINTO表名(列名1,列名2)VALUES(值1,值2);示例-- 插入用户姓名和年龄INSERTINTOuser(name,age)VALUES(李四,20);3. 修改数据DML必须加 WHERE 条件否则会修改全表数据UPDATE表名SET列名1新值1,列名2新值2WHERE条件;示例-- 修改ID1的用户年龄为21UPDATEuserSETage21WHEREid1;4. 删除数据DML必须加 WHERE 条件否则会清空全表DELETEFROM表名WHERE条件;示例-- 删除ID2的用户DELETEFROMuserWHEREid2;5. 建表DDLCREATETABLE表名(列名1数据类型 约束,列名2数据类型 约束,PRIMARYKEY(主键列)-- 主键唯一标识一条数据);示例CREATETABLEuser(idINTPRIMARYKEY,-- 整数主键nameVARCHAR(20),-- 字符串ageINT);通用条件运算符WHERE 里用运算符含义示例等于name张三/大于/小于age18/大于等于/小于等于age20AND并且多个条件同时满足age18 AND name张三OR或者一个满足即可age18 OR age20LIKE模糊查询name LIKE %张%DDLDDL 全称Data Definition Language数据定义语言是 SQL 的核心分类之一。核心作用专门用来创建、修改、删除 数据库/表的结构相当于盖房子、改房子、拆房子不操作表里面的具体数据数据操作是 DML 的事。核心关键字CREATE创建、ALTER修改、DROP删除、TRUNCATE清空、RENAME重命名一、先分清DDL 管结构DML 管数据语言作用类比关键字DDL定义库/表的结构建库、建表、改表结构盖房子、改户型、拆房子CREATE、ALTER、DROPDML操作表中的数据增删改数据往房子里放家具、挪家具INSERT、UPDATE、DELETEDDL 两大核心操作对象数据库Database存放所有表的容器表Table存放具体数据的载体最常用创建数据库-- 通用语法CREATEDATABASE数据库名;-- 示例创建名为 test_db 的数据库CREATEDATABASEtest_db;-- 进阶如果不存在则创建避免报错推荐CREATEDATABASEIFNOTEXISTStest_db;查询所有数据库查看当前 MySQL 中有哪些库SHOWDATABASES;使用数据库必须先选库才能操作表USE数据库名;-- 示例USEtest_db;删除数据库-- 通用语法DROPDATABASE数据库名;-- 示例删除 test_db 库DROPDATABASEIFEXISTStest_db;表的 DDL 操作表是关系型数据库的核心DDL 负责表的创建、结构修改、删除。创建表CREATE TABLE通用语法CREATETABLE表名(字段名1数据类型[约束],-- 字段列字段名2数据类型[约束],字段名3数据类型[约束]);通用数据类型类型含义示例INT整数年龄、ID、数量age INTVARCHAR(n)可变长度字符串姓名、手机号n最大字符数name VARCHAR(20)DATE日期年月日birthday DATEDATETIME日期时间年月日时分秒create_time DATETIMEDECIMAL(m,n)高精度小数金额price DECIMAL(10,2)变长和定长意思是char(10)表示无论你存多少字符都直接占10个字符串空间性能好varchar10表示存一个字符就之占一个字符的长度性能差表约束保证数据合法性约束是给字段加的规则防止脏数据DDL 核心PRIMARY KEY主键唯一标识一条数据非空唯一一张表只能有一个NOT NULL非空字段必须填值不能为 nullUNIQUE唯一字段值不能重复DEFAULT默认值不填值时自动用默认值FOREIGN KEY外键关联其他表新手前期少用完整建表示例创建用户表userCREATETABLEuser(idINTPRIMARYKEY,-- 用户ID主键唯一非空nameVARCHAR(20)NOTNULL,-- 姓名非空phoneVARCHAR(11)UNIQUE,-- 手机号唯一ageINTDEFAULT18,-- 年龄默认18岁create_timeDATETIME-- 创建时间);查询表结构查看表的字段、类型、约束DESC表名;-- 示例DESCuser;快速查看一张表的「简洁结构信息」它会以表格形式展示这张表有哪些字段、每个字段是什么类型、能不能为空、是不是主键等核心结构是你日常最常用的查看表结构命令。你执行DESCuser;会得到这样的结果整洁的表格FieldTypeNullKeyDefaultExtraidintNOPRINULLnamevarchar(20)NONULLphonevarchar(11)YESUNINULLageintYES18create_timedatetimeYESNULL你能看懂有id、name、phone5个字段id是主键PRI不能为空age默认值是18一目了然简洁、快速、够用查看建表的完整 SQLSHOWCREATETABLE表名;查看创建这张表时用的「完整、原始的SQL代码」它会把建表的所有细节字段、约束、字符集、存储引擎等全部输出是完整的建表语句。你执行SHOWCREATETABLEuser;会直接输出完整的CREATE TABLE语句CREATETABLEuser(idintNOTNULL,namevarchar(20)NOTNULL,phonevarchar(11)DEFAULTNULL,ageintDEFAULT18,create_timedatetimeDEFAULTNULL,PRIMARYKEY(id),UNIQUEKEYphone(phone))ENGINEInnoDBDEFAULTCHARSETutf8mb4;这是可以直接复制、拿去重建这张表的完整代码包含了所有约束、引擎、字符集等隐藏细节适合复制修改、备份表结构案例根据需求创建表(设计合理的数据类型、长度)设计一张员工信息表要求如下编号纯数字员工工号 (字符串类型长度不超过10位)员工姓名字符串类型长度不超过10位性别男/女存储一个汉字年龄正常人年龄不可能存储负数身份证号二代身份证号均为18位身份证中有X这样的字符入职时间取值年月日即可createdatabasecase1;usecase1;createtablewokers(idint,workerIdchar(10),namevarchar(10),sexchar(1),agetinyintunsigned,idcardchar(18),timedate);修改表结构ALTER TABLE表创建后想加列、改列名、删列都用ALTER1. 新增字段ALTERTABLE表名ADD字段名 数据类型[约束];-- 示例给 user 表加地址字段ALTERTABLEuserADDaddressVARCHAR(50);2. 修改字段数据类型/约束ALTERTABLE表名MODIFY字段名 新数据类型[新约束];-- 示例把 age 字段改为非空ALTERTABLEuserMODIFYageINTNOTNULL;3. 重命名字段ALTERTABLE表名 CHANGE 旧字段名 新字段名 数据类型;-- 示例把 phone 改名为 mobileALTERTABLEuserCHANGE phone mobileVARCHAR(11);4. 删除字段ALTERTABLE表名DROP字段名;-- 示例删除 address 字段ALTERTABLEuserDROPaddress;5. 重命名表ALTERTABLE旧表名RENAMETO新表名;-- 示例把 user 改名为 user_infoALTERTABLEuserRENAMETOuser_info;删除表DROP TABLEDROPTABLEIFEXISTS表名;-- 示例删除 user 表DROPTABLEIFEXISTSuser;清空表数据TRUNCATE TABLE删除表中所有数据保留表结构和DELETE不同TRUNCATETABLE表名;TRUNCATE 与 DELETE 区别命令类型能否回滚速度DELETE FROM 表DML可以回滚慢TRUNCATE 表DDL不可回滚极快DDL 核心注意事项DDL 执行后不可撤销修改/删除库表结构一旦执行无法恢复谨慎操作必须先使用数据库USE 库名才能操作表所有符号括号、分号、引号必须用英文符号一张表必须有主键这是设计规范关键字如USER、SELECT不要做表名/字段名