数据库(database)是按照数据结构组织、存储和管理数据的仓库,存放数据的仓库
数据库主要分为关系型数据库和非关系型数据库,关系型数据库又称为SQL数据库,非关系型数据库又称为NoSQL数据库或Not only SQL数据库
区分是否为关系数据库还是非关系数据库其实只需要查看是否可以使用SQL语句,关系型数据库可以使用SQL语句,而非关系型数据库无法使用
关系型数据库
数据拥有固定的存储结构,通过库——表——数据的方式存储,存储时会有表的结构化关系,主要代表有Mysql、mariadb、oracle、SQL Server
关系型数据库存储数据的过程:解析SQL语句——连接层——磁盘存取——结构化成表
容易理解,二维表关系型数据库的优势:
(即XY轴心表)
的结构非常容易理解使用方便,通用的SQL语句使得 *** 作关系型数据变得非常方便 (关系型数据库都可以使用SQL语句)
易于维护,数据库的ACID属性 (原子性、一致性、隔离性、持久性)
,大大降低了数据冗余和数据不一致的概率
海量数据的读写效率低,对于每秒上万次请求的高并发网站来说,传统关系型数据库的硬盘I/O是一个很大的挑战没有高扩展性和可用性,在基于web的结构中,数据库是最难横向扩展的,当一个应用系统的用户量和访问量日益增加时,数据库没有办法像一些web服务一样简单的通过添加更多硬件和服务节点来扩展性能和负载能力关系型数据库的缺点:
关系型数据库最大的优点就是因为事务的一致性,这个特性,使得关系型数据库可以适用于一切要求一致性比较高的系统中,例如银行系统。但是在大部分网页应用中,对于这种一致性不是那么严格,允许数据一致有一定时间的间隔,所以关系型数据库这个特点就不是那么重要了,相反,关系型数据为了维护一致性所付出的代价就是读写性能比较差,而像微博、脸书这类应用,对于并发读写能力有很高的要求,很显然在这种应用上使用关系型数据库是弊大于利的,所以必须创造一种新的数据结构存储来替代这种传统的关系型数据库,所以就应运而生出了非关系数据库
非关系数据库
非关系数据库的产生,就是为了加快客户端的访问速度才出现的。
非关系数据库是通过key:value的形式存储的,即键值对,例如name=rzy 键为name,值为rzy
NoSQL主要是指那些非关系型的、分布式的,主要代表Redis、MongoDB
所有的非关系型数据库都是尽可能的将数据放到内存当中,而关系型数据都是放在硬盘,内存的读写肯定是比硬盘快的这也非关系数据库比关系型数据库读写能力强的一个原因
NoSQL的存储理念是以键值来存储,且结构不稳定,每一个元组都可以有不一样的字段,这种就不会局限于固定的结构,可以减少一些时间和空间的开销。使用这种方式,为了获取用户指定的不同信息,非关系型数据库不会像关系型数据库那样,进行多表查询,而实仅仅需要根据key来取出相应的value值即可,避免了关系型数据复杂的查询关系,可以增快查询的效率,这也意味着NoSQL中的键名是不能重复的,具有唯一性
二、Mysql概述 (1)Mysql概述
MySQL是一个关系型数据库,由瑞典MySQL AB公司开发,目前已经被Oracle收购。
Mysql是一个真正的多用户、多线程的SQL数据库。其使用的SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言,每个关系型数据库都可以使用。
MySQL是以客户机/服务器结构实现的,也就是俗称的C/S结构,它由一个服务器守护程序mysqld和很多不同的客户程序和库组成。
用户输入SQL语句,MySQL处理然后进行存储的过程
连接器Connectors:即用户通过什么方式去访问数据库,数据库一般都会保留一些接口,使得一些语言可以调用数据库的命令,如Python、PHP等
连接池: 最上层负责和客户端进行连接,比如jdbc,odbj这样的数据库连接的API(应用程序接口),在这一层有连接池的概念,类似于线程池,连接池可以同时处理很多个数据库请求。同时这一层有SSL的安全概念,可以确保连接是安全的
SQL接口: 当SQL语句进入MySQL后,会先到SQL接口中,这一层是封装层,将传过来的SQL语句拆散,将底层的结果封装成SQL的数据格式,就是把SQL语句拆散,然后重组成mysql系统认识的语言
解析器: 这一层负责将SQL语句进行拆分,验证,如果语句有问题那么就返回错误,如果没问题就继续向下执行,即写错SQL语句后会报错
优化器: 对SQL查询的结果优化处理,产生多种执行计划,最终数据库会选择最优化的方案去执行,尽快返会结果。
缓存: 当用户查询数据库的数据时,缓存会对要查询的SQL语句进行hash后缓存,如果下一次是相同的查询语句,则在SQL接口之后直接返回结果,就像Nginx缓存一样,查询过一次后会进行缓存,下次用户再次查询相同数据就会直接返回,加快查询效率
存储引擎: MySQL有很多种存储引擎,每一种存储引擎有不同的特性,他们负责组织文件的存放形式,位置,访问文件的方法等等。比较常用的有innoDB,MyISAM,MEMORY等,默认的是innoDB存储引擎,存储引擎可以进行修改,但是不推荐,因为每个存储引擎都不一样,可能会导致某些字符不识别等问题
文件系统: 真正存放物理文件的单位,即硬盘
(3)使用cmake编译mysql参数说明编译多次时,需要删除CMAKE的缓存,rm -rf /usr/src/mysql-5.7.12/CMakeCache.txt
命令 | 作用 |
---|---|
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql | 指定MySQL安装的根目录 |
-DMYSQL_DATADIR=/mydata/mysql/data | 指定MySQL数据库文件存放目录 |
-DDEFAULT_CHARSET=utf8 | 设置默认字符集为utf8 |
-DDEFAULT_COLLATION=utf8_general_ci | 设置默认字符校对 |
-DMYSQL_TCP_PORT=3306 | 设置MySQL的监听端口 |
-DMYSQL_USER=mysql | 设置MySQL用户名 |
-DWITH_MYISAM_STORAGE_ENGINE=1 | 安装MySQL的myisam数据库引擎 |
-DWITH_INNOBASE_STORAGE_ENGINE=1 | 安装MySQL的innodb数据库引擎 |
-DWITH_ARCHIVE_STORAGE_ENGINE=1 | 安装MySQL的archive数据库引擎 |
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 | 安装MySQL的blackhole数据库引擎 |
-DWITH_MEMORY_STORAGE_ENGINE=1 | 安装MySQL的memory数据库引擎 |
-DENABLE_DOWNLOADS=1 | 编译时允许自主下载相关文件 |
-DDOWNLOAD_BOOST=1 | 允许下载BOOST |
-DWITH_BOOST=/usr/local/boost | 指定系统中存在的BOOST |
-DSYSCONFDIR=/etc | MySQL配置文件所在目录 |
-DWITH_READLINE=1 | MySQL的readline library |
-DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock | MySQL的通讯目录 |
-DENABLED_LOCAL_INFILE=1 | 启用加载本地数据 |
-DWITH_PARTITION_STORAGE_ENGINE=1 | 启动mysql的分区存储结构 |
-DEXTRA_CHARSETS=all | 使MySQL支持所有的扩展字符 |
-DWITH_DEBUG=0 | 禁用调试模式 |
-DMYSQL_MAINTAINER_MODE=0 | 禁用维护模式 |
-DWITH_SSL:STRING=bundled | 通讯时支持ssl协议 |
-DWITH_ZLIB:STRING=bundled | 允许使用zlib library |
在mysql安装完成之后,进入mysql会发现有四个库,这四个库是默认就有的,下面是这四个库的解释:
information_schema: 这是一个信息数据库,它保存着关于Mysql服务器所维护的所有其他数据库的信息,例如数据库名称、数据库的表、表栏的数据类型和访问权限等mysql: 这个主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息performance_schema: 这个主要用于收集数据库服务器性能参数,并且库里的表的存储引擎均为performance_schema,而用户是不能创建存储引擎为performance_schema的表的sys: 这个库的所有数据源来自performance_schema,目标是把performance_schema的复杂度降低,让DBA(数据库管理员)能够更好的阅读这个库中的内容,让DBA更快的了解DB(数据库)的运行情况 三、安装Mysql (1)实验环境系统 | 主机名 | ip地址 | 使用的源码包 | 硬件 |
---|---|---|---|---|
Centos7.4 | rzy | 192.168.100.202 | mysql-5.7.12.tar.gz,boost_1_59_0.tar.gz | 4G内存,双核心 |
首先先配置虚拟机硬件
******(1)先做基础配置
[root@Centos7 ~]# hostnamectl set-hostname rzy
[root@Centos7 ~]# su
[root@rzy ~]# systemctl stop firewalld
[root@rzy ~]# setenforce 0
setenforce: SELinux is disabled
[root@rzy ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
mount: /dev/sr0 已经挂载或 /mnt 忙
/dev/sr0 已经挂载到 /mnt 上
******(2)上传两个源码包
[root@rzy ~]# yum -y remove mysql-* boost-* #先删除系统内Mysql和Boost
。。。。。。
完毕!
[root@rzy ~]# yum -y install gcc gcc-c++ ncurses bison libgcrypt perl cmake ncurses-devel #安装依赖包
。。。。。。
完毕!
[root@rzy ~]# rz
z waiting to receive.**B0100000023be50
[root@rzy ~]# ll
总用量 118132
-rw-------. 1 root root 1264 1月 12 18:27 anaconda-ks.cfg
-rw-r--r-- 1 root root 70389425 5月 11 14:35 boost_1_59_0.tar.bz2
-rw-r--r-- 1 root root 50571897 5月 11 14:30 mysql-5.7.12.tar.gz
******(3)先安装boost再安装mysql
[root@rzy ~]# tar xf boost_1_59_0.tar.bz2
[root@rzy ~]# mv boost_1_59_0 /usr/local/boost
[root@rzy ~]# groupadd mysql #创建mysql组
[root@rzy ~]# useradd -r -g mysql mysql #创建用户mysql并且指定组
[root@rzy ~]# tar xf mysql-5.7.12.tar.gz -C /usr/src
[root@rzy ~]# cd /usr/src/mysql-5.7.12
[root@rzy mysql-5.7.12]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #使用cmake进行编译
> -DMYSQL_DATADIR=/usr/local/mysql/data \
> -DDEFAULT_CHARSET=utf8 \
> -DDEFAULT_COLLATION=utf8_general_ci \
> -DMYSQL_TCP_PORT=3306 \
> -DMYSQL_USER=mysql \
> -DWITH_MYISAM_STORAGE_ENGINE=1 \
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \
> -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
> -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
> -DWITH_MEMORY_STORAGE_ENGINE=1 \
> -DENABLE_DOWNLOADS=1 \
> -DDOWNLOAD_BOOST=1 \
> -DWITH_BOOST=/usr/local/boost \
> -DSYSCONFDIR=/etc
#等待编译完成
[root@rzy mysql-5.7.12]# make -j `cat /proc/cpuinfo | grep processor| wc -l` #根据系统内核来进行编译,后面的命令就是查看有几个系统内核
[root@rzy mysql-5.7.12]# make install
[root@rzy mysql-5.7.12]# ls /usr/local/mysql #检查是否安装成功
bin COPYING docs include lib man mysql-test README share support-files
******(4)优化mysql程序
[root@rzy mysql-5.7.12]# chown -R mysql:mysql /usr/local/mysql #修改mysql目录下的属组和属主
[root@rzy mysql-5.7.12]# cp /usr/src/mysql-5.7.12/support-files/my-default.cnf /etc/my.cnf
cp:是否覆盖"/etc/my.cnf"? y
[root@rzy mysql-5.7.12]# cp /usr/src/mysql-5.7.12/support-files/mysql.server /etc/init.d/
[root@rzy mysql-5.7.12]# chmod +x /etc/init.d/mysql.server #增加可执行权限
[root@rzy mysql-5.7.12]# vim /usr/lib/systemd/system/mysql.service #编写mysql的控制脚本
[Unit]
Description=mysqldapi
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/mysql/logs/mysqld.pid
ExecStart=/etc/init.d/mysql.server start
ExecReload=/etc/init.d/mysql.server restart
ExecStop=/etc/init.d/mysql.server stop
PrivateTmp=Flase
[Install]
WantedBy=multi-user.target
#保存退出
————————————————————————————————————————————————————————————————
注意!!!!:
PrivateTmp=Flase #此配置必须关闭,不然mysql连接文件mysql.sock文件会默认生成在以下位置/tmp/systemd-private-83bba738e8ff4837b5ae657eff983821-mysqld.service-BPxWpJ/tmp/mysql.sock,导致数据库无法连接,将此配置项关闭后,则文件正常生成在/tmp/mysql.sock
————————————————————————————————————————————————————————————————
[root@rzy mysql-5.7.12]# echo "export PATH=$PATH:/usr/local/mysql/bin/" >>/etc/profile
#配置全局变量优化mysql命令执行路径
[root@rzy mysql-5.7.12]# source /etc/profile #运行脚本使配置生效
[root@rzy mysql-5.7.12]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data #初始化数据库
————————————————————————————————————————————————————————————————————————
注解:
--initialize-insecure #禁用mysql的密码策略(密码复杂性等)
--initializeaize #开启密码策略,自动生成密码在mysqld.log文件中
--user=mysql #运行的账户
--basedir=/usr/local/mysql #mysql的安装位置
--datadir=/usr/local/mysql/data #mysql数据库服务数据的物理存放路径
————————————————————————————————————————————————————————————————————————
。。。。。。
[root@rzy mysql-5.7.12]# > /etc/my.cnf
[root@rzy mysql-5.7.12]# vim /etc/my.cnf #编写mysql配置文件
[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
character_set_server=utf8
init_connect='SET NAMES utf8'
log-error=/usr/local/mysql/logs/mysqld.log
pid-file=/usr/local/mysql/logs/mysqld.pid
skip-name-resolve
————————————————————————————————————————————————————————————————————————
注解:
[mysqld] #声明区域
basedir = /usr/local/mysql #mysql的安装位置
datadir = /usr/local/mysql/data #mysql的物理文件存放位置
port = 3306 #mysql服务监听的端口
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #mysql的模式
character_set_server=utf8 #字符集
init_connect='SET NAMES utf8'
log-error=/usr/local/mysql/logs/mysqld.log #指定日志文件位置
pid-file=/usr/local/mysql/logs/mysqld.pid #指定运行服务所产生的pid文件位置
skip-name-resolve #跳过mysql的域名反向解析,和tomcat屏蔽域名查询一个道理
————————————————————————————————————————————————————————————————————————
[root@rzy mysql-5.7.12]# mkdir /usr/local/mysql/logs #创建日志存放目录
[root@rzy mysql-5.7.12]# chown mysql:mysql /usr/local/mysql/logs/ #修改属主和属组
[root@rzy mysql-5.7.12]# systemctl start mysqld #开启mysql
[root@rzy mysql-5.7.12]# systemctl enable mysqld #配置为开机自启
Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.
[root@rzy mysql-5.7.12]# netstat -anpt | grep mysql #检查端口
tcp6 0 0 :::3306 :::* LISTEN 18642/mysqld
******(5)进入mysql,给root设置密码
[root@rzy mysql-5.7.12]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.12 Source distribution
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is 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> exit
Bye
[root@rzy mysql-5.7.12]# mysqladmin -u root -p password 123123
Enter password:
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
[root@rzy mysql-5.7.12]# mysql -u root -p123123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.12 Source distribution
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is 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> exit
Bye
做完后,推荐保存虚拟机快照
四、SQL语句概述 (1)什么是SQLSQL全称:Structured Query Language,即结构化查询语言
所有的关系型数据库都可以使用SQL语句,SQL是执行在客户端 (windows在命令行下执行,Linux在终端执行)
下或者通过Java代码执行在JDBC
类型 | 大小(字节) | 范围 | 格式 | 用途 |
---|---|---|---|---|
date | 3 | 1000-01-01到9999-12-31 | YYYY-MM-DD | 日期值 |
time | 3 | -838:59:59到838:59:59 | HIH:MM:SS | 时间值或持续时间 |
year | 1 | 1901到2155 | YYYY | 年份值 |
datetime | 8 | 1000-01-01 00:00:00到9999-12-31 23:59:59 | YYYY-MM-DD HIH:MM:SS | 混合日期和时间值 |
timestamp | 4 | 1970-01-01 00:00:00到2037 年某时 | YYYY-MM-DD HIH:MM:SS | 混合日期和时间值,时间戳 |
类型 | 大小(字节) | 范围 | 格式 | 用途 |
---|---|---|---|---|
float | 4 | (-3.402823466E+38,-1.175494351E-38),0,(1.175 494351E-38 , 3.402823466351E+38) | 0,(1.175494351E-38,3.402 823466E+38) | 单精度浮点数值 |
double | 8 | (-1.7976931348623157E+308,-2.2250738585072014 E-308),0,(2.2250738585072014 E-308,1.797693134 8623157E+308) | 0,(2.2250738585072014 E-308,1.797693134862 3157E+308) | 双精度浮点数值 |
decimal | 对decimal(M,D),如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
类型 | 大小(可自行定义最大字节) | 用途 |
---|---|---|
char | 0-255字节 | 定长字符串 |
varchar | 0-65535字节 | 变长字符串 |
tinyblob | 0-255字节 | 不超过255个字符的二进制字符串 |
tinytext | 0-255字节 | 短文本字符串 |
blob | 0-65535字节 | 二进制形式的长文本数据 |
text | 0-65535字节 | 长文本数据 |
mediumblob | 0-16777215字节 | 二进制形式的中等长度文本数据 |
mediumtext | 0-16777215字节 | 中等长度文本数据 |
longblob | 0-4294967295字节 | 二进制形式的极大文本数据 |
longtext | 0-4294967295字节 | 极大文本数据 |
[root@rzy ~]# mysql -u root -p123123 #进入数据库
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.12 Source distribution
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is 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> show databases; #查看所有数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.13 sec)
-创建库,查看库信息
mysql> create database aaa; #创建数据库aaa
Query OK, 1 row affected (0.00 sec) #ok表示命令执行成功
mysql> show databases; #查看所有数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| aaa |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> create database bbb character set utf8; #创建数据库bbb并且指定字符值为utf8
Query OK, 1 row affected (0.00 sec)
mysql> show create database aaa; #查看数据库的详细信息,其实就是查看创建库时SQL语句的详细信息
+----------+--------------------------------------------------------------+
| Database | Create Database |
+----------+--------------------------------------------------------------+
| aaa | CREATE DATABASE `aaa` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+--------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> use aaa; #选中(进入)aaa库
Database changed #表示选中(进入)成功
-查看表,创建表
mysql> show tables; #查看当前aaa库下的所有表,因为是新创建的库,所以是没有表的
Empty set (0.00 sec)
mysql> create table aaa(id int,name char(10),sex char(10)); #在当前库下创建一个新的表
Query OK, 0 rows affected (0.07 sec)
mysql> show tables; #查看所有表,发现了刚刚新创建的表
+---------------+
| Tables_in_aaa |
+---------------+
| aaa |
+---------------+
1 row in set (0.00 sec)
mysql> show create table aaa; #查看表的详细信息,其实就是创建表时所使用的SQL语句的详细信息
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------+
| aaa | CREATE TABLE `aaa` (
`id` int(11) DEFAULT NULL,
`name` char(10) DEFAULT NULL,
`sex` char(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
mysql> desc aaa; #查看表的项,可以看到创建表时的三个项id、name、sex都显示出来了
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| sex | char(10) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> create table bbb(id int,name char(10),sex char(10)) engine=myisam charset=utf8;
#创建表,指定存储引擎是myisam,使用字符是utf8,要注意的是,mysql创建表的默认存储引擎是innoDB
Query OK, 0 rows affected (0.36 sec)
mysql> show tables;
+---------------+
| Tables_in_aaa |
+---------------+
| aaa |
| bbb |
+---------------+
2 rows in set (0.00 sec)
-表的重命名
mysql> rename table aaa to ccc; #把aaa表重命名为ccc
Query OK, 0 rows affected (0.00 sec)
mysql> show tables; #查看所有表,发现aaa没有了,多了一个ccc
+---------------+
| Tables_in_aaa |
+---------------+
| bbb |
| ccc |
+---------------+
2 rows in set (0.00 sec)
-修改表的属性、格式
mysql> alter table bbb engine=innoDB charset=gbk; #修改bbb表的存储引擎为innoDB,字符为gbk
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show create table bbb;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| bbb | CREATE TABLE `bbb` (
`id` int(11) DEFAULT NULL,
`name` char(10) CHARACTER SET utf8 DEFAULT NULL,
`sex` char(10) CHARACTER SET utf8 DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql>
-添加表的字段(项)
mysql> desc bbb; #先查看bbb表的信息
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| sex | char(10) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> alter table bbb add age int; #在bbb表的最后添加项,age类型是int形式的
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc bbb; #查看bbb表的信息,发现成功添加
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| sex | char(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)
mysql> alter table bbb add aaa char(10) after id; #在bbb表中的id项后面添加aaa项,类型是char
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc bbb; #查看bbb表的信息,发现成功在id后面添加aaa项
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| aaa | char(10) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| sex | char(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
5 rows in set (0.00 sec)
mysql> alter table bbb add bbb char(10) first; #添加bbb项类型为char,添加在bbb表中的第一个
Query OK, 0 rows affected (14.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc bbb; #查看bbb表,发现bbb项成功插入到第一个
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| bbb | char(10) | YES | | NULL | |
| id | int(11) | YES | | NULL | |
| aaa | char(10) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| sex | char(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
6 rows in set (0.00 sec)
-删除表的字段(项)
mysql> desc bbb; #先查看bbb表的信息
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| bbb | char(10) | YES | | NULL | |
| id | int(11) | YES | | NULL | |
| aaa | char(10) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| sex | char(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
6 rows in set (0.00 sec)
mysql> alter table bbb drop bbb; #删除bbb表中的bbb项
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc bbb; #再次查看bbb表,发现成功删除
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| aaa | char(10) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| sex | char(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
5 rows in set (0.00 sec)
-修改表的字段和类型
mysql> desc bbb; #先查看bbb表的信息
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| aaa | char(10) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| sex | char(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
5 rows in set (0.00 sec)
mysql> alter table bbb change aaa abc varchar(10); #修改bbb表中的aaa项为abc类型为varchar
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc bbb; #再次查看bbb表的信息,发现成功修改
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| abc | varchar(10) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| sex | char(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
-修改表的字段类型和顺序
mysql> desc bbb; #先查看bbb表的信息
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| abc | varchar(10) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| sex | char(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
mysql> alter table bbb modify abc char(10) after sex;
#修改bbb表中的abc项的类型为char并且移动项到sex项的后面,这里也可以使用first移动到第一个
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc bbb; #再次查看bbb表,发现成功修改abc的类型并且成功移动到sex的后面
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| sex | char(10) | YES | | NULL | |
| abc | char(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
5 rows in set (0.00 sec)
-删除表和库
mysql> show tables ; #先查看当前库下的所有表
+---------------+
| Tables_in_aaa |
+---------------+
| bbb |
| ccc |
+---------------+
2 rows in set (0.00 sec)
mysql> drop table ccc; #删除ccc表
Query OK, 0 rows affected (0.00 sec)
mysql> show tables; #再次查看所有表发现ccc表没有了
+---------------+
| Tables_in_aaa |
+---------------+
| bbb |
+---------------+
1 row in set (0.00 sec)
mysql> show databases; #查看所有库
+--------------------+
| Database |
+--------------------+
| information_schema |
| aaa |
| bbb |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)
mysql> drop database bbb; #删除bbb库
Query OK, 0 rows affected (0.09 sec)
mysql> show databases; #再次查看所有库,发现bbb库没有了
+--------------------+
| Database |
+--------------------+
| information_schema |
| aaa |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
-给表中插入数据
mysql> show tables; #查看当前库下的所有表
+---------------+
| Tables_in_aaa |
+---------------+
| bbb |
+---------------+
1 row in set (0.00 sec)
mysql> desc bbb; #查看bbb表的信息
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| sex | char(10) | YES | | NULL | |
| abc | char(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
5 rows in set (0.00 sec)
mysql> insert into bbb values(1,"rzy","man","aaa","20");
#插入数据,直接使用values的话,输入的值的顺序必须和项的顺序相同
Query OK, 1 row affected (0.00 sec)
mysql> insert into bbb (id,name) values(2,"zhangsan");
#插入数据,这样插入可以指定想要插入值的项,后面的values输入值要和前面指定项的顺序相同
Query OK, 1 row affected (0.00 sec)
mysql> insert into bbb values(3,"lisi","girl","bbb","18"),(4,"wangwu","man","ccc","22");
#批量插入数据,中间使用,隔开
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> insert into bbb (id,name) values(5,"renliu"),(6,"zhangqi");
#批量插入数据,中间使用,隔开
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from bbb; #查看表是否成功添加,NULL表示为空
+------+----------+------+------+------+
| id | name | sex | abc | age |
+------+----------+------+------+------+
| 1 | rzy | man | aaa | 20 |
| 2 | zhangsan | NULL | NULL | NULL |
| 3 | lisi | girl | bbb | 18 |
| 4 | wangwu | man | ccc | 22 |
| 5 | renliu | NULL | NULL | NULL |
| 6 | zhangqi | NULL | NULL | NULL |
+------+----------+------+------+------+
6 rows in set (0.00 sec)
-查看表中数据
mysql> select * from bbb; #查看表中的所有数据
+------+----------+------+------+------+
| id | name | sex | abc | age |
+------+----------+------+------+------+
| 1 | rzy | man | aaa | 20 |
| 2 | zhangsan | NULL | NULL | NULL |
| 3 | lisi | girl | bbb | 18 |
| 4 | wangwu | man | ccc | 22 |
| 5 | renliu | NULL | NULL | NULL |
| 6 | zhangqi | NULL | NULL | NULL |
+------+----------+------+------+------+
6 rows in set (0.00 sec)
mysql> select abc from bbb; #只查看表中的abc项的数据
+------+
| abc |
+------+
| aaa |
| NULL |
| bbb |
| ccc |
| NULL |
| NULL |
+------+
6 rows in set (0.00 sec)
mysql> select * from bbb where name="rzy"; #只查看表中name为rzy的数据
+------+------+------+------+------+
| id | name | sex | abc | age |
+------+------+------+------+------+
| 1 | rzy | man | aaa | 20 |
+------+------+------+------+------+
1 row in set (0.00 sec)
mysql> select sex from bbb where name="zhangsan"; #只查看表中的sex项,并且只查看name为zhangsan的数据
+------+
| sex |
+------+
| NULL |
+------+
1 row in set (0.00 sec)
-更新(修改)表中的数据
mysql> select * from bbb; #查看bbb表中的所有数据
+------+----------+------+------+------+
| id | name | sex | abc | age |
+------+----------+------+------+------+
| 1 | rzy | man | aaa | 20 |
| 2 | zhangsan | NULL | NULL | NULL |
| 3 | lisi | girl | bbb | 18 |
| 4 | wangwu | man | ccc | 22 |
| 5 | renliu | NULL | NULL | NULL |
| 6 | zhangqi | NULL | NULL | NULL |
+------+----------+------+------+------+
6 rows in set (0.00 sec)
mysql> update bbb set age=100; #修改bbb表中的age项全部为100
Query OK, 6 rows affected (0.01 sec)
Rows matched: 6 Changed: 6 Warnings: 0
mysql> select * from bbb; #再次查看bbb表的所有信息,发现成功修改
+------+----------+------+------+------+
| id | name | sex | abc | age |
+------+----------+------+------+------+
| 1 | rzy | man | aaa | 100 |
| 2 | zhangsan | NULL | NULL | 100 |
| 3 | lisi | girl | bbb | 100 |
| 4 | wangwu | man | ccc | 100 |
| 5 | renliu | NULL | NULL | 100 |
| 6 | zhangqi | NULL | NULL | 100 |
+------+----------+------+------+------+
6 rows in set (0.00 sec)
mysql> update bbb set age=10 where name="rzy"; #修改bbb表中的age项为10并且只限于name为rzy的行
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from bbb; #再次查看bbb表的所有信息,发现成功修改
+------+----------+------+------+------+
| id | name | sex | abc | age |
+------+----------+------+------+------+
| 1 | rzy | man | aaa | 10 |
| 2 | zhangsan | NULL | NULL | 100 |
| 3 | lisi | girl | bbb | 100 |
| 4 | wangwu | man | ccc | 100 |
| 5 | renliu | NULL | NULL | 100 |
| 6 | zhangqi | NULL | NULL | 100 |
+------+----------+------+------+------+
6 rows in set (0.00 sec)
-删除表中的数据
mysql> select * from bbb; #查看表中的所有数据
+------+----------+------+------+------+
| id | name | sex | abc | age |
+------+----------+------+------+------+
| 1 | rzy | man | aaa | 10 |
| 2 | zhangsan | NULL | NULL | 100 |
| 3 | lisi | girl | bbb | 100 |
| 4 | wangwu | man | ccc | 100 |
| 5 | renliu | NULL | NULL | 100 |
| 6 | zhangqi | NULL | NULL | 100 |
+------+----------+------+------+------+
6 rows in set (0.00 sec)
mysql> delete from bbb where id="1"; #删除bbb表中id项为1的行
Query OK, 1 row affected (0.00 sec)
mysql> select * from bbb;
+------+----------+------+------+------+
| id | name | sex | abc | age |
+------+----------+------+------+------+
| 2 | zhangsan | NULL | NULL | 100 |
| 3 | lisi | girl | bbb | 100 |
| 4 | wangwu | man | ccc | 100 |
| 5 | renliu | NULL | NULL | 100 |
| 6 | zhangqi | NULL | NULL | 100 |
+------+----------+------+------+------+
5 rows in set (0.00 sec)
mysql> delete from bbb where abc is NULL; #删除bbb表中abc项为null空的行
Query OK, 3 rows affected (0.00 sec)
mysql> select * from bbb;
+------+--------+------+------+------+
| id | name | sex | abc | age |
+------+--------+------+------+------+
| 3 | lisi | girl | bbb | 100 |
| 4 | wangwu | man | ccc | 100 |
+------+--------+------+------+------+
2 rows in set (0.00 sec)
mysql> delete from bbb; #删除bbb表中的所有数据
Query OK, 2 rows affected (0.00 sec)
mysql> select * from bbb; #查看bbb表发现已经没有数据了
Empty set (0.00 sec)
mysql> desc bbb;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
| sex | char(10) | YES | | NULL | |
| abc | char(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
5 rows in set (0.00 sec)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)