MySQL瞎学,数据库简介(二)

数据库简介

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

 

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

 

         数据库通过数据库管理系统创建和操作的。

 

         常见DBMS:Oracle、MySQL、DB2、Microsoft SQL Server、SQLLite(手机端)。

 

 

         卸载MySQL后,需要删除文件和服务,删除服务通常是管理员权限的命令行下执行:sc delete MySQL 回车。

 

         安装目录:

                   bin文件夹:存放可执行文件

                   include文件夹:存放头文件

                   lib文件夹:存放库文件

                   share文件夹:存放字符集、语言等信息

         my.ini文件常用参数:

                   default-character-set:客户端默认字符集

                   character-set-server:服务端默认字符集

                   port:客户端和服务器端的端口号

                   default-storage-engine:MySQL默认存储引擎 INNODB

 

SQL语言

         SQL(Structure Query Language 结构化查询语言),关系型数据库语言的国际标准。

 

         SQL是一种标准化语言,允许用户在数据库上执行操作,如创建数据库、表等等,查询、更新、删除、改。

         Create \ Read \ Update \ and Delete 通常称为 CRUD。

 

         SQL语句分类:

                   DDL(Data Definition Language,数据定义语言),用来定义数据库对象:库、表、列等。

                   DML(Data Manipulation Language,数据操作语言),用来定义数据库记录(数据)。

                   DCL(Data Control  language,数据控制语言),用来定义访问权限和安全级别。

                   DQL(Data Query language,数据查询语言),用来查询记录(数据)。

 

         SQL语句以 ; 结尾

         注释:(1)#开头  (2) --空格 开头 (3)/*多行注释*/

 

         show databases;   #显示当前mysql中的数据库

 

         系统默认数据库:

                   information_schema: 提供了访问数据库元数据的方式。元数据是什么? 是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限。别动!!!

         mysql: mysql的核心数据库,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息,不可以删除。!!!

                   performance_schema:性能优化的数据库

                   test: 测试数据库,是一个完全的空数据库,没有任何表,可以删除。

 

root账户创建密码:

使用工具(SQLyog等)连接数据库前,必须为root账户创建密码!!!

语法:

方法一:使用SET PASSWORD命令(推荐使用这个)

mysql> set password='123';    

方法二:使用mysqladmin()   

例子:mysqladmin -uroot -p123456 password 123;

方式三:使用UPDATE修改mysql库中的user表中root账户的密码字段数据

首先登录MySQL,连接上mysql服务端。     

mysql> use mysql; use mysql; 的意思是切换到mysql这个库,这个库是所有的用户表和权限相关的表都在这个库里面,我们进入到这个库才能修改这个库里面的表。     

mysql> update user set password=password('123') where user='root' and host='localhost'; 其中password=password('123') 前面的password是变量,后面的password是mysql提供的给密码加密用的,我们最好不要明文的存密码,对吧,其中user是一个表,存着所有的mysql用户的信息。     

mysql> flush privileges; 刷新权限,让其生效,否则不生效,修改不成功。

使用工具登录mysql 8.0版本的时候,经常提示2058错误:8.0版本默认的身份验证机制有所改变!!!

mysql_native_password身份验证

做法:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root@123';

 FLUSH PRIVILEGES;

注意:by后面的密码,修改即修改账户密码。

  1. 创建数据库:CREATE DATABASE语句用于创建新的数据库

语法:

           CREATE DATABASE [IF NOT EXISTS] db_name;

           CREATE DATABASE [IF NOT EXISTS] db_name character SET gbk;

查看创建的数据库的定义信息(默认字符编码)

           show CREATE DATABASE db_name;

修改数据库的字符集:

           ALTER DATABASE db_name character SET utf8;

删除数据库:

           DROP DATABASE IF EXISTS db_name;

 

  1. 其他语句

查看当前使用的数据库:

           select database();   //没选定数据库时,返回  null

切换数据库:

           USE db_name;

退出数据库:

           quit 或 exit

 

  1. DDL和DML语句
    1. DDL【操作表及字段】

CREATE TABLE [IF NOT EXISTS] 表名(

           字段1 字段类型(长度) 约束,

           字段2 字段类型(长度) 约束,

           …

           字段n 字段类型(长度) 约束

)[charset=utf8];

 

例子1:

CREATE TABLE IS NOT EXISTS student(

           id int not null,

)CHARSET=UTF-8;

----------------------------------------------------------------------------------------------------------------

增删改查

增、改(字段操作):

           ALTER TABLE student ADD image blob;  //添加image列

           ALTER TABLE student MODIFY address varchar(60); //修改address列,使其长度为60

           ALTER TABLE student DROP image; //删除image列,一次只能删除一列

           ALTER TABLE student CHANGE 旧字段名 新字段名 字段类型 [约束条件]// 修改字段名

改(表):

           RENAME TABLE student TO user; //改表名

-------------------------------------------------------------------------------------------------------------------

删:DROP TABLES table_name;

           SHOW TABLES;   //查看当前数据库中包含的表

           DESC table_name;  //查看表的字段信息

           SHOW CREATE TABLE user;  //查看表的创建细节

DESC table_name; //查询表中包含的字段

    1. DML操作【重要】

DML是对表中的数据进行增、删、改的操作。不能和DDL混淆了。

主要包括:INSERT、UPDATE、DELETE

在MySQL中,字符串类型和日期类型都要用单引号括起来。

空值:null

(1)插入操作:INSERT

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

(2)修改操作:UPDATE

语法:UPDATE 表名 SET 列名1=1,列名2=2… WHERE 列名=;

(3)删除操作:DELETE

语法:DELETE FROM表名【WHERE 列名=值】; //删除指定行数据

DELETE FROM 表名;  //删除表中所有数据

TRUNCATE TABLE 表名;  //删除表和数据,再创建同一个空表

 

数据类型:

---------------------------------------------------------------------------------------------------------------------

           int:整型(4字节)

           double:浮点型(8字节)

                    double(5,2) //最多五位,其中必须由2位小数,最大值为:999.99

           decimal:精确数值数据,最大位数可以是65

                    decimal(5,2) //能够存储五位数和两位小数的任何值,范围是[-999.99,999.99]

---------------------------------------------------------------------------------------------------------------------

           char:固定长度字符串累心;

                    char(10) `aaa    `  //固定10个字符,不足补空格,长度0~255

                    // 缺点:浪费空间;优点:查询速度快。

           varchar:可变长度字符串类型

                    varchar(10) `aaa`  //最多存储10个字符

                    //缺点:查询慢;优点:节省空间。

           text:大文本字符串类型;

                    //有字符编码,存储比较大的文本数据。

---------------------------------------------------------------------------------------------------------------------

           blob: Binary Large Object二进制大对象数据;可以存储图片、音频、视频

           date:日期类型,格式为:yyy-MM-dd

           time:时间类型,格式为:hh:mm:ss

           timestamp:时间戳类型 yyy-MM-dd hh:mm:ss 会自动赋值            

           datetime:日期时间类型 yyy-MM-dd hh:mm:ss

---------------------------------------------------------------------------------------------------------------------

 

常用约束条件:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

           主键约束:primary key  //(保证数据唯一性),不能重复,不能为null;

           唯一约束:unique [key]  //不能重复,可以为null。

           非空约束:not null

           默认约束:default

           外键约束:foreign key

           自动增长:auto_increment

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

查看数据库编码的具体信息: show variables like ‘character%’;

修改数据库服务端编码:

           set character_set_server='utf8';

临时更改客户端和服务器结果集的编码:

           set character_set_client=gbk;

           set character_set_results=gbk;

或者:SET NAMES ‘GBK’’;  //client connection  results

 

 

  1. DQL数据查询

数据库执行DQL语句,不会对数据进行改变,而是让数据库发送结果集给客户端。

查询返回的结果集是一张虚拟表。

查询关键字:SELECT

语法:SELECT 列名 FROM 表名 WHERE à GROUP BY à HAVING à ORDER BY à LIMIT;

SELECT selection_list   //要查询的列名称

           FROM table_list  //要查询的表名称

           WHERE condition  //行条件

           GROUP BY grouping_columns  //对结果分组

           HAVING condition  //分组后的行条件

           ORDER BY sorting_columns  //对结果排序

           LIMIT offset_start, row_count  //结果限定

 

条件查询:

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

比较运算符:

|  =、!=<>、<、<=、>、>=;

|  BETWEEN…AND;

|  IN(set);

|  IS NULL;

关系运算符:

|  AND;  &&

|  OR;  ||

|  NOT;  !

算术运算符:

|  +  -  *  /  %

 

HAVING与WHERE的区别:

  1. HAVING是在分组后对数据进行过滤,WHERE是在分组前对数据进行过滤。
  2. HAVING后面可以使用分组函数(统计函数),WHERE不能。
  3. WHERE是对分组前记录的条件,如果某行记录没有满足WHERE字句的条件,那么这行记录不会参加分组;而HAVING是对分组后数据的约束。

 

 

         LIMIT 限制行查询

                   LIMTI 起始行,行数;

                   分页查询://一次查询10行

  1. SELECT * FROM table_name LIMTI 0,10;
  2. SELECT * FROM table_name LIMTI 10,10;
  3. SELECT * FROM table_name LIMTI 20,10;

 

你可能感兴趣的:(数据库)