什么是MYSQLl如何 初学者必备的什么是MYSQLl基础知识?

梦达语法与MySQL(初学者必备的梦达语法教程和MySQL数据库操作指南)如果你正在学习MySQL数据库,那么你一定会遇到梦达语法。梦达语法是MySQL数据库的一种查询语言,用于从数据库中检索数据和执行操作。作为初学者,了解梦达语法的基础知识是非常重要的。本文将为你提供初学者必备的梦达语法教程和MySQL数据库操作指南。一、梦达语法基础知识1. 梦达语法的基础结构梦达语法的基础结构由SELECT、FROM、WHERE、GROUP BY、HAVING和ORDER BY组成。其中,SELECT用于选择要检索的列,FROM用于指定要检索的表,WHERE用于筛选要检索的行,GROUP BY用于对结果进行分组,HAVING用于对分组后的结果进行筛选,ORDER BY用于对结果进行排序。2. 梦达语法的常用操作梦达语法的常用操作包括SELECT、INSERT、UPDATE和DELETE。SELECT用于检索数据,INSERT用于插入数据,UPDATE用于更新数据,DELETE用于删除数据。3. 梦达语法的数据类型梦达语法的数据类型包括数值型、字符串型、日期型、布尔型等。在使用梦达语法时,需要根据数据类型选择不同的操作符和函数。二、MySQL数据库操作指南1. 创建数据库和表在使用MySQL数据库之前,需要先创建数据库和表。可以使用CREATE DATABASE和CREATE TABLE语句来创建数据库和表。2. 插入数据amen1n2n3,...) VALUES (value1, value2, value3,...)。3. 更新数据amen1n2dition。4. 删除数据amedition。5. 查询数据n1n2amedition。在学习MySQL数据库时,梦达语法是必不可少的一部分。本文提供了初学者必备的梦达语法教程和MySQL数据库操作指南,希望能够帮助你更好地理解和应用MySQL数据库。如果你想深入学习梦达语法和MySQL数据库,可以参考更详细的教程和文档。
一、数据库连接mysql.exe -h127.0.0.1 -uroot -P3306 -p
-h host 服务器的IP地址/域名 127.0.0.1 自己电脑的IP地址localhost 自己电脑的域名-P port 端口-u user 用户名 root 管理员账户-p password 密码 xampp下root密码默认为空连接结束后一定不要加分号
二、常用管理命令命令说明quit;退出服务器的连接show databases;显示当前数据库服务器下所有的数据库use 数据库名称;进入指定的数据库show tables;显示当前数据库下所有的数据表desc 数据表名称;描述指定数据表下都有哪些列三、 SQL命令说明SQL命令的执行方式1. 交互模式
在客户端输入一行命令,点击回车服务器端执行一行,适用于临时性的查看数据。
2. 脚本模式
把所有要执行的命令写在一个脚本文件中,一次性的提交给服务器执行,适用于批量的操作数据
在连接之前的命令行中> mysql
-uroot<拖拽脚本文件到此位置
回车
3. SQL命令的语法规范假设某一行命令出现语法错误,则此行代码往后所有代码不会被服务器执行一行命令可以跨越多行,以英文的分号作为结束SQL命令不区分大小写,习惯上关键字大写,非关键字小写分为单行注释(#…)和多行注释(/…/)四、常用的SQL命令丢弃数据库,如果存在drop database if exists tmooc;创建新的数据库create database tmooc;进入创建的数据库use tmooc;创建数据表create table student( sid int, name varchar(8), sex varchar(1), score int );插入数据insert into student values('1', 'ran', 'M', '80');查询数据select * from student;7.修改数据update user set email='tanggourd@gmail.com',phone='18112345678',where uid='1';删除数据delete from user where uid='2';五、计算机编码1.存储英文字符
ASCII:对所有的英文字母及其符号进行了编码,总共有128个Latin-1:对欧洲字符进行了编码,总共有256个,兼容ASCII码2.存储中文字符
GB2312:对常用的6000多汉字进行了编码,兼容ASCII码GBK:对2万多汉字进行了编码,兼容GB2312BIG5:台湾繁体字编码Unicode:对世界上主流国家的常用语言进行了编码,具体分为三种存储方案UTF-8、UTF-16、UTF-32mysql默认使用Latin-1,没有对汉字编码。3.解决mysql中文乱码脚本文件另存为的编码为UTF-8客户端连接服务器端的编码为UTF-8set names utf8;服务器端创建数据库,设置存储的编码为UTF-8create database pythl charset=utf8;六、列类型1. 数值型英文翻译占用字节范围/说明tiany微整型1-128~127smallint小整型2-32768~32767int整型4-2147483648~2147483647bigint大整型8太大没有去算float单精度浮点型4范围比int大的多以牺牲小数点后的若干位为代价精度会受到影响double双精度浮点型8decimal(M,D)定点小数定点小数小数点的位置不会发生变化M代表总的有效位数D代表小数点后的有效位数boolean/bool布尔型-128~127true和false
布尔型在使用的时候自动的转成tinyint,true转成1,false转成0;也可以直接插入1或者0true和false这两个值是关键字,不能加引号。
2.日期时间型英文翻译占用字节范围/说明date日期型2021-03-20time时间型08:21:30datetime日期时间型2021-03-20 08:21:303.字符串型英文翻译范围/说明常用varchar(M)变长字符串M的最大值是65535标题、姓名、详情char(M)定长字符串M的最大值是255手机号码、身份证号码text(M)大型变长字符串M最大值是2G4.列约束1.主键约束 —— primary key
声明了主键约束的列上禁止出现重复的值,一个表中只能有一个主键约束,通常加在编号列上,会加快数据的查找速度。主键约束的列禁止插入null
null 表示空,在插入数据的时候,表示一个暂时无法确定的值;例如无法确定一个商品的库存量,无法确定一个员工的手机号码null是关键字,不能加引号。
2.非空约束 —— not null
声明了非空约束的列上禁止插入null
3.唯一约束 —— unique
明了唯一约束的列上不允许重复,允许插入null,允许插入多个null
4.默认值约束 —— default
可以使用default关键字来设置默认值,具体应用默认值有两种
insert
into
family
values(40, default);
insert
into
family(fid)
values(50);
#给特定的列值,没有出现的列会使用默认值
5.检查约束 —— check
自定义约束,可以自己指定约束的条件
create
table
student(
score
tinyint
check(score>=0
and
score<=100)
);
mysql不支持检查约束,认为严重影响数据的插入速度。后期由JS代替6.外键约束 —— foreign key
声明了外键约束的列,取值范围到另一个表的主键列;如果不存则禁止插入。允许插入null,外键列和对应表的主键列,列类型要保持一致。foreign key(外键列)
references
另一个表(主键列)
foreign key(familyId) references family(fid)
7.自增列 —auto_increment
auto_increment:自动增长,如果设置了自增列,只需要赋值为null,就会在原来的基础之上加1插入
注意事项:
自增列必须加在主键形式的编号列上允许手动赋值
实操代码set names utf8;
drop database if exists tedu;
create database tedu charset=utf8;
use tedu;
create table dept(
did int primary key auto_increment,
dname varchar(8) unique
);
insert into dept values(null,'研发部'),(null,'市场部'),(null,'运营部'),(null,'测试部');
create table emp(
eid int primary key auto_increment,
ename varchar(8) not null,
sex bool default 1,
birthday date,
salary decimal(7,2),
deptId int,
foreign key(deptId) references dept(did)
);
insert into emp values(null,'张三',default,'2020-3-20','5689.72',1);
insert into emp values(null,'李四',default,'2021-2-20','3689',1);
insert into emp values(null,'五得',default,'2021-2-20','9999',1);
insert into emp values(null,'唐三',default,'2020-3-20','10000',1);
5.查询1.查询特定的列select
eid,ename
from emp; #eid和ename是列字段,emp是表名
2.查询所有的列select ename,sex,birthday,salary from emp;#列出需要查询列的字段,逗号分割
select * from emp; #*号所有的列
3.给列起别名select eid as bianhao ,ename as xingming from thl;
select ename as a,birthday as b,salary as c from thl;
select ename
a,birthday
b,salary
c from thl;#起别名是为了简化列名称可以省略as ,中间保留空格
+---------+----------+
bianhao
xingming
+---------+----------+
1
张三
2
李四
3
五得
4
唐三
+---------+----------+
MariaDB [pythl]> select ename as a,birthday as b,salary as c from thl;
+--------+------------+----------+
a
b
c
+--------+------------+----------+
张三
2020-03-20
5689.72
李四
2021-02-20
3689.00
五得
2021-02-20
9999.00
唐三
2020-03-20
10000.00
+--------+------------+----------+
4 rows in set (0.001 sec)
4.显示不同的记录,重复的不显示MariaDB [pythl]> select distinct dname from thl;
+-----------+
dname
+-----------+
市场部
测试部
研发部
运营部
+-----------+
4 rows in set (0.001 sec)
5.查询时执行计算MariaDB [pythl]> select ename,salary*12 from thl;
+--------+-----------+
ename
salary*12
+--------+-----------+
张三
68276.64
李四
44268.00
五得
119988.00
唐三
120000.00
+--------+-----------+
4 rows in set (0.001 sec)
6.查询的结果集-排序
order by 按照asc=>ascendant的简称 升序desc=>descendant的简称 降序
查表的是describe 描述
如果不加排序规则,默认是按照升序排列如果按照字符串排序,按照首个字符的Unicode码来排列MariaDB [pythl]> select * from thl order by did asc;
+-----+-----------+
did
dname
+-----+-----------+
1
研发部
2
市场部
3
运营部
4
测试部
+-----+-----------+
4 rows in set (0.001 sec)
MariaDB [pythl]> select * from thl order by did desc;
+-----+-----------+
did
dname
+-----+-----------+
4
测试部
3
运营部
2
市场部
1
研发部
+-----+-----------+
4 rows in set (0.001 sec)
#多种排序规则
select * from thl order by sex,birthday desc;
7.条件查询 示例:
1 查询出编号为5的员工
select * from thl where eid=5;
2 查询出姓名为lucy的员工
select * from thl where ename='lucy';
3 查询出所有的女员工
select * from thl where sex=0;
4 查询出工资在5000以上的员工有哪些
select * from thl where salary>5000;
5 查询出不在1号部门的员工有哪些
select * from thl where hlblogId!=1;
6 查询出没有明确部门的员工有哪些
select * from thl where hlblogId is null;
7 查询出有明确部门的员工有哪些
select * from thl where hlblogId is not null;
8 查询出工资在5000~8000之间的员工有哪些
select * from thl where salary>=5000 and salary<=8000;
select * from thl where salary between 5000 and 8000;
9 查询出1993年出生的员工有哪些
select * from thl where birthday>='1993-1-1' and birthday<='1993-12-31';
select * from thl where birthday between '1993-1-1' and '1993-12-31';
10 查询出工资在5000以下或者8000以上的员工有哪些
select * from thl where salary<5000
or
salary>8000;
select * from thl where salary not between 5000 and 8000;
11 查询出2号或者3号部门的员工有哪些
select * from thl where hlblogId=2 or hlblogId=3;
select * from thl where hlblogId in(2,3);
12 查询出不在2号或者不在3号部门的员工有哪些
select * from thl where hlblogId not in(2,3);
8.模糊条件查询 示例:
查询出姓名中含有字母e的员工有哪些
查询出姓名中以e结尾的员工有哪些
select * from thl where ename like '%e';
查询出姓名中倒数第2个字符是e的员工
select * from thl where ename like '%e_';
%
匹配任意0个或者多个字符
>=0
_
匹配任意一个字符
以上两个匹配符号必须结合着like关键字使用
9.分页查询
查询的结果集中有太多的数据,一次显示不完可以做成分页显示需要提供两个条件:当前的页码、每页的数据量
每页开始查询的值 = (当前的页码-1) * 每页的数据量
select * from thl limit 开始查询的值,每页的数据量;
MariaDB [pythl]> select ename,birthday,salary from thl
-> where sex=1
-> order by salary desc
-> limit 0,3;
+-------+------------+----------+
ename
birthday
salary
+-------+------------+----------+
Brown
1993-12-03
22000.00
King
1988-12-03
10000.00
Peter
1990-12-03
10000.00
+-------+------------+----------+
3 rows in set (0.001 sec)
10.复杂查询1.聚合查询/分组查询
聚合函数
函数:是一个独立的功能体,提供若干个数据,返回结果 —— 饺子机count()/sum()/avg()/max()/min()
数量
总和
平均
最大
最小
分别查询出男女员工的数量、最高工资、最低工资select count(eid),max(salary),min(salary),sex,ename from emp group by sex;
year()
获取日期中的年份
month()
获取日期中的月份
2.子查询
查询出工资最高的员工所有的列
步骤1:查询出最高工资 —— 22000select max(salary) from thl;
步骤2:通过最高工资的值查询出员工select * from thl where salary=22000;
综合:
select * from thl where salary=(select max(salary) from thl);
子查询是多个SQL命令的组合,把一个SQL命令的结果作为另一个SQL命令的条件。3.多表查询
查询的数据分布在多个表中
查询出所有的员工姓名及其部门名称select
ename,dname
from thl,dept
where deptId=did;
select thl.ename,dept.dname from thl,dept where thl.deptId=dept.did;
多表查询前提是在创建表的时候已经建立了关联,一个表外键键对应另一个表的主键。1.内连接select ename,dname from thl inner join dept on deptId=did;
2. 左外连接select ename,dname from thl left outer join dept on deptId=did;
左侧表中所有的记录都显示,即使没对应的数据,先写哪个表哪个就是左,outer关键字可以省略3. 右外连接select ename,dname from thl right outer join dept on deptId=did;
右侧表中所有的记录都显示,即使没有对应的数据,后写哪个表哪个就是右,outer关键字可以省略4.全连接
full join onmysql不支持全连接
union 合并相同的记录union all 不合并相同的记录左外连接和右外连接联合到一起。(select ename,dname from thl left outer join dept on deptId=did) union
(select ename,dname from thl right outer join dept on deptId=did);
存储数据用文件就可以了,为什么还需要数据库,文件保存数据有以下几个缺点:
文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便
数据库存储介质:
磁盘内存
为了解决上述问题,专家们设计出更加利于管理数据的东西——数据库,它能更有效的管理数据主流数据库
SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目。Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。PostgreSQL:加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中
mysql是一套给我们提供数据存取的服务的网络程序数据库一般指的是,在磁盘或者内存中存储的特定结构组织的数据——将来在磁盘上存储的一套数据库方案数据库服务——mysqld一般的文件确实提供了数据的存储功能,但是文件并没有提供非常好的数据管理能力(用户角度)数据库本质:对数据内容存储的一套解决方案,你给我字段或者要求,我直接给你结果就行。存储解决方案。登录mysql -h 127.0.0.1 -P 3306 -u root - p
-h:指明登陆部署了mysql服务的主机-P:指明要访问的端口号(这个是可以修改的)-u:指明登陆的用户(默认为root)-p:指明要输入的密码,密码输入的时候,是不回显的1.mysql它是数据库服务的客户端2.mysqld它是数据库服务的服务器端3.mysql本质:基于C(mysql)S(mysqld)模式的一种网络服务基于tcp协议的端口号3306使用mysql建立一个数据库,建立一张表结构,插入一些数据,对比一下mysql在Linux中是如何表现的。多个helloworld这个文件1.建立数据库,本质就是Linux下的一个目录建立一张表:选择数据库:use helloworld;创建一个表:create table student在数据库内建立表,本质就是在Linux下创建对应的文件即可这个工作是谁做的?实际上是mysqld帮我们做的。数据库本质其实也是文件!!只不过这些文件并不由程序员直接操作,而是由数据库服务帮我们进行操作服务器,数据库,表关系所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。数据库服务器、数据库和表的关系如下:client就是mysql客户端,mysql就是mysqld服务端,剩下的统称为“数据库”DB在Linux下就是目录,表结构在Linux下呈现的是二进制的文件按行列存储,这是逻辑存储。MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。DDL(data definition language)数据定义语言,自然是用来维护存储数据的结构,代表指令:create,drop,alter,操作表DML(data manipulation language)数据操纵语言,用来对数据进行操作,代表指令:insert,delete,updata,操作数据DML中又单独分了一个DQL,数据查询语言,代表指令:selectDCL(data Control Language)数据控制语言,主要负责权限管理和事务,代表指令:grant,revoke,commit存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。MySQL的核心就是插件式存储引擎,支持多种存储引擎查找引擎:show engines;存储引擎对比最常用的存储引擎就是InnoDB,MyISAM默认的存储引擎是InnoDB

我要回帖

更多关于 什么是MYSQL 的文章