MySql教程

MySQL数据库

本文主要是介绍MySQL数据库,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、mysql数据库概述

说明:mysql最新的是8.0,我们基础阶段学的是5.7。

1、DBMS:数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,例如建立、使用和维护数据库。

2、DB:数据库(Database)

3、SQL:结构化查询语言,(Structure Query Language),专门用来操作/访问数据库的通用语言。

4、MySQL:其中的一款关系型数据库管理系统。

    关系:一对一,一对多,多对多

5、MySQL是一种开放源代码的关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。而2009年,SUN又被Oracle收购。目前 MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,使得很多互联网公司选择了MySQL作为网站数据库(Facebook, Twitter, YouTube,阿里的蚂蚁金服,去哪儿,魅族,百度外卖,腾讯)。  

二、mysql的下载安装与卸载

三、启动和停止mysql服务

方式1:图形界面(此电脑->管理->服务->mysql->启动/停止此服务)

 方式2:命令<注意:命令行要用管理员身份运行 >

            net stop mysql服务名         net start mysql服务名  

四、mysql服务的连接(注意:确认服务是开启的)

方式1:使用命令行客户端连接mysql服务

            mysql -h主机IP地址 -P端口号 -u用户名 -p回车
            Enter password:输入密码

如果是连接本机的mysql服务器,端口号是3306,那么“-hlocalhost -P3307”可以省略。

如果输入mysql命令报“不是内部或外部命令”,把mysql安装目录的bin目录配置到环境变量path中

     例如: mysql -hlocalhost -P3307 -uroot -p回车
                 Enter password:123456

方式2:可以使用其他客户端(可视化工具)连接

五、mysql的使用

1、查看所有的数据库             show   databases;

2、创建自己的数据库            create database  数据库名;

3、使用自己的数据库              use  数据库名;

说明:如果没有使用use语句,后面针对数据库的操作也没有加“数据名”的限定,那么会报“ERROR 1046 (3D000): No database selected”(没有选择数据库)

使用完use语句之后,如果接下来的SQL都是针对一个数据库操作的,那就不用重复use了,如果要针对另一个数据库操作,那么要重新use。

4、查看某个库的所有表格     show  tables; #要求前面有use语句     show tables  from  数据库名;

5、创建新的表格     

说明:如果是最后一个字段,后面就用加逗号,因为逗号的作用是分割每个字段。             

      create    table  表名称(                                                

          字段名   数据类型,                                                

           字段名  数据类型                                        

      );

#创建学生表
create table student(  
  id int,  
  name varchar(20)  #说名字最长不超过20个字符
);

6、查看一个表的数据               select * from  数据库名称;

7、添加一条记录                      insert  into 表名称 values(值列表);

#添加两条记录到student表中
insert into student values(1,'张三');
insert into student values(2,'李四');

 8、查看表的创建信息            show create table 表名称\G 

#查看student表的详细创建信息
show create table student\G
#结果如下*************************** 1. row ***************************     
  Table: student
Create Table: CREATE TABLE `student` (  
 `id` int(11) DEFAULT NULL,  
 `name` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin11
 row in set (0.00 sec)

上面的结果显示student的表格的默认字符集是“latin1”不支持中文。

9、查看数据库的创建信息                 show  create  database 数据库名\G

#查看atguigudb数据库的详细创建信息
show create database atguigudb\G
#结果如下
*************************** 1. row ***************************
       Database: atguigudb
Create Database: CREATE DATABASE `atguigudb` /*!40100 DEFAULT CHARACTER SET latin1 */
1 row in set (0.00 sec)

10、删除表格          drop  table  表名称;

11、删除数据库       drop  table  数据库名;

六、设置mysql的编码方式

修改配置文件

(1)注意:先停止服务

(2)找到配置文件

mysql5.7版本:在mysql的数据目录下,有一个my.ini文件

例如:D:\ProgramFiles\MySQL\MySQLServer5.7_Data下有一个my.ini文件

(3)修改my.ini,然后保存

注意:建议修改配置文件使用notepad++等高级文本编辑器,使用记事本等软件打开修改后可能会导致文件编码修改为“含BOM头”的编码,从而服务重启失败。

[mysql]
no-beep
default-character-set=UTF8  #默认字符集

[mysqld]
port=3307
datadir=D:/ProgramFiles/MySQL/MySQLServer5.7_Data/Data

character-set-server=UTF8  #服务器端字符集

(4)重启服务

七、mysql支持的数据类型

7.1 数值类型:包括整数和小数

整数:tinyint,smallint,mediumint,int,bigint,bit(位)

小数:float,double,decimal,real,numeric

1、整数类型

 说明:

int(M):没有指定(M),默认显示(11)。最多能存储和显示11位整数。

(M)这个M在字段的属性中指定了unsigned(无符号)和zerofill(零填充)的情况下才有意义。表示当整数值不够M位时,用0填充。如果整数值超过M位,就按照实际位数存储。

create table temp(
	num1 int(4) unsigned zerofill,
    num2 int(4)
);
insert into temp values(1,1);
insert into temp values(12345,12345);
mysql> select * from temp;
+-------+-------+
| num1  | num2  |
+-------+-------+
|  0001 |     1 |
| 12345 | 12345 |
+-------+-------+
2 rows in set (0.00 sec)

2、bit类型

create table temp(
	num bit
);
insert into temp values(1101); //报错ERROR 1406 (22001): Data too long for column 'num' at row 1

bit类型,如果没有指定(M),默认是1位。这个1位,那么表示只能存1位的二进制值。这里(M)是表示二进制的位数。

create table temp( 
    num bit(4)
);

3、小数类型

小数类型如果没有指定(M,D),就按照它实际能表示的范围和精度来检查。

小数类型如果指定(M,D),说明这个小数最多只能是M位,这个M位包括整数位+小数位,这个D表示小数点后最多是D位。整数部分最多M-D位。

create table temp(  
  num1 double,  
  num2 double(5,2)  #整数部分最多3位,总的位数是5位,范围[-999.99, 999.99]
);
insert into temp values(123456.789123, 123.789123); #成功
mysql> select * from temp;
+---------------+--------+
| num1          | num2   |
+---------------+--------+
| 123456.789123 | 123.79 |  #发生小数点后有截断现象,并且会四舍五入
+---------------+--------+
1 row in set (0.00 sec)

7.2 字符串类型(文本类型)

字符串类型:

(1)char和varchar

(2)tinytext,text,mediumtext,longtext

(3)binary, varbinary:存二进制字符串

(4)tinyblob,blob,mediumblob , longblob:以文本形式存二进制的数值,一般存储图片,视频等数据

  

char:不同于Java中的char,Java中的char是单字符类型,只能存储1个字符。

mysql中的char是字符串类型,可以存储1个或者多个字符。

如果char没有指定(M),默认只能存储1个字符,如果指定(M)可以存储M个字符。

create table temp(
	c1 char,
    c2 char(3)
);
insert into temp values('男','女');#成功
​insert into temp values('尚硅谷','尚硅谷');#失败ERROR 
1406 (22001): Data too long for column 'c1' at row 1
​insert into temp values('男','尚硅谷');#成功

2、varchar:变长/不定长字符串

create table temp(
	name varchar(3)  #最多不超过3个字符
);



insert into temp values('尚硅谷');

insert into temp values('尚硅谷真好');#ERROR 1406 (22001): Data too long for column 'name' at row 1

insert into temp values('好');


drop table temp;
create table temp(
	name varchar(65535)
);
#ERROR 1074 (42000): Column length too big for column 'name' (max = 21845); use BLOB or TEXT instead
因为当前的表是UTF8,一个汉字占3个字节

3、binary系列

binary存储二进制字符串。

binary如果没有指定(M),默认是1个字节。

binary如果指定(M),不能超过M个字节。

create table temp(  
  c1 binary,  
  c2 binary(3)
);
insert into temp values('a','a');#成功

insert into temp values('ab','ab');#失败
ERROR 1406 (22001): Data too long for column 'c1' at row 1

insert into temp values('尚','尚');#失败
ERROR 1406 (22001): Data too long for column 'c1' at row 1

insert into temp values('a','尚');#成功

insert into temp values('a','尚硅谷');
ERROR 1406 (22001): Data too long for column 'c2' at row 1

4、blob系列(学习JDBC时候再演示)

7.3 日期时间类型

year:存储年份。

date:存储日期。

time:存储时间。

datetime:存储日期+时间

timestamp:存储日期+时间

datetime和timestamp的区别:

(1)范围不同

(2)底层存储方式不同,timestamp底层存储的是毫秒值,距离1970-1-1 0:0:0 0毫秒秒的毫秒值。

两个日期比较大小或日期计算时,timestamp更方便更快。

(3)timestamp会根据用户的时区不同,显示不同的结果。

create table temp(
	d1 datetime,
	d2 timestamp
);


insert into temp values('2021-9-2 14:45:52','2021-9-2 14:45:52');


#修改当前的时区
set time_zone = '+9:00';


insert into temp values('202192144552','202192144552');
#ERROR 1292 (22007): Incorrect datetime value: '202192144552' for column 'd1' at row 1


insert into temp values('20210902144552','20210902144552');


```mysql
insert into temp values('2021&9&2 14%45%52','2021#9#2 14@45@52');
```

year:

year可以指定4位数,也可以指定2位数。如果是2位数的话,那么[70,99]相当于19xx年,如果是[0, 69]相当于20xx年。这个0年,如果是以整数的0添加的话,那么是0000年,如果是以日期/字符串的'0'添加的话,是2000年。

create table temp(
	d year
);


insert into temp values(2021);
insert into temp values(85);
insert into temp values(22);
insert into temp values(69);
insert into temp values(0);
insert into temp values('0');
mysql> select * from temp;
+------+|
 d    |
+------+
| 2021 |
| 1985 |
| 2022 |
+------+
3 rows in set (0.00 sec)

7.4 后增的特殊的字符串类型

1、枚举类型:多个字符串中选一个

2、集合类型:多个字符串中选1个或多个

3、JSON类型(后面大家再学习)

演示枚举类型:

create table temp(
	gender enum('男','女'),
    hobby set('睡觉','打游戏','泡妞','写代码')
);
insert into temp values('男','睡觉,打游戏'); #成功

insert into temp values('男,女','睡觉,打游戏'); #失败
#ERROR 1265 (01000): Data truncated for column 'gender' at row 1


insert into temp values('妖','睡觉,打游戏');#失败
ERROR 1265 (01000): Data truncated for column 'gender' at row 1

insert into temp values('男','睡觉,打游戏,吃饭');
ERROR 1265 (01000): Data truncated for column 'hobby' at row 1

7.5 其他类型

空间类型

八、SQL语句

SQL:结构化查询语言,(Structure Query Language),专门用来操作/访问数据库的通用语言。

8.1、语法

(1)mysql的sql语法不区分大小写

A:数据库的表中的数据是否区分大小写。这个的话要看表格的字段的数据类型、编码方式以及校对规则。

ci(大小写不敏感),cs(大小写敏感),_bin(二元,即比较是基于字符编码的值而与language无关,区分大小写)

B:sql中的关键字,比如:create,insert等,不区分大小写。但是大家习惯上把关键字都“大写”。

(2)命名时:尽量使用26个英文字母大小写,数字0-9,下划线,不要使用其他符号

(3)建议不要使用mysql的关键字等来作为表名、字段名、数据库名等,如果不小心使用,请在SQL语句中使用`(飘号)引起来

(4)数据库和表名、字段名等对象名中间不要包含空格

(5)同一个mysql软件中,数据库不能同名,同一个库中,表不能重名,同一个表中,字段不能重名

mysql> show tables;
+---------------------+
| Tables_in_atguigudb |
+---------------------+
| student             |
| temp                |
+---------------------+
2 rows in set (0.00 sec)​
mysql> create table temp(id int);
ERROR 1050 (42S01): Table 'temp' already exists

(6)标点符号:

必须成对

必须英文状态下半角输入方式

字符串和日期类型的数据值使用单引号''

列的别名可以使用双引号"",给表名取别名不要使用双引号。取别名时as可以省略

如果列的别名没有包含空格,可以省略双引号,如果有空格双引号不能省略。

mysql> select * from student;
+------+------+
| id   | name |
+------+------+
|    1 | 张三 |
|    2 | 李四 |
+------+------+
2 rows in set (0.00 sec)

mysql> select id "学号",name "姓名" from student;
+------+------+
| 学号 | 姓名 |
+------+------+
|    1 | 张三 |
|    2 | 李四 |
+------+------+
2 rows in set (0.00 sec)

说明:列的别名有空格时,请加双引号,列的别名中没有空格,可以加也可以不加。

(7)SQL脚本中如何加注释

单行注释:#注释内容

单行注释:--空格注释内容 其中--后面的空格必须有

多行注释:/* 注释内容 */

8.2 SQL的分类

DDL语句:数据定义语句(Data Define Language),例如:create,alter,drop等

DML语句:数据操作语句,例如:增(insert),删(delete),改(update),查(select)

因为查询语句使用的非常的频繁,所以很多人把查询语句单拎出来一类,DQL(数据查询语言),DR(获取)L

DCL语句:数据控制语句,例如:grant,commit,rollback等

create table tt(   
 id int, #编号   
 `name` varchar(20), -- 姓名   
 gender enum('男','女')  
  /*   
 性别只能从男或女中选择一个, 
   不能两个都选,或者选择男和女之外的  
  */
);
这篇关于MySQL数据库的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!