mysql flush pri_MySQL数据库管理之日常操作

本文介绍了MySQL的基础知识,包括数据库的处理方式、线程池的特点、锁机制、数据存储与日志文件。强调了MySQL的线程池管理,分析了InnoDB与MyISAM引擎的对比,并详细阐述了MySQL的安装配置过程。此外,还讨论了用户管理、权限刷新、数据插入、查询操作以及更新和删除数据的方法。
摘要由CSDN通过智能技术生成

Mysql基础及日常操作

关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据,存储下来表现为表,但表中数据不能过度冗余。

Mysql的处理方式

数据库本身比web服务器方面处理请求要重量级很多,一个用户连进来可能发起查询操作,查询本身要验证用户的权限,因为每个用户权限都不同,所以要把索引载入内存,要完成条件比较排序等,它需要的资源量非常大,一般来讲对于数据库不会一线程响应多请求,最多则是一个线程来响应一个请求。因此,对于mysql而言,当请求到来的时候,有独立的线程池(类似于prefork),当一个用户连接进来,则在线程池获取一个配额给用户,直到配额耗尽。

Mysql线程池特点:

1.限定了并发线程数

2.维持一定空闲线程个数

锁:控制并发访问,一个用户在执行操作的过程,其他人不能进行操作。

随机访问:随机I/O --> 顺序I/O

每次对数据库修改操作都是一条语句,将操作本身记录在单独一个文件中,而这个文件本身是追加式的操作,只能往后写,而这个文件是连续的磁盘块,每隔一段时间,又服务自行将日志文件的语句真正操作一遍并将数据块在内存中缓存下来,所以在内存的索引中完成查找,在内存缓存的数据块中找到数据,所以查询在内存中执行,很显然,如果内存足够大,能缓存的越多那么速度就越快。

日志文件:

1.必须是磁盘上的连续块

2.大小是固定的

将大事物分割成很多小事物会提升很大的性能

mysql组成部分:

2265f6909e35bb3294ae4b96f344dbd1.png

1.连接管理器 :用户请求进来后,都由连接管理器负责接收,并在线程池配额出一个单独线程进行处理。

2.为了查询效果更好,Mysql有独立的查询缓存机制,如果用户做的查询操作的话,先查缓存,如果缓存存在数据的话则直接返回,如果没有则交给分析器。

3.如果缓存未命中,则通过分析器来分析,通过分析器分析结果发现缓存有可能还能命中,这时还会跟缓存打交道(将结果加入到缓存),如果分析结果发现与缓存仍然没有关系于是将分析结果开始执行,执行之前先优化

4.优化器负责索引优化,于是将数据块载入进来并对查询语句进行转化,转化等价的查询语句

Mysql常用引擎

1.mysql

2.innodb

二者间对比:

MyISAM                                     InnoDB

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

事务不支持支持

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

数据行锁定不支持,只有表锁定支持行锁

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

外键约束          不支持                                     支持

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

表空间大小        相对小                                     相对大,最大是2倍

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

全文索引          支持                                       不支持

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

GIS数据           支持                                       不支持

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

COUNT问题         无                                         执行COUNT(*)查询时,速度慢

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

占用系统资源       少                                       多

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

适合业务类型       读多写少的业务(blog)                    适合读写都比较多的业务(sns,log)

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

生产场景           轻量及读多的业务                          高访问量读写的业务(使用很广(bbs

安装配置Mysql

可通过官网http://www.mysql.com/ 获取最新mysql安装包,Mysql安装包类型:

·源码编译包

·通用二进制格式安装包

·rpm安装包

1.下载Mysql

(1)进入官网下载通用二进制格式包:

60439767bc66521cff6ec6d1b429c841.png

(2)选择GPL

2d8f93caf00c3cd2171d8622afa605af.png

(3)选择下载

2e237b85fc95e3de6f2c3a2253528878.png

(4)选择要下载的版本

4884247cd864c07bc47832fda2aea03a.png

或者通过国内镜像下载

下载完毕后,我们来安装二进制格式Mysql

2.准备工作:

(1)创建逻辑卷组用来存放mysql数据文件设,置其目录为/mysqldata/data/ ,将数据放在lvm中既可以方便扩展空间,又可以使用快照来恢复数据

(2)使用fdisk单独分出2个扩展分区,并更改文件系统格式为8e(LVM),并每个分区分配5G空间

/dev/sdb2            655        1308    5253255   8e  Linux LVM

/dev/sdb3             1309       1962     5253255   8e  Linux LVM

(3)创建LVM

创建pv

[root@test3support-files]# pvcreate /dev/sdb{2,3}

Physical volume "/dev/sdb2" successfully created

Physical volume "/dev/sdb3" successfully created

创建vg

[root@test3support-files]# vgcreate myvg /dev/sdb{2,3}

Volume group "myvg" successfully created

查看vg是否创建成功

[root@test3support-files]# vgs

VG   #PV #LV #SN Attr   VSize  VFree

myvg   2   0   0 wz--n- 10.02g 10.02g

lvcreate

创建LV,分配5G空间

[root@test3~]# lvcreate -L 5G -n mydata myvg

Logical volume "mydata" created

查看lv

[root@test3~]# lvs

LV     VG  Attr      LSize Pool Origin Data%  Move LogCpy%Sync Convert

mydata myvg -wi-a---- 5.00g

查看目录

[root@test3~]# ls /dev/mapper/myvg-mydata

/dev/mapper/myvg-mydata

格式化并指定块大小,如果将来存储mysql数据,可以发现mysql数据单个文件都比较大,不会出现很小的文件,所以最好将其块设置较大

[root@test3~]# mke2fs -t ext4 -b4096/dev/myvg/mydata

使其开机自动挂载

[root@test3~]# echo " /dev/myvg/mydata/       /mydata      ext4     defaults,noatime 0 0" >> /etc/fstab

创建并挂载目录

[root@test3~]# mkdir /mydata/data

[root@test3~]# mount -a

安装mysql

[root@test3tools]# mv mysql-5.5.33-linux2.6-i686 /usr/local/

#一般默认mysql都是在/usr/local/mysql 所以必须改名或者创建软连接

[root@test3local]# ln -s /usr/local/mysql-5.5.33-linux2.6-i686/ /usr/local/mysql

[root@test3local]# ll | grep mysql

lrwxrwxrwx   1 root root   38 1月   7 22:05 mysql ->/usr/local/mysql-5.5.33-linux2.6-i686/

drwxr-xr-x  13 root root 4096 1月   718:36 mysql-5.5.33-linux2.6-i686

更改权限:

属主为root,属组为mysql,如果使用data作为数据目录的话,都必须是mysql

[root@test3local]# cd mysql

[root@test3local]# chown root.mysql -R mysql/*

生成配置文件

在support-files目录拷贝模板文件

[root@test3mysql]# cd support-files/

[root@test3support-files]# ls

binary-configure   config.small.ini  my-innodb-heavy-4G.cnf  my-small.cnf         mysql.server

config.huge.ini    magic             my-large.cnf            mysqld_multi.server  ndb-config-2-node.ini

config.medium.ini  my-huge.cnf       my-medium.cnf           mysql-log-rotate     solaris

复制主配置文件my.cnf

如果你的内存小于64M,则复制/usr/local/share/mysql/my-small.cnf为/etc/my.cnf

如果内存是128M,则复制/usr/local/share/mysql/my-medium.cnf为/etc/my.cnf

如果内存是512M,则复制/usr/local/share/mysql/my-large.cnf为/etc/my.cnf

如果内存是1-2G,则复制/usr/local/share/mysql/my-huge.cnf为/etc/my.cnf

我们的内存是512MB所以需要拷贝my-large.cnf

[root@test3support-files]# cp my-large.cnf /etc/my.cnf

修改参数:

datadir=/mydata/data/   #数据存放路径

thread_concurrency= 4  #并发线程数,一般为物理核心的2倍,假如只有2个cpu则改为4以此类推

拷贝mysql启动文件

[root@test3support-files]# cp mysql.server /etc/init.d/mysqld

加入开机启动项

[root@test3 support-files]# chkconfig --list |grep mysql

mysqld             0:off    1:off    2:on 3:on 4:on 5:on 6:off

初始化mysql

[root@test3scripts]# ./mysql_install_db --user=mysql --datadir=/mydata/data/--basedir=/usr/local/mysql

启动mysql

[root@test3support-files]# /etc/init.d/mysqld start

头文件导出

[root@test3~]# ln -s /usr/local/mysql/include/ /usr/include/mysql/

库文件导出

[root@test3scripts]# vim /etc/ld.so.conf.d/mysql.conf

[root@test3~]# cat /etc/ld.so.conf.d/mysql.conf

/usr/local/mysql/lib/

[root@test3 scripts]# ldconfig

启动mysql

[root@test3support-files]# /etc/init.d/mysqld start

StartingMySQL SUCCESS!

mysql常用管理命令

显示服务器变量,可以修改,能够改变mysql的工作特性

mysql>show variables;

有些可以动态调整即可生效,而另外一些只能修改配置文件后重启服务生效,如:

|datadir                                          | /mydata/data/

查看当前状态,显示服务器状态变量,记录了当前包括过去时间内mysql的运行统计数据

mysql>show status;

Mysql的交互方式

-h--host=             #指定主机

-u--user=             #指定用户

-p--password=''       #指定密码

-D                     #指定库名直接进入指定库

-e'SQL_Statement;'   #直接进行语句操作不用登录mysq

mysql客户端执行命令

客户端命令:不需要语句结束符,具体可以使用help命令来查看:

mysql>help

服务器端命令:支持sql语句,必须有语句结束符,默认为分号,具体可以使用help command来查看,如下所示:

mysql>help create

Manyhelp items for your request exist.

Tomake a more specific request, please type 'help ',

where is one of the following

topics:

CREATE DATABASE

CREATE EVENT

###########中间略##############

SHOW CREATE FUNCTION

SHOW CREATE PROCEDURE

SHOW CREATE TABLE

SPATIAL

用户管理命令

创建用户:

格式:create user username@host identfied by 'passowrd';

创建用户wpuser,密码为123456 ,并只能使其通过10.0.10.x段可以访问

mysql>create user 'wpuser'@'10.0.10.0/24' identified by '123456';

QueryOK, 0 rows affected (0.00 sec)

查看用户

mysql>select user,host,password from user;

+--------+--------------+-------------------------------------------+

|user   | host         | password                                  |

+--------+--------------+-------------------------------------------+

|root   | localhost    | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9|

|wpuser| 10.0.10.0/24 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9|

|root   | 127.0.0.1    |                                           |

|root   | ::1          |                                           |

|        | localhost    |                                           |

+--------+--------------+-------------------------------------------+

5rows in set (0.00 sec)

创建完用户一定要刷新权限

mysql>flush privileges;

QueryOK, 0 rows affected (0.00 sec)

MySQL用户授权

格式:

grantall privileges on库名.表名 to 用户@主机地址IDENTIFEN BY '密码';

创建库,并对其进行授权

mysql>create database wpdb;

QueryOK, 1 row affected (0.00 sec)

mysql>show databases;

+--------------------+

|Database           |

+--------------------+

|information_schema |

|mysql              |

|performance_schema |

|test               |

|wpdb               |

+--------------------+

5rows in set (0.00 sec)

授权wpdb库允许用户wpuser通过10.0.10.x网段连接进来,并对其库进行修改

mysql>grant all on wpdb.* to 'wpuser'@'10.0.10.%' identified by '123456';

QueryOK, 0 rows affected (0.00 sec)

mysql>flush privileges;

QueryOK, 0 rows affected (0.00 sec)

验证:使用其用户登录并创建目录测试

首先不指定ip进行登录测试:

[root@test3~]# mysql -uwpuser  -p123456

ERROR1045 (28000): Access denied for user 'wpuser'@'localhost' (using password: YES)

[root@test3~]# mysql -uwpuser  -h127.0.0.1 -p123456

ERROR1045 (28000): Access denied for user 'wpuser'@'localhost' (using password: YES)

[root@test3~]# mysql -uwpuser  -hlocalhost -p123456

ERROR1045 (28000): Access denied for user 'wpuser'@'localhost' (using password: YES)

指定ip登录

[root@test3~]# mysql -uwpuser  -h10.0.10.62 -p123456

Welcometo the MySQL monitor.  Commands end with; or \g.

YourMySQL connection id is 18

Serverversion: 5.5.33-log MySQL Community Server (GPL)

Copyright(c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracleis a registered trademark of Oracle Corporation and/or its

affiliates.Other names may be trademarks of their respective

owners.

Type'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

更改用户密码

(1)进入数据修改密码,格式如下:

setpassword for username@host=PASSWD('新密码');

将之前创建的用户wpuser的密码更改为654321

mysql>set password for 'wpuser'@'10.0.10.%'=PASSWORD('654321');

QueryOK, 0 rows affected (0.00 sec)

不用刷新权限,退出数据库并重新登录:

[root@test3~]# mysql -uwpuser  -h10.0.10.62 -p654321

(2)使用mysqladmin命令来修改密码,格式如下:

mysqladminpassword -u username password '新密码' -p'老密码'

更改root密码为12345678

[root@test3~]# mysqladmin -uroot -p password '12345678'

Enterpassword:输入老密码

登录测试

[root@test3~]# mysql -p12345678

删除用户

可以使用delete或drop命令将用户删除

mysql>drop user wpuser@'10.0.10.%';

QueryOK, 0 rows affected (0.00 sec)

查看用户

mysql>select user,host from user;

+------+-----------+

|user | host      |

+------+-----------+

|root | 127.0.0.1 |

|root | ::1       |

|      | localhost |

|root | localhost |

+------+-----------+

4rows in set (0.00 sec)

刷新权限

mysql>flush privileges;

QueryOK, 0 rows affected (0.00 sec)

删除匿名用户

将不需要的用户或空用户直接清除

mysql>drop user root@'::1';

QueryOK, 0 rows affected (0.00 sec)

mysql>drop user ''@'localhost';

QueryOK, 0 rows affected (0.00 sec)

mysql>select user,host from user;

+------+-----------+

|user | host      |

+------+-----------+

|root | 127.0.0.1 |

|root | localhost |

+------+-----------+

2rows in set (0.00 sec)

mysql>flush privileges;

QueryOK, 0 rows affected (0.00 sec)

总结:

以上实验用到了通配符:

% :表示任意

_ :匹配单个字符

更换语句结束符

格式如下:

delimiter(\d) Set statement delimiter.

mysql>\d //   #以双斜线结尾

\u进入库(设置当前默认数据库)

mysql>\u mysql

Databasechanged

mysql>select database();

+------------+

|database() |

+------------+

| mysql      |

+------------+

1row in set (0.00 sec)

\G将每行数据纵向显示

mysql>select user,host from user;

+------+-----------+

|user | host      |

+------+-----------+

|root | 127.0.0.1 |

|root | localhost |

+------+-----------+

2rows in set (0.00 sec)

末尾加参数\G为纵向显示:

mysql>select * from user \G;

mysql>select user,host from user \G;

***************************1. row ***************************

user:root

host:127.0.0.1

***************************2. row ***************************

user:root

host:localhost

2rows in set (0.00 sec)

执行系统命令而不退出当前mysql程序

当我们在数据库中又不想退出还想执行系统命令的时候,可以使用system或 \!来实现

mysql>system ls /root

anaconda-ks.cfg  index.html  index.html.1 install.log     install.log.syslog

mysql> \! ls /root

anaconda-ks.cfg  index.html  index.html.1  install.log    install.log.syslog

批处理模式

如果不想一条条的执行mysql语句,可将sql语句写到文件中,并批量执行:

(1)在系统命令行导入

创建一个sql脚本文件:

[root@test3~]# cat test.sql

createdatabase wpdb;

createuser 'wpuser'@'127.0.0.1' IDENTIFIED BY '123456';

createuser 'wpuser'@'localhost' IDENTIFIED BY '123456';

createuser 'wpuser'@'10.0.10.%' IDENTIFIED BY '123456';

grantall on wpdb.* to 'wpuser'@'10.0.10.%';

grantall on wpdb.* to 'wpuser'@'localhost';

grantall on wpdb.* to 'wpuser'@'127.0.0.1';

让mysql执行脚本

首先一定要有权限执行脚本的用户:

mysql-uroot -p'123456'

[root@test3~]# mysql -uroot -p123456 < test.sql

mysql>select user,host from mysql.user;

+--------+-----------+

|user   | host      |

+--------+-----------+

|wpuser | 10.0.10.% |

|wpuser | 127.0.0.1 |

|root   | localhost |

|wpuser | localhost |

|root   | test3     |

+--------+-----------+

6rows in set (0.00 sec)

#localhost跟127.0.0.1 对于用户来讲不是一码事,它是两个用户

(2)在数据库中使用source命令导入

mysql>use mysql;

Databasechanged

mysql>source /root/test.sql

使Mysql免密码登陆

配置文件:

一般my.cnf配置文件存放路径有优先级之分,mysql会依次查找以下配置文件路径:

/etc/my.cnf

/etc/mysql/my.cnf

$MYSQL_BASE/my.cnf

启动mysql的时候会找默认路径,如果有其他需求可以在启动mysql的时候指定配置文件

在配置文件指定密码,实现无密码登陆

(1)进入用户家目录

[root@test3 ~]# pwd

/root

(2)建立隐藏的.my.cnf,加入以下内容

[root@test3 ~]# cat .my.cnf

[client]           #只指定client参数

user=root          #登陆的用于

host=localhost     #登陆的主机

password=123456    #用户登陆密码

(3)授权600,只限当前用户可以访问

[root@test3~]# chmod 600 .my.cnf

(4)直接登陆mysql 不指定用户和密码,如下所示

[root@test3~]# mysql

Welcometo the MySQL monitor.  Commands end with; or \g.

YourMySQL connection id is 7

Serverversion: 5.5.33-log MySQL Community Server (GPL)

Copyright(c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracleis a registered trademark of Oracle Corporation and/or its

affiliates.Other names may be trademarks of their respective

owners.

Type'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

RDBMS基础概念

RDBMS主要分为以下几个重要模块:

·表

·视图

·索引

·用户

·事物

·存储过程

·存储函数

·触发器

·事件调度器

创建表:由表(row)和列(column)组成,必须至少定义一个列才称之为表

字段属性:字段名(不区分大小写),数据类型,修饰符等

约束:用来限定一个字段中所能够存放数据的范围的值

主键:唯一标示这行在表中的位置,能够唯一标示这一行,意味着不能出现重复值(1不能为空,2不能重复)

唯一键(uniq key) : 用来限定一个或多个字段自合起来的值不能完全相同,但跟主键不同的是,可以为空,但如果不空必须唯一,一个表只能有一个主键,但唯一键盘可以有N个

外键(foreignkey): 引用性约束,当引用一个值必须确保有对应的值

检查性约束:定义约束,比如:0

需要注意:

1.将主键建立在经常查找条件的字段上

2.主键不应该出现重复值

SQL的常用数据类型

字符型:明确说明定义最多存几个字符,如果不用则留空;一般字符型格式为CHAR(数字);

可变长字符类型:VARCHAR(数字)

char无论是检索还是存储都会使性能好的多,因此变化不多则使用char,如果变化量非常大则使用varchar,无论是char或varchar不区分大小写

binary(n)

varbinary(n)

TEXT(n)

BLOB(n)

数值型

精确数值型:整型(int)一般表示2个字节或4个字节

TINYINT:1byte -128至127 0,255

SMALLINIT:2bytes, -32768至32767;0至65535;

MEDIUMINT:3bytes

近似数值型:浮点型()

日期时间型:包括DATE、TIME、DATETIME、YEAR(2),YEAR(4)

布尔型

内置型

CRUD:

CRUD是指在做计算处理时的增加(Create)、查询(Retrieve)(重新得到数据)、更新(Update)和删除(Delete)几个单词的首字母简写。主要被用在描述软件系统中数据库或者持久层的基本操作功能

sql语言:

DDL:数据定义语言:主要定义数据对象,其包括命令create drop alter 等;

DML:数据操作语言:主要操作数据,比如增删改(insert delete update);

DQL:数据查询语言:  其包括命令select;

DCL:数据控制语言:比如赋予权限或收回权限,其包括命令GRANT,REVOKE;

sql常用语句(以DML为主):

创建表

以上为例,创建表,格式如下:

createtable tb_name(col1 defination, clo2 defination,....);

定义键:

createtable tb_name(col1 defination, clo2 defination,....);

例1:

如果想以Name段当主键来使用,则:

Name,   id, Age,  Class

jerry   1二班

tom     2二班

blair   3二班

进入库

mysql>use wpdb;

Databasechanged

创建表

#创建表名为students,声明第一个字段Name数据类型为char 最多30,不许为空;

#创建第二个和第三个字段id、age 数据类型都为TINYINT;

#创建第四个字段class,数据类型为var char 不许为空

mysql>CREATE TABLE students (Name CHAR(30) NOT NULL, id TINYINT UNSIGNED, Age TINYINTUNSIGNED, Class VARCHAR(20) NOT NULL,PRIMARYKEY(Name));

QueryOK, 0 rows affected (0.30 sec)

其中,PRIMARY表示为定义主键

查看表有多少个字段

mysql>desc students;

+-------+---------------------+------+-----+---------+-------+

|Field | Type                | Null | Key| Default | Extra |

+-------+---------------------+------+-----+---------+-------+

|Name  | char(30)            | NO   | PRI | NULL    |      |

|id    | tinyint(3) unsigned | YES  |     |NULL    |       |

|Age   | tinyint(3) unsigned | YES  |     |NULL    |       |

|Class | varchar(20)         | NO   |    | NULL    |       |

+-------+---------------------+------+-----+---------+-------+

4rows in set (0.00 sec)

查看指定表的主键:

如下所示,可以看到,其主键是定义在字段Name上

mysql>show indexes from students;

+----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

|Table    | Non_unique | Key_name |Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null| Index_type | Comment | Index_comment |

+----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

|students |          0 | PRIMARY  |            1 | Name        | A         |           0 |     NULL | NULL   |     | BTREE      |         |               |

+----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

1row in set (0.00 sec)

例2:

新建如下表(包括结构和内容):

ID    Name          Age     Gender    Course

1     Ling Huchong  24     Male       Hamogong

2     Huang Rong    19     Female     Chilian Shenzhang

3     Lu Wushaung   18     Female     Jiuyang Shenggong

4     Zhu Ziliu     52     Male       Pixie Jianfa

5     Chen Jialuo   22     Male       Xianglong Shiba Zhang

#要求字段ID作为主键,而且ID可以自动增长,假设ID号不能相同,自动增长不能为空,用户名不能相同,年龄不能为空,性别不能为空但是又默认值

创建表

mysql>CREATE TABLE tb1 (ID TINYINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, NameCHAR(30) NOT NULL UNIQUE KEY, Age TINYINT UNSIGNED, Gender CHAR(1) DEFAULT 'M',Course VARCHAR(50) NOT NULL);

QueryOK, 0 rows affected (0.00 sec)

查看表字段

mysql>desc tb1;

+--------+---------------------+------+-----+---------+----------------+

|Field  | Type                | Null | Key | Default |Extra          |

+--------+---------------------+------+-----+---------+----------------+

|ID     | tinyint(3) unsigned | NO   | PRI| NULL    | auto_increment |

|Name   | char(30)            | NO   | UNI | NULL    |                |

|Age    | tinyint(3) unsigned | YES  |     |NULL    |                |

|Gender | char(1)             | YES  |     |M       |                |

|Course | varchar(50)         | NO   |    | NULL    |                |

+--------+---------------------+------+-----+---------+----------------+

5rows in set (0.03 sec)

查看主键

mysql>show indexes from  tb1;

+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

|Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation |Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |

+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

|tb1   |          0 | PRIMARY  |           1 | ID          | A         |           0 |     NULL | NULL   |     |BTREE|        |               |

|tb1   |          0 | Name     |            1 | Name        | A         |           0 |     NULL | NULL   |     |BTREE|        |               |

+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

2rows in set (0.00 sec)

BTREE:为平衡主键

删除表

如果想删除某个表,则可以使用以下命令进行删除,前提是无法恢复(在没做备份的情况下)

droptable table_name;

插入数据

在students表中插入某条数据

#首先查看其表结构

mysql>desc students;

+-------+---------------------+------+-----+---------+-------+

|Field | Type                | Null | Key| Default | Extra |

+-------+---------------------+------+-----+---------+-------+

|Name  | char(30)            | NO   | PRI | NULL    |      |

|id    | tinyint(3) unsigned | YES  |     |NULL    |       |

|Age   | tinyint(3) unsigned | YES  |     |NULL    |       |

|Class | varchar(20)         | NO   |    | NULL    |       |

+-------+---------------------+------+-----+---------+-------+

4rows in set (0.00 sec)

了解其结构,于是插入数据:

姓名为tom,其ID号为1,年龄20岁,1班的学员

mysql>insert into students (Name,id,Age,Class) values ('tom','1','20','1 class');

查看表

mysql>select * from students;

+------+------+------+---------+

|Name | id   | Age  | Class  |

+------+------+------+---------+

|tom  |   1 |   20 | 1 class |

+------+------+------+---------+

1row in set (0.00 sec)

使用默认插入数据

字符串要使用引号,数字一定不能是引号

mysql>insert into students values ('jerry','2','21','2 class');

QueryOK, 1 row affected (0.00 sec)

mysql>select * from students;

+-------+------+------+---------+

|Name  | id   | Age | Class   |

+-------+------+------+---------+

|jerry |    2 |   21 | 2 class |

|tom   |   1 |   20 | 1 class |

+-------+------+------+---------+

2rows in set (0.00 sec)

一次性插入多行:

mysql>insert into students (Name,Class) values('test2','1class'),('test3','5 class');行与行之间要用逗号隔开

QueryOK, 2 rows affected (0.00 sec)

Records:2  Duplicates: 0  Warnings: 0

mysql>select * from students;

+--------------+------+------+--------------+

|Name         | id   | Age | Class        |

+--------------+------+------+--------------+

|jerry        |    2 |  21 | 2 class      |

|test15 class | NULL | NULL | test21 class |

|test2        | NULL | NULL | 1 class      |

|test3        | NULL | NULL | 5 class      |

|tom          |    1 |  20 | 1 class      |

+--------------+------+------+--------------+

5rows in set (0.00 sec)

查询表

格式:

select字段 from 表名;

字段表示方法,如有多个则用逗号隔开

字段的别名:

col1as newname,col2 as ....

显示表中所有字段

mysql>select*from students;

+--------------+------+------+--------------+

|Name         | id   | Age | Class        |

+--------------+------+------+--------------+

| jerry        |   2 |   21 | 2 class      |

|test15 class | NULL | NULL | test21 class |

|test2        | NULL | NULL | 1 class      |

|test3        | NULL | NULL | 5 class      |

|tom          |    1 |  20 | 1 class      |

+--------------+------+------+--------------+

5rows in set (0.00 sec)

只显示指定的字段,字段之间使用逗号隔开

mysql>selectname,classfrom students;

+--------------+--------------+

|name         | class        |

+--------------+--------------+

|jerry        | 2 class      |

|test15 class | test21 class |

|test2        | 1 class      |

|test3        | 5 class      |

|tom          | 1 class      |

+--------------+--------------+

5rows in set (0.00 sec)

使用别名:

将name字段替换为student name,如下所示

mysql>select name as 'student name' ,class from students;

+--------------+--------------+

|studentname| class        |

+--------------+--------------+

|jerry        | 2 class      |

|test15 class | test21 class |

|test2        | 1 class      |

|test3        | 5 class      |

|tom          | 1 class      |

+--------------+--------------+

5rows in set (0.00 sec)

查询条件 where

比较运算:

>           #大于

<            #小于

>=           #大于或等于

<=           #小于或大于

==            #等于

!=            #不等于

isnull       #显示为空

isnot null   #显示不为空

显示Age为空的名单

mysql>select name from students where Age IS NULL;

+--------------+

|name         |

+--------------+

|test15 class |

|test2        |

|test3        |

+--------------+

3rows in set (0.00 sec)

显示不为空

mysql>select name from students where Age IS NOT NULL;

+-------+

|name  |

+-------+

|jerry |

|tom   |

+-------+

2rows in set (0.00 sec)

显示大于20岁

mysql>select name from students where Age>20;

+-------+

|name  |

+-------+

|jerry |

+-------+

1row in set (0.00 sec)

通配符 LIKE

%任意长度的任意字符

_任意单个字符

mysql>select * from students where name like 'T%';

+--------------+------+------+--------------+

|Name         | id   | Age | Class        |

+--------------+------+------+--------------+

|test15 class | NULL | NULL | test21 class |

|test2        | NULL | NULL | 1 class      |

|test3        | NULL | NULL | 5 class      |

|tom          |    1 |  20 | 1 class      |

+--------------+------+------+--------------+

IN列表 判断值属于某一个,则打印信息

显示2班和5班的信息:

mysql>select name,class from students where class IN ('5 class','2 class');

+-------+---------+

|name  | class   |

+-------+---------+

|jerry | 2 class |

|test3 | 5 class |

+-------+---------+

使用RLIKE正则表达式书写模式

显示以大写字母T或者大写字母J开头的信息

mysql>select * from students where name rlike '^[tj]';

+--------------+------+------+--------------+

|Name         | id   | Age | Class        |

+--------------+------+------+--------------+

|jerry        |    2 |  21 | 2 class      |

|test15 class | NULL | NULL | test21 class |

|test2        | NULL | NULL | 1 class      |

|test3        | NULL | NULL | 5 class      |

|tom          |    1 |  20 | 1 class      |

+--------------+------+------+--------------+

5rows in set (0.00 sec)

名字中包含字母o的信息(类似于grep)

mysql>select * from students where name RLIKE 'o';

+------+------+------+---------+

|Name | id   | Age  | Class  |

+------+------+------+---------+

|tom  |   1 |   20 | 1 class |

+------+------+------+---------+

1row in set (0.00 sec)

更新数据 update

格式:

update表名 set 字段名=某个值 where ;

将name字段test15 class 改为test110,如下所示

如果不加where指定条件的话,那么则改变所有字段信息,慎用

mysql>select name from students;

+--------------+

|name         |

+--------------+

|jerry        |

|test15 class |

|test2        |

|test3        |

|tom          |

+--------------+

5rows in set (0.00 sec)

mysql>update students set name='test110' where name='test15 class';

QueryOK, 1 row affected (0.00 sec)

Rowsmatched: 1  Changed: 1  Warnings: 0

mysql>select name from students;

+---------+

|name    |

+---------+

|jerry   |

|test110 |

|test2   |

|test3   |

|tom     |

+---------+

5rows in set (0.00 sec)

清空表

格式:

deletefrom表名

只删除年龄为空的用户:

mysql>delete from students where Age IS NULL;

QueryOK, 3 rows affected (0.00 sec)

mysql>select name from students;

+-------+

|name  |

+-------+

|jerry |

|tom   |

+-------+

2rows in set (0.00 sec)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值