数据库MySQL基础

1、MySQL是关系型数据库!

2、RDBMS指关系型数据库管理系统,即数据库服务器。

3、MySQL重要文件

①C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe客户端程序,用来访问服务器

②C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe服务器程序

③C:\ProgramData\MySQL\MySQL Server 8.0\my.ini服务器配置文件

>配置MySQL的端口:port=3306,默认为3306

>配置字符编码

>配置二进制数据大小上限

④C:\ProgramData\MySQL\MySQL Server 8.0\Data该目录下的每一个目录表示一个数据库,每个目录下的每一个frm文件是一张表。是由DBMS来读写的。

4、开启关闭服务器以及登录退出客户端

开启服务器:net start mysql

关闭服务器:net stop mysql

客户端登录:mysql -u用户名 -p密码 -hIP(或者-hlocalhost)

退出服务器:exit或quit

5、SQL语言概述

①SQL:结构化查询语言(Structured Query Language),用来操作服务器

②SQL语句可以在单行或多行书写,以分号结尾;可使用空格和缩进来增强语句的可读性;MySQL不区分大小写,建议大写。

③SQL语句分类:

>DDL:数据定义语言,用来定义数据库对象,如库、表、列

>DML:数据操作语言,用来定义数据库记录(数据),增、删、改(数据更新)

>DCL:数据控制语言,用来定义访问权限与安全级别(对用户的创建及授权)

>DQL:数据查询语言

6、数据类型(1字节(Byte)= 8 bit,8位二进制的无符号数表数范围:0~255

注意:存储的是字符数,并不是字节数,(一般一个字符一个字节)具体占用的字节数与编码有关。

utf-8一个汉字3个字节,一个英文字母1个字节。gbk一个汉字2个字节。

例如:varchar(10),非Unicode字符串类型,最多输入10个字母或5个汉字。而Unicode字符串类型,最多输入10个字母或10个汉字。

①浮点型:double(5,2)表示五位数据,2位小数;decimal:不会出现精度缺失问题

char:固定长度字符串类型,char(255),当数据长度不足指定长度时会在后面添加空格

varchar:可变长度字符串类型,varchar(65535),一次存储时,其中会有一个字节用来记录长度,当数据超过指定长度时会再增加一次指定大小空间

(MySQL独有)text(clob):可变长度字符串类型

tinytext:最大存储值2^8-1B;text:2^16-1B;mediumtext:2^24-1B;longtext :2^32-1B;

text(blob):字节类型

binary固定长度二进制类型,最大255B,binary(10),当数据为5B时会添加5B来补位到10B。

varbinary:可变长度二进制类型(有记录位),255

tinyblob:可变长度二进制类型,2^8-1B

blob:2^16-1B

mediumblob:2^24-1B

longblob:(4G)2^32-1B

⑤timestamp:时间戳类型

以下:菜鸟教程https://www.runoob.com/mysql/mysql-tutorial.html

>LIKE字句

SELECT field1, field2,...fieldN 
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'

>UNION操作符:用于连接两个以上的SELECT语句的结果组合到一个结果集合中。多个SELECT语句会删除重复的数据。

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];

其中:

  • DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。

  • ALL: 可选,返回所有结果集,包含重复数据。

>排序:通过ORDER BY字句设定按哪个字段哪种方式排序

SELECT field1, field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]

其中:使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。

>分组:GROUP BY语句根据一个或多个列对结果集进行分组,在分组的列上可以使用COUNT,SUM,AVG等函数

SELECT column_name, function(column_name) [as rename]
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

例:将数据表按名字进行分组,并统计每个人有多少条记录:

SELECT name, COUNT(*) FROM   employee_tbl GROUP BY name;

WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)。

coalesce 来设置一个可以取代 NUll 的名称。(coalesce(name, '总数')当name为null时用“总数”替代)

例:SELECT coalesce(name, '总数'), SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;

>联合多表查询JOIN

JOIN 按照功能大致分为如下三类:

  • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
  • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
  • RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;

等价于:

SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a, tcount_tbl b WHERE a.runoob_author = b.runoob_author;

>NULL值处理

三大运算符:

  • IS NULL: 当列的值是 NULL,此运算符返回 true。
  • IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
  • <=>: 比较操作符(不同于=运算符),当比较的两个值为 NULL 时返回 true。
select * , columnName1+ifnull(columnName2,0) from tableName;

columnName1,columnName2 为 int 型,当 columnName2 中,有值为 null 时,columnName1+columnName2=null, ifnull(columnName2,0) 把 columnName2 中 null 值转为 0。

>正则表达式(部分)

例:查找name字段中以元音字符开头或以'ok'字符串结尾的所有数据:

SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';

>事务

>ALTER命令:修改数据表名或者修改数据表字段

添加列:

 ALTER TABLE testalter_tbl ADD i INT [FIRST];添加到第一列
ALTER TABLE testalter_tbl ADD i INT AFTER c;添加到c列之后

删除列:

ALTER TABLE testalter_tbl  DROP i;

修改字段类型和名称:

ALTER TABLE testalter_tbl MODIFY j BIGINT NOT NULL DEFAULT 100;修改字段时指定字段j为 NOT NULL 且默认值为100 。
ALTER TABLE testalter_tbl CHANGE i j BIGINT;i要修改的字段名j新的字段名

修改字段默认值:

ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;

修改表名:

ALTER TABLE testalter_tbl RENAME TO alter_tbl;

>索引:MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。

创建唯一(索引列的值必须唯一,但允许有空值)索引:

CREATE [UNIQUE] INDEX indexName ON mytable(username(length)) 

>临时表:临时表在我们需要保存一些临时数据时是非常有用的。临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。(CREATE TEMPORARY TABLE)使用 SHOW TABLES命令显示数据表列表时,无法看到创建的临时表,但能查询到数据。

>复制表:

获取数据表的完整结构:

SHOW CREATE TABLE runoob_tbl \G;

修改SQL语句的数据表名,并执行SQL语句

拷贝数据表的数据使用INSERT INTO... SELECT 语句来实现

>序列:使用AUTO_INCREMENT 来定义列

设置序列的初始值:

CREATE TABLE insect
    -> (
    -> id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    -> PRIMARY KEY (id),
    -> name VARCHAR(30) NOT NULL, 
    -> date DATE NOT NULL,
    -> origin VARCHAR(30) NOT NULL
)engine=innodb auto_increment=100 charset=utf8;

修改序列的开始值:

 ALTER TABLE t AUTO_INCREMENT = 100;

>处理重复数据

设置指定的字段为 PRIMARY KEY(主键) 或者 UNIQUE(唯一) 索引来保证数据的唯一性时, INSERT IGNORE 会忽略数据库中已经存在的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。即执行后不会出错,也不会向数据表中插入重复数据。而 REPLACE INTO 如果存在 primary 或 unique 相同的记录,则先删除掉。再插入新记录。

>统计重复数据

SELECT COUNT(*) as repetitions, last_name, first_name
    -> FROM person_tbl
    -> GROUP BY last_name, first_name
    -> HAVING repetitions > 1;

>过滤重复数据

在 SELECT 语句中使用 DISTINCT 关键字来过滤重复数据。

 SELECT DISTINCT last_name, first_name
    -> FROM person_tbl;

使用 GROUP BY 来读取数据表中不重复的数据

SELECT last_name, first_name
    -> FROM person_tbl
    -> GROUP BY (last_name, first_name);

>删除重复数据

复制新表并分组:

CREATE TABLE tmp SELECT last_name, first_name, sex FROM person_tbl  GROUP BY (last_name, first_name, sex);
DROP TABLE person_tbl;
 ALTER TABLE tmp RENAME TO person_tbl;

也可以在数据表中添加 INDEX(索引) 和 PRIMAY KEY(主键)这种简单的方法来删除表中的重复记录。

 ALTER IGNORE TABLE person_tbl
    -> ADD PRIMARY KEY (last_name, first_name);

>SQL注入:通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。所以需要对用户输入的数据进行过滤处理。

>导出数据

SELECT * FROM runoob_tbl 
    -> INTO OUTFILE '/tmp/runoob.txt';

导出表/库中SQL格式数据:

mysqldump -u root -p database_name table_name > dump.txt

导入表:(确认数据库已经创建)

mysql -u root -p database_name < dump.txt

>将指定主机的数据库拷贝到本地(确保两台服务器是相通的):指定远程服务器的IP、端口及数据库名。

mysqldump -h other-host.com -P port -u root -p database_name > dump.txt

>导入备份数据库

 source /home/abc/abc.sql  # 导入备份数据库

>导入数据

LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl;

>MySQL函数

>MySQL运算符

注意比较运算符中:

等于:=

不等于:<>, !=

严格比较两个NULL值是否相等:<=>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值