mysql gongj_MySQL数据库管理之平常操做

Mysql基础及平常操做html

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

Mysql的处理方式mysql

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

Mysql线程池特色:web

1.限定了并发线程数正则表达式

2.维持必定空闲线程个数sql

锁:控制并发访问,一个用户在执行操做的过程,其余人不能进行操做。数据库

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

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

日志文件:

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

2.大小是固定的

将大事物分割成不少小事物会提高很大的性能

mysql组成部分:

a052610441f862ed29025f1e351ca71f.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)进入官网下载通用二进制格式包:

b14be8acd68dc1d5d70181796684782d.png

(2)选择GPL

fc04f1c18bb48c8cdc11d6e87d839250.png

(3)选择下载

afbf85bf095218bb4a69bcd3d4a58014.png

(4)选择要下载的版本

1f584ca8dd61cc1052e92fa6649b9d31.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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
有如下三个集合,分别保存了参加长跑、足球、游泳的名单,通过集合运算,找出参加了三项运动的名单放入rsf集合中并输出。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ run = {'Lining', 'JiFZ', 'Lifei', 'Caikuiyuan', 'ChenXiang', 'YCX', 'XiaoF', 'XuGX', 'YuanMT', 'GongJ', 'Liding',\‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ 'WenX', 'YangXY', 'MaBC', 'ZhangGZ', 'Yangqing'}‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ football = {'XYZ', 'YCX', 'XiaoF', 'XuGX', 'YuanMT', 'GongJ', 'ChenXiang', 'WangWZ', 'MaBC', 'ZhangGZ'}‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ swimming = {'YCX', 'RongWC', 'MaBC', 'Liding', 'YangXY', 'JiFZ', 'Lifei', 'Caikuiyuan', 'XuGX'}
05-30

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值