MYSQL 语句

数据库命令

标注:
1.[root@host]# 这个代表在cmd操作
2.mysql> 这个表示登陆mysql服务操作
3.window 怎么直接打开DOS(管理员权限模式)。可以如下:
直接搜索栏输入CMD后(不要立即回车进入),按住CTRL+SHIFT+ENTER键可直接进入管理员模式命令行。

一、登入MYSQL数据库

1.linux打开mysql服务

linux::sudo service mysql start  #打开MySQL 服务

2.window打开mysql服务

在管理员状态下

[root@host]# net start mysql

如果出现服务名无效或者MySQL正在启动 MySQL无法启动
因为net start +服务名,启动的是win下注册的服务。此时,系统中并没有注册mysql到服务中。即当前路径下没有mysql服务。
则在管理员权限下进入mysql server的bin目录

[root@host]# mysqld --install

成功:出现Service successfully install代表你已经安装成功,不成功请检查你是否有在管理员权限下进行。
然后就可以在任意位置输入

在管理员状态下输入[root@host]# net start mysql //如果是mysql8.0服务名为mysql80

当然还有可以到此电脑->管理->服务找到mysql相关的服务直接打开。

3.登入本地mysql服务

[root@host]# mysql -u 用户名 -p   
Enter password:******  #登录后进入终端
mysql>

我们每个mysql最初始都会有一个root用户,代表最高权限的用户。
在其他应用连接mysql数据库时,我们经常会用到’localhost’,‘用户名’,‘密码’或者’服务器地址’,‘用户名’,‘密码’
localhost代表本地,意思是mysql在本地的本地数据库(不用联网也能登陆),127.0.0.1也是一样的意思。换成服务器的ip地址,就可以连接到服务器的mysql数据库,就可以实现数据的云操作。
在cmd连接远程服务器mysql

4.登入服务器mysql服务

[root@host]# mysql -h192.168.0.110 -u用户名 -p密码

如果出现ERROR 1045 (28000): Access denied for user ‘用户名’@‘操作的IP地址’ (using password: YES)可能是密码不对的原因。
(-h就是host,-u就是user,-p就是password,用空格隔开-x后面的信息也是可以的)
如果不输入-h,就是默认本地127.0.0.1
所以本地连接其实也可以是
登入本地mysql的另一种方式

[root@host]# mysql -h127.0.0.1 -u用户名 -p密码

二、创建用户并修改其权限

1.创建一个没有权限的用户

mysql> create user 用户名 identified by '密码';
下次登陆:
[root@host]# mysql -u 用户名 -p  
Enter password:密码  #登录后进入终端
mysql>

2.给予用户权限

mysql> grant 权限 on 数据库.数据表 to '用户' @ '主机名';

若是全部权限
mysql> grant all on *.* to '用户名'@'%';

3.创建用户并给予用户权限

mysql> grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码"

这里举个例子(来自博客
如,增加一个用户ywliyq密码为123456,让其可以在本机上登录, 并对所有数据库有查询、插入、修改、删除的权限

mysql> grant select,insert,update,delete on *.* to ywliyq@localhost Identified by "123456";

如果希望该用户能够在任何机器上登陆mysql,则将localhost改为"%"。

mysql> grant select,insert,update,delete on *.* to ywliyq@'%' Identified by "123456";

4.记得密码情况下mysql5.0和8.0修改密码cmd操作

当记得密码时:
1.[root@host]#  mysqladmin -u用户名 -p旧密码 password 新密码。

5.记得密码情况下mysql5.0修改密码mysql服务操作

1.可以登入mysql服务后
mysql> set password for 用户名@localhost = password('新密码');

2.UPDATE直接编辑user表
首先登录MySQL。
mysql> use mysql;
mysql> update user set password=password('123') where user='root' and host='localhost';
mysql> flush privileges;

6.记得密码情况下mysql8.0修改密码mysql服务操作

1.
mysql> SET PASSWORD = '123456'

2.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

7.忘记密码情况下mysql5.0修改密码mysql服务操作

  1. 关闭正在运行的MySQL服务。
  2. 打开DOS窗口,转到mysql\bin目录。
  3. 输入mysqld --skip-grant-tables 回车。–skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证。
  4. 再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),转到mysql\bin目录。
  5. 输入mysql回车,如果成功,将出现MySQL提示符 >。
  6. 连接权限数据库: use mysql; 。
  7. 改密码:update user set password=password(“123”) where user=“root”;(别忘了最后加分号) 。
  8. 刷新权限(必须步骤):flush privileges; 。
  9. 退出 quit。
  10. 注销系统,再进入,使用用户名root和刚才设置的新密码123登录。

8.忘记密码情况下mysql8.0修改密码mysql服务操作

方法一:利用–init-file参数解决
该参数指定服务启动时先执行一个包含sql命令文件,因此,只需要将重置密码的命令写在该文件中,以此参数指定启动时执行该命令,启动完成即可重置系统密码了。
第一步,关掉系统服务

.[root@host]#net stop mysql

第二步,创建一个文本文件,内含一条密码修改命令

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '';

第三步:命令行方式启动服务器,指定启动时执行上述的密码修改命令文件

mysql> mysqld --init-file=d:mysqlc.txt --console

方法二,想办法让–skip-grant-tables参数用起来
同方法一,先关掉系统服务
实测,在mysql8系统下,用

mysqld --console --skip-grant-tables --shared-memory

可以无密码启动服务
服务启动后,以空密码登入系统

mysql.exe -u root

然后执行sql命令将root用户密码设置为空

UPDATE mysql.user SET authentication_string='' WHERE user='root' and host='localhost';

MySQL8的一些特性导致老方法重置不大管用了,建议使用–init-file参数解决,实测安全可靠。
数据库管理密码丢失是很头疼的事情,如果不能顺利找回,麻烦很大。
以上内容来自博客

三、创建SQL数据库

1.最简单最基础的创建SQL数据库

mysql> CREATE DATABASE 数据库名;

2.普通用户创建数据库(cmd操作)

需要特定的权限来创建或者删除 MySQL 数据库。
可以使用最高级的root命令用户来创建。

[root@host]# mysqladmin -u root -p CREATE 数据库名;
>>输入密码

3.如果不存在数据库则创建,存在则不创建且不报错(推荐)

mysql> create database if not exists test_db default charset utf8 collate utf8_general_ci;

四、使用数据库

mysql> use 数据库名;

五、查看数据库

1.查看显示所有数据库

mysql> show databases;

2.查看当前使用的数据库(常用)

mysql> select database();

3.查看数据库使用的端口

mysql> show variables  like 'port';

4.查看当前数据库大小

use  information_schema;
mysql> select concat(round(sum(data_length)/(1024*1024),2) + round(sum(index_length)/(1024*1024),2),'MB') as 'DB Size'
    -> from tables 
    -> where table_schema='数据库名';

5.查看数据所占的空间大小

mysql> use information_schema;
mysql> select concat(round(sum(data_length)/(1024*1024),2),'MB') as 'DB Size'
    -> from tables
    -> where table_schema='数据库名';

6.查看索引所占的空间大小

mysql> use information_schema;
mysql> select concat(round(sum(index_length)/(1024*1024),2),'MB') as 'DB Size' 
    -> from tables 
    -> where table_schema='INVOICE';

7.查看数据库编码

mysql> show variables like 'character%';

character_set_client 为客户端编码方式;
character_set_connection 为建立连接使用的编码;
character_set_database 为数据库的编码;
character_set_results 为结果集的编码;
character_set_server 为数据库服务器的编码;

mysql> show variables like 'collation%';

8.查看数据库整体信息(status)

mysql> status;

9.查看表

mysql> show tables;

10.查看某个数据库的表信息。

mysql> select * from information_schema.tables where table_schema='databasename'\G;

11.查看某种具体表的信息

mysql> select * from information_schema.tables where table_name ='table_name'\G;

12.查看数据库的所有用户信息(常用)

mysql> select distinct concat('user: ''',user,'''@''',host,''';') as query from mysql.user;

其实也可以进入mysql数据库里,查看user表

use mysql;
 mysql> select user,host from user;

13.查看某个具体用户的权限(常用)

 mysql> show grants for 'root'@'localhost';
 show grants for '用户名'@'ip地址';

14.查看数据库的最大连接数

mysql>  show variables like '%max_connections%';

15.查看数据库当前连接数,并发数。

show status like 'Threads%';

Threads_cached : 代表当前此时此刻线程缓存中有多少空闲线程。
Threads_connected :代表当前已建立连接的数量,因为一个连接就需要一个线程,所以也可以看成当前被使用的线程数。
Threads_created :代表从最近一次服务启动,已创建线程的数量。
Threads_running :代表当前激活的(非睡眠状态)线程数。并不是代表正在使用的线程数,有时候连接已建立,但是连接处于sleep状态,这里相对应的线程也是sleep状态。

16.查看数据文件存放路径(常用)

show variables like '%datadir%';

引用博客

(补充 variables信息)

MySQL Variables在这里实际上指的是一些参数,用于初始化或设定数据库对系统资源的占用,文件存放位置等。在新安装好系统后,就已经被初始化好了。但是我们有时候不想采取默认值,所以就需要对这些值做出改变。
查看系统变量的值(show)
查看方法一: 系统变量存放在performance_schema数据库里的GLOBAL_VARIABLES和SESSION_VARIABLES表中,可以直接通过查看表的内容获得。

mysql> use performance_schema
Database changed

mysql> show tables like '%variables';
+-------------------------------------------+
| Tables_in_performance_schema (%variables) |
+-------------------------------------------+
| global_variables                          |
| persisted_variables                       |
| session_variables                         |
+-------------------------------------------+
3 rows in set (0.00 sec)

查看方法二: 使用show variables语法

mysql> SHOW [GLOBAL | SESSION] VARIABLES [LIKE 'pattern' | WHERE expr]

修改系统变量的值

mysql> set [GLOBAL | SESSION] 需要设置的变量

引用博客

(补充mysql中\G和\g的作用)

\g:等价于“;”
\G:将查询到的横向表格纵向输出,方便阅读

六、Mysql数据类型

1.mysql数据类型

整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT

浮点数类型:FLOAT、DOUBLE、DECIMAL

字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB

日期类型:Date、DateTime、TimeStamp、Time、Year

其他数据类型:BINARY、VARBINARY、ENUM、SET、Geometry、Point、MultiPoint、LineString、MultiLineString、Polygon、GeometryCollection等

(1) 整型

MySQL数据类型含义(有符号)
tinyint(m)1个字节 范围(-128~127)
smallint(m)2个字节 范围(-32768~32767)
mediumint(m)3个字节 范围(-8388608~8388607)
int(m)4个字节 范围(-2147483648~2147483647)
bigint(m)8个字节 范围(±9.22*10的18次方)

(2) 浮点型(float和double)

MySQL数据类型含义
float(m,d)单精度浮点型 8位精度(4字节) m总个数,d小数位
double(m,d)双精度浮点型 16位精度(8字节) m总个数,d小数位

(3) 定点数

浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。

MySQL数据类型含义
decimal(m,d)参数m<65 是总个数,d<30且 d<m 是小数位。

(4)字符串(char,varchar,_text)

MySQL数据类型含义
char(n)固定长度,最多255个字符
varchar(n)固定长度,最多65535个字符
tinytext可变长度,最多255个字符
text可变长度,最多65535个字符
mediumtext可变长度,最多2的24次方-1个字符
longtext可变长度,最多2的32次方-1个字符

char和varchar:
1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。
2.char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),
所以varchar(4),存入3个字符将占用4个字节。
3.char类型的字符串检索速度要比varchar类型的快。
varchar和text:
1.varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字节。
2.text类型不能有默认值。
3.varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。

(5)二进制数据(_Blob)

1._BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写。
2._BLOB存储的数据只能整体读出。
3._TEXT可以指定字符集,_BLO不用指定字符集。

(6)日期时间类型

MySQL数据类型含义
date日期 ‘2008-12-2’
time时间 ‘12:25:36’
datetime日期时间 ‘2008-12-2 22:06:44’
timestamp自动存储记录修改时间

若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。

2.数据类型的属性

MySQL关键字含义
NULL数据列可包含NULL值
NOT NULL数据列不允许包含NULL值
DEFAULT默认值
PRIMARY KEY主键
AUTO_INCREMENT自动递增,适用于整数类型
UNSIGNED无符号
CHARACTER SET name指定一个字符集

3.MYSQL数据类型的长度和范围

数据类型字节长度范围或用法
Bit1无符号[0,255],有符号[-128,127],天缘博客备注:BIT和BOOL布尔型都占用1字节
TinyInt1整数[0,255]
SmallInt2无符号[0,65535],有符号[-32768,32767]
MediumInt3无符号 [ 0 , 2 24 − 1 ] [0,2^{24}-1] [0,2241],有符号 [ − 2 23 , 2 23 − 1 ] ] [-2^{23},2^{23}-1]] [223,2231]]
Int4无符号 [ 0 , 2 32 − 1 ] [0,2^{32}-1] [0,2321],有符号 [ − 2 31 , 2 31 − 1 ] [-2^{31},2^{31}-1] [231,2311]
BigInt8无符号 [ 0 , 2 64 − 1 ] [0,2^{64}-1] [0,2641],有符号 [ − 2 63 , 2 63 − 1 ] [-2^{63} ,2^{63} -1] [263,2631]
Float(M,D)4单精度浮点数。天缘博客提醒这里的D是精度,如果D<=24则为默认的FLOAT,如果D>24则会自动被转换为DOUBLE型。
Double(M,D)8双精度浮点。
Decimal(M,D)M+1或M+2未打包的浮点数,用法类似于FLOAT和DOUBLE,天缘博客提醒您如果在ASP中使用到Decimal数据类型,直接从数据库读出来的Decimal可能需要先转换成Float或Double类型后再进行运算。
Date3以YYYY-MM-DD的格式显示,比如:2009-07-19
Date Time8以YYYY-MM-DD HH:MM:SS的格式显示,比如:2009-07-19 11:22:30
TimeStamp4以YYYY-MM-DD的格式显示,比如:2009-07-19
Time3以HH:MM:SS的格式显示。比如:11:22:30
Year1以YYYY的格式显示。比如:2009
Char(M)M定长字符串。
VarChar(M)M变长字符串,要求M<=255
Binary(M)M类似Char的二进制存储,特点是插入定长不足补0
VarBinary(M)M类似VarChar的变长二进制存储,特点是定长不补0
Tiny TextMax:255大小写不敏感
TextMax:64K大小写不敏感
Medium TextMax:16M大小写不敏感
Long TextMax:4G大小写不敏感
TinyBlobMax:255大小写敏感
BlobMax:64K大小写敏感
MediumBlobMax:16M大小写敏感
LongBlobMax:4G大小写敏感
Enum1或2最大可达65535个不同的枚举值
Set可达8最大可达64个不同的值
Geometry
Point
LineString
Polygon
MultiPoint
MultiLineString
MultiPolygon
GeometryCollection

4.数据类型使用建议

1、在指定数据类型的时候一般是采用从小原则,比如能用TINY INT的最好就不用INT,能用FLOAT类型的就不用DOUBLE类型,这样会对MYSQL在运行效率上提高很大,尤其是大数据量测试条件下。
2、不需要把数据表设计的太过复杂,功能模块上区分或许对于后期的维护更为方便,慎重出现大杂烩数据表
3、数据表和字段的起名字也是一门学问
4、设计数据表结构之前请先想象一下是你的房间,或许结果会更加合理、高效
5、数据库的最后设计结果一定是效率和可扩展性的折中,偏向任何一方都是欠妥的

5.按存储引擎选择数据类型:

  • MyISAM 数据存储引擎和数据列:MyISAM数据表,最好使用固定长度(CHAR)的数据列代替可变长度(VARCHAR)的数据列。
  • MEMORY存储引擎和数据列:MEMORY数据表目前都使用固定长度的数据行存储,因此无论使用CHAR或VARCHAR列都没有关系。两者都是作为CHAR类型处理的。
  • InnoDB 存储引擎和数据列:建议使用 VARCHAR类型。

对于InnoDB数据表,内部的行存储格式没有区分固定长度和可变长度列(所有数据行都使用指向数据列值的头指针),因此在本质上,使用固定长度的CHAR列不一定比使用可变长度VARCHAR列简单。因而,主要的性能因素是数据行使用的存储总量。由于CHAR平均占用的空间多于VARCHAR,因 此使用VARCHAR来最小化需要处理的数据行的存储总量和磁盘I/O是比较好的。

6.浮点数与定点数的选择:

1.浮点数存在误差问题;
2.对货币等对精度敏感的数据,应该用定点数表示或存储;
3.编程中,如果用到浮点数,要特别注意误差问题,并尽量避免做浮点数比较;
4.要注意浮点数中一些特殊值的处理。
以上来自博客

7.数据库一般不用来存储图片

首先,图片上可以存储到数据库里的,可以通过二进制流将图片存到数据库中。

**但是,强烈不建议把图片存储到数据库中!!!!**首先对数据库的读/写的速度永远都赶不上文件系统处理的速度,其次数据库备份变的巨大,越来越耗时间,最后对文件的访问需要穿越你的应用层和数据库层。图片是数据库最大的杀手。一般来说数据库都是存储一个URL,然后再通过URL来调用图片。

图片,文件,二进制数这三样东西慎重存储到数据库中。现在很多企业都是这样来处理图片的,用MySQL数据库存储URL,图片则是存储在阿里云上。

8.MySQL 字段属性应该尽量设置为 NOT NULL

除非你有一个很特别的原因去使用 NULL 值,你应该总是让你的字段保持 NOT NULL。这看起来好像有点争议,请往下看。
1、首先,我们要搞清楚空值 “” 和 NULL 的概念:
1)空值是不占用空间的
2)MySQL中的NULL其实是占用空间的
所谓的 NULL 就是什么都没有,连 \0 都没有,\0 在字符串中是结束符,但是在物理内存是占空间的,等于一个字节,而 NULL 就是连这一个字节都没有。
2、其次,在数据库里是严格区分的,任何数跟 NULL 进行运算都是 NULL, 判断值是否等于 NULL,不能简单用 =,而要用 IS NULL关键字。
3、数据库的字段 col1 设为 NOT NULL, 仅仅说明该字段不能为 NULL, 也就是说只有在:

INSERT INTO table1(col1) VALUES(NULL);

这种情况下数据库会报错,而:

INSERT INTO table1(col1) VALUES('');

不会报错。
(如果字段是自增ID,第一句不会报错,这不能说明是可以为NULL,而是 数据库系统会根据ID设的缺省值填充,或者如果是自增字段就自动加一等缺省操作。)
4、含有空值的列很难进行查询优化,而且对表索引时不会存储 NULL 值的,所以如果索引的字段可以为 NULL,索引的效率会下降很多。因为它们使得索引、索引的统计信息以及比较运算更加复杂。你应该用 0、一个特殊的值或者一个空串代替空值。
5、联表查询的时候,例如 LEFT JOIN table2,若没有记录,则查找出的 table2 字段都是 null。假如 table2 有些字段本身可以是 null,那么除非把 table2 中 not null 的字段查出来,否则就难以区分到底是没有关联记录还是其他情况。
(以上来自菜鸟教程)

七、表

1.最简单的创建表

在 MySQL 中,可以使用 CREATE TABLE 语句创建表。其语法格式为:

CREATE TABLE <表名> ([表定义选项])[表选项][分区选项];

其中,[表定义选项]的格式为:

<列名1> <类型1> [,] <列名n> <类型n>

2.不存在则建表,存在则不建(推荐)

CREATE TABLE IF NOT EXISTS 表名(
   <列名1> <类型1> [,] <列名n> <类型n>
)ENGINE=存储引擎 DEFAULT CHARSET=设置编码;

例子:

CREATE TABLE IF NOT EXISTS `runoob_tbl`(
   `runoob_id` INT UNSIGNED AUTO_INCREMENT,
   `runoob_title` VARCHAR(100) NOT NULL,
   `runoob_author` VARCHAR(40) NOT NULL,
   `submission_date` DATE,
   PRIMARY KEY ( `runoob_id` ),
   constraint  c1 foreign key (depart_id) references depart_table(depart_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

创建 MySql 的表时,表名和字段名外面的符号 ` 不是单引号,而是英文输入法状态下的反单引号,也就是键盘左上角 esc 按键下面的那一个 ~ 按键,

  • 如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。
  • AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。 PRIMARY KEY关键字用于定义列为主键。
  • 您可以使用多列来定义主键,列间以逗号分隔。
  • ENGINE 设置存储引擎,CHARSET 设置编码。
  • UNSIGNED 代表只能插入正数

3.查看表

 mysql> SHOW TABLES;

4.查看表信息

 mysql> DESCRIBE <表名>;
或简写成:
 mysql> DESC <表名>;

如果键是PRI,则列是主键或多列主键中的列之一。
如果键是UNI,则该列是唯一索引的第一列。(唯一索引允许多个空值,但可以通过检查Null字段来判断该列是否允许空。)
如果键为MUL,则该列是非唯一索引的第一列,其中允许在列中多次出现给定值。

5.显示创建表时的CREATE TABLE语句

 mysql> SHOW CREATE TABLE <表名>\G;

往表中插入数据

 mysql> insert into 表名(属性名) values(插入的值); 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值