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

智能推荐

使用nginx解决浏览器跨域问题_nginx不停的xhr-程序员宅基地

文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr

在 Oracle 中配置 extproc 以访问 ST_Geometry-程序员宅基地

文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc

Linux C++ gbk转为utf-8_linux c++ gbk->utf8-程序员宅基地

文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8

IMP-00009: 导出文件异常结束-程序员宅基地

文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束

python程序员需要深入掌握的技能_Python用数据说明程序员需要掌握的技能-程序员宅基地

文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求

Spring @Service生成bean名称的规则(当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致)_@service beanname-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname

随便推点

二叉树的各种创建方法_二叉树的建立-程序员宅基地

文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<iostream>#include<stack>#include<queue>using namespace std;typed_二叉树的建立

解决asp.net导出excel时中文文件名乱码_asp.net utf8 导出中文字符乱码-程序员宅基地

文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码

笔记-编译原理-实验一-词法分析器设计_对pl/0作以下修改扩充。增加单词-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词

android adb shell 权限,android adb shell权限被拒绝-程序员宅基地

文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限

投影仪-相机标定_相机-投影仪标定-程序员宅基地

文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定

Wayland架构、渲染、硬件支持-程序员宅基地

文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland

推荐文章

热门文章

相关标签