Mysql-程序员宅基地

技术标签: mysql  数据库  

mysql是一个客户端-服务器结构的程序.
mysql的服务器,是真正的本体,负责保存和管理数据.数据都是存储在硬盘上的.

内存:速度快,空间小,成本高,数据易失
硬盘:速度慢,空间大,成本低,数据持久保存

数据库的命令行客户端操作

进入命令行客户端输入密码


如果输入密码正确会如上图

数据库

"数据库"指的是一个逻辑上的数据集合.
一个mysql 服务器程序,可以在硬盘上组织保存很多数据
其是通过表来组织的
一个mysql服务器上,有很多存储不同信息的表
将有关联关系的一些表放到一起,就构成了一个数据集合,此时就称为"数据库",而且一个mysql服务器上可以有多个这样的数据库的

操作数据库

1.创建数据库

create database 数据库名;

数据库创建的时候,要求不能重复.
如果重复会出现

此时就可以在创建的时候,加上一个修饰,来应对上述问题.

create database if not exists 数据库名;

这样就没有报错,也没有创建出一个java数据库.

为了是避免 sql报错
实际工作中,很多时候,是把一系列sql 写到一个文件中,批量执行的.而很少会这样一条一条的执行~~
在批量执行的情况下,如果一条sql报错了,后面的sql就无法继续执行了.

创建数据库的时候,可以手动指定一下字符集的character set字符集名字/ charset 字符集名字

因为需要在数据库中保存中文, mysql默认的字符集是拉丁文.不支持中文.必须要在创建数据库的时候,手动指定编码方式为支持中文的编码.(GBK, UTF8)才能进行保存中文。

注:

字符集(Character Set)是一组字符的集合,它定义了字符与数字之间的映射关系。

通常用于编码和解码文本数据,使计算机能够理解和处理文本信息。通俗一些字符集就是一张字符表,它把各种文字、符号、数字等转换成计算机可以理解的数字编码,这样计算机就能够处理文本信息了。就好像字母表一样,每个字母都对应着一个特定的数字编码,这样计算机就能够识别并处理文本中的各种符号和文字了。常见的字符集有ASClII、Unicode等。字符集的选择对于文本处理和数据交换非常重要,不同的字符集可能包含不同的字符,编码方案也不同。导致不同的字符集,不同的编码方式下,一个汉字占几个字节,是不同的。

gbk现在已经用的越来越少了.主要是使用utf8作为编码方式.变长编码.
utf8不仅可以表示中文.
也可以表示世界上的任何一种语言文字
如果使用utf8编码,一个汉字通常是3个字节,jbk编码一般通常是2个字节,少数生僻汉字使用4个字节。

2.查看数据库

show databases;

列出当前的mysql服务器上一共都有哪些数据库

3.选中数据库

use 数据库名称;

数据库中最关键的操作,就是针对表进行增删改查.表是从属于数据库的.
要针对表操作,就需要先指定清楚针对哪个数据库来进行操作


4.删除数据库

drop database 数据库名;

删除操作,删掉的不仅仅是database,而且也删除了database 中所有的表,和表里所有的数据!
删除数据库操作,是一个非常危险的操作。

操作数据库中的表

1.创建表

create table表名(列名 类型,列名 类型);

创建表之前先选中数据库如上面的选中数据库。

注:

是create不是creat。

2.查看所有表

show table;

数据库中的内容,都是持久化存储的.后续重启电脑啥的,数据都是仍然存在的

3.查看表结构

desc  表名;

field:字段列

int是四个字节,
这里的(11)表示的是显示的宽度.
显示这个int类型的时候,最多是占据11个字符的宽度

(和存储时候的容量是无关的)

Null空值.
表格中的这个格子是没填.

4.删除表

drop table 表名;

删除表之后进行查询表发现其确实被删除了

查询,添加,更改,删除表中的数据

1.添加数据

insert into 表名 values(值,值);

值与类型必需匹配。
 

如果插入的值是中文呢?

这就是没有指定字符集的utf8.

也可以进行一次的插入多条数据

将一个表中的数据全部赋值过去

2.查询表中全部的数据

select * from 表名;

查询这个表中的所有数据。

3.查询表中指定列的查询

按需进行查询

select 列名,列名 from 表名;

4.查询表中数据时带上数据计算

—边查询,一边进行计算
 

可以看出这里的操作不会修改数据库服务器上的原始数据只是在最终响应里的"临时结果"中做了计算
 

5.表别名的创建

查询的时候给列/表达式指定别名.(给表也能指定别名)

select 表达式 as 别名 from 表名;

as可以省略,但是不要省略这样可读性。

查询结果的临时表中,列名就是刚才的别名了.

6.去重

distinct 修饰某个列/多个列值相同的行,只会保留一个行


7.查询时进行排序

将行进行排序

首先确定好排序的规则
a)针对哪个列作为比较规则

b)排序的时候是升序还是降序

select (列名 )from 表名         order by 列名 asc/desc;

asc升序加果省略,就是升序排序.desc降序

order by 后面的列就是以这个列的数据为准进行排序比较

如果一个sql不加order by 此时查询的结果数据的顺序,是"不确定的"/"无序”的.
 

order by指定的列,如果你select查询的时候没有把这一列显示出来,也不影响排序。


 

order by还可以针对表达式进行排序


旨定多个列来排序. order by后面可以写多个列使用,先按照第一个来进行排序,如果第一个列的值相等,在根据第二个列的值进行排序。

8.条件查询:WHERE

会指定具体的条件,按照条件针对数据进行筛选.
select 列名 from 表名 where 条件;

遍历这个表的每一行记录,把每一行的数据分别带入到条件中如果条件成立,这个记录就会被放入结果集合中.如果条件不成立,这个记录就pass

如果查询的值没有就什么都不返回

9.模糊查询

使用通配符(就是一些特殊的字符),表示一些特定的含义来进行查询。
%:代指任意个任意字符.
_:代指一一个任意字符.

李%∶查询以李开头的内容

%李:查询以李结尾的内容

%李%:查询包含李的.
 

10.分页查询:LIMIT

select * from 表名 limit x offset y;

x表示这次查询查询出几个结果

y表示这次是从几开始查询的

使用select *这种方式查询,是比较危险的.需要保证一次查询,不要查出来的东西太多.
limit可以限制这次查询最多能查出来多少个结果.
有的时候,数据非常多,一次全都显示出来,会影响到效率,也会不方便用户去看

如下图

.

分页查询之后的结果

11.修改表中的数据

update 表名 set 列名 = 值 where 条件;

这只修改了一列
也可以同时修改多个列


不支持math+=30这个写法,必须写成math = math + 30;

update后面不写任何条件,就是针对所有行都进行修改,非常危险!!!!!。

show  warnings:可以查看警告的具体内容

12.删除表

delete from表名where条件/ order by / limit;

和drop table 还不太一样.
drop table是删除了表,也删除了表里的记录.


 如果不指定任何条件,就是删除整个表。

delete是只删除了表里的记录,表还在(空表)

数据表中的约束

数据库自动的对数据的合法性进行校验检查的一系列机制目的就是为了保证数据库中能够避免被插入/修改一些非法的数据

MySQL中提供了以下约束.

1. NOT NULL

指示某列不能存储NULL值

create table 表名(列名 列类型 not null);

2.UNIQUE

表中不能有重复的行

create table 表名(列名,列类型 unique);

3.DEFAULT

create table 表名(列名,列类型 default 默认值);

当没有给某个列赋值时,会将设置的默认值赋值给列

可以这样给有默认值的表中插入数据。

  

一个表的一个列可以实现多个约束

4.PRIMARY KEY
 

create table 表名(列名 列类型 primary key);

一张表中只能有一个primary key,
一个表中,只能有一个作为身份标识的数据.

相当于我们可以通过身份证号来作为我们身份的区别。

虽然只能有一个主键,但是主键不一定只是一个列,也可以用多个列共同构成一个主键.(联合主键)

注:
mysql会把带有unique和primary key的列自动生成索引,从而加快查询速度.

如何保证主键唯一呢?
mysql提供了一种"自增主键"这样机制

create table 表名(列名,列类型 auto_increment);
因为主键经常会使用int / bigint
程序猿插入数据的时候,不必手动指定主键值,由数据库服务器自己给你分配一个主键会从1开始,依次递增的分配主键的值.



从刚才最大的数值开始,继续往后分配的
相当于使用了一个变量,来保存了当前表的id的最大值.后续分配自增主键都是根据这个最大值来分配的.
如果手动指定id,也会更新最大值.

如果我们没有挨个进行自增,中间剩余一些空余,我们可以手动插入

5.FOREIGN KEY

外键:描述了两个表的关联关系,指定外键约束的时候,要求父表中被关联的这一列,必须是主键或者unique

create table 表名(列名  列类型,foreign key (字段名) references 主表(列));

比如class表中有class_id,class_name两个列,

student表中有student_id,student_name,studentClass_id三个列

如果将这个两个表进行外键约束,用class表约束student表,
class表中的数据,可以约束了student表中的数据studentClass_id只能是class表中的class_id这个范围.把class表,称为“父表,也就是约束别人的表
把student表,称为"子表,就是被别人约束的表,被约束了班级的id只能在一个范围内

class表中的数据

执行这个插入操作,就会触发针对class表的查询.就会查4是否是在class中存在
 

针对父表进行修改/删除操作,如果当前被修改/删除的值,已经被子表引用了,这样的操作也会失败
因为外键约束始终要保持,子表中的数据在对应的父表的列中,要存在,此时万一把父表的这条数据删除了,也就打破了刚才的约束了
 

外键准确来说,是两个表的列产生关联关系,其他的列是不受影响的(可以修改)

如果想删除表,就得先删除记录

此处的直接删除父表,是不可以的.
父表没了,子表后续添加新元素,就没的参考了
所以只能先删除子表,在删除父表

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhimeng3/article/details/137515356

智能推荐

while循环&CPU占用率高问题深入分析与解决方案_main函数使用while(1)循环cpu占用99-程序员宅基地

文章浏览阅读3.8k次,点赞9次,收藏28次。直接上一个工作中碰到的问题,另外一个系统开启多线程调用我这边的接口,然后我这边会开启多线程批量查询第三方接口并且返回给调用方。使用的是两三年前别人遗留下来的方法,放到线上后发现确实是可以正常取到结果,但是一旦调用,CPU占用就直接100%(部署环境是win server服务器)。因此查看了下相关的老代码并使用JProfiler查看发现是在某个while循环的时候有问题。具体项目代码就不贴了,类似于下面这段代码。​​​​​​while(flag) {//your code;}这里的flag._main函数使用while(1)循环cpu占用99

【无标题】jetbrains idea shift f6不生效_idea shift +f6快捷键不生效-程序员宅基地

文章浏览阅读347次。idea shift f6 快捷键无效_idea shift +f6快捷键不生效

node.js学习笔记之Node中的核心模块_node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是-程序员宅基地

文章浏览阅读135次。Ecmacript 中没有DOM 和 BOM核心模块Node为JavaScript提供了很多服务器级别,这些API绝大多数都被包装到了一个具名和核心模块中了,例如文件操作的 fs 核心模块 ,http服务构建的http 模块 path 路径操作模块 os 操作系统信息模块// 用来获取机器信息的var os = require('os')// 用来操作路径的var path = require('path')// 获取当前机器的 CPU 信息console.log(os.cpus._node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是

数学建模【SPSS 下载-安装、方差分析与回归分析的SPSS实现(软件概述、方差分析、回归分析)】_化工数学模型数据回归软件-程序员宅基地

文章浏览阅读10w+次,点赞435次,收藏3.4k次。SPSS 22 下载安装过程7.6 方差分析与回归分析的SPSS实现7.6.1 SPSS软件概述1 SPSS版本与安装2 SPSS界面3 SPSS特点4 SPSS数据7.6.2 SPSS与方差分析1 单因素方差分析2 双因素方差分析7.6.3 SPSS与回归分析SPSS回归分析过程牙膏价格问题的回归分析_化工数学模型数据回归软件

利用hutool实现邮件发送功能_hutool发送邮件-程序员宅基地

文章浏览阅读7.5k次。如何利用hutool工具包实现邮件发送功能呢?1、首先引入hutool依赖<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.19</version></dependency>2、编写邮件发送工具类package com.pc.c..._hutool发送邮件

docker安装elasticsearch,elasticsearch-head,kibana,ik分词器_docker安装kibana连接elasticsearch并且elasticsearch有密码-程序员宅基地

文章浏览阅读867次,点赞2次,收藏2次。docker安装elasticsearch,elasticsearch-head,kibana,ik分词器安装方式基本有两种,一种是pull的方式,一种是Dockerfile的方式,由于pull的方式pull下来后还需配置许多东西且不便于复用,个人比较喜欢使用Dockerfile的方式所有docker支持的镜像基本都在https://hub.docker.com/docker的官网上能找到合..._docker安装kibana连接elasticsearch并且elasticsearch有密码

随便推点

Python 攻克移动开发失败!_beeware-程序员宅基地

文章浏览阅读1.3w次,点赞57次,收藏92次。整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)近年来,随着机器学习的兴起,有一门编程语言逐渐变得火热——Python。得益于其针对机器学习提供了大量开源框架和第三方模块,内置..._beeware

Swift4.0_Timer 的基本使用_swift timer 暂停-程序员宅基地

文章浏览阅读7.9k次。//// ViewController.swift// Day_10_Timer//// Created by dongqiangfei on 2018/10/15.// Copyright 2018年 飞飞. All rights reserved.//import UIKitclass ViewController: UIViewController { ..._swift timer 暂停

元素三大等待-程序员宅基地

文章浏览阅读986次,点赞2次,收藏2次。1.硬性等待让当前线程暂停执行,应用场景:代码执行速度太快了,但是UI元素没有立马加载出来,造成两者不同步,这时候就可以让代码等待一下,再去执行找元素的动作线程休眠,强制等待 Thread.sleep(long mills)package com.example.demo;import org.junit.jupiter.api.Test;import org.openqa.selenium.By;import org.openqa.selenium.firefox.Firefox.._元素三大等待

Java软件工程师职位分析_java岗位分析-程序员宅基地

文章浏览阅读3k次,点赞4次,收藏14次。Java软件工程师职位分析_java岗位分析

Java:Unreachable code的解决方法_java unreachable code-程序员宅基地

文章浏览阅读2k次。Java:Unreachable code的解决方法_java unreachable code

标签data-*自定义属性值和根据data属性值查找对应标签_如何根据data-*属性获取对应的标签对象-程序员宅基地

文章浏览阅读1w次。1、html中设置标签data-*的值 标题 11111 222222、点击获取当前标签的data-url的值$('dd').on('click', function() { var urlVal = $(this).data('ur_如何根据data-*属性获取对应的标签对象

推荐文章

热门文章

相关标签