• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

Mysql数据库

互联网 diligentman 4小时前 2次浏览

Mysql数据库

  • 一、数据库的概述
  • 二、数据库的分类
    • 优势:
    • 瓶颈:
  • 三、Mysql的概述
  • 四、Mysql存储原理
  • 五、案例:centos 7搭建Mysql 5.7; 案例环境:
  • 六、SQL语句概述
    • (1)什么是SQL
    • (2)SQL语句分类
    • (3)数据类型
    • (4)使用SQL语句

一、数据库的概述

概述: 数据库(Database)是按照数据结构组织、存储和管理数据的仓库,它产生于距今六十多年前,数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统,在各个方面得到了广泛的应用。

二、数据库的分类

关系型数据库sql数据库
非关系型数据库: nosql数据库,not only sql数据库
关系型数据库:数据拥有固定的存储结构,通过库–表–行–列的方式存储,存储时会有表的结构化关系,过程如下:解析sql语句–连接层–磁盘存取–结构化成表,;

优势:

1.容易理解,二维表的结构非常贴近现实世界,二维表格,容易理解;
2.使用方便,通用的sql语句使得操作关系型数据库非常方便;
3.易于维护,数据库的ACID属性,大大降低了数据冗余和数据不一致的概率;

瓶颈:

1.海量数据的读写效率低,对于网站的并发量高,往往达到每秒上万次的请求,对于传统关系型数据库来说,硬盘I/O是一个很大的挑战。
2.高扩展性和可用性,在基于web的结构中,数据库是最难以横向拓展的,当一个应用系统的用户量和访问量与日俱增的时候,数据库没有办法像web Server那样简单的通过添加更多的硬件和服务节点来拓展性能和负载能力。
Mysql数据库
非关系型数据库,就是为了加快客户端的访问速度才出现的,因为所有的非关系型数据库都是尽可能的将数据放到内存当中;非关系型数据库是以key:value的形式存储的;
非关系型数据库: NoSQL主要指那些非关系型的、分布式的,主要代表MongoDB,Redis、CouchDB。NoSQL提出了另一种理念,以键值来存储,且结构不稳定,每一个元组都可以有不一样的字段,这种就不会局限于固定的结构,可以减少一些时间和空间的开销。使用这种方式,为了获取用户的不同信息,不需要像关系型数据库中,需要进行多表查询。仅仅需要根据key来取出对应的value值即可,所以避免了关系型数据库复杂的查询关系,可以大大增加查询的效率;
变量名=变量值
键(key)=值(value) name=dgf name=1
数据库分类:
1.关系型数据库 2.非关系型数据库
关系型数据库: 表和表之间相互关联 可以建立表(即文件)
Database manager system:数据库管理系统( DBMS)
数据库(dbs) —->数据表(table是由行和列组成的一个二维表格)—->数据(data)
关系型数据库有:mysql oracle db2 mariadb sqlserver等
非关系型数据库有: mongodb,redis,memcach
关系型数据库和非关系型数据库的特新及各自的优缺点
Mysql数据库

三、Mysql的概述

概述:MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下公司。是一个真正的多用户、多线程SQL数据库服务器。SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言。MySQL是以一个客户机/服务器结构的实现,它由一个服务器守护程序mysqld和很多不同的客户程序和库组成。 SQL是一种标准化的语言,它使得存储、更新和存取信息更容易;

四、Mysql存储原理

Mysql整体架构:
Mysql数据库
1.连接池:最上层负责和客户端进行连接
2.SQL接口:当SQL语句进入MySQL后,会先到SQL接口中,这一层是封装层,将传过来的SQL语句拆散,将底层的结果封装成SQL的数据格式;
3.解析器:这一层负责将SQL语句进行拆分,验证,如果语句有问题那么就返回错误,如果没问题就继续向下执行;
4.优化器:对SQL查询的结果优化处理,产生多种执行计划,最终数据库会选择最优化的方案去执行,尽快返会结果。
5.缓存:对要查询的SQL语句进行hash后缓存,如果下一次是相同的查询语句,则在SQL接口之后直接返回结果;
6.存储引擎:MySQL有很多种存储引擎,每一种存储引擎有不同的特性,他们负责组织文件的存放形式,位置,访问文件的方法等等。
7.文件系统:真正存放物理文件的单位;

五、案例:centos 7搭建Mysql 5.7; 案例环境:

系统类型 IP地址 主机名 所需软件 硬件
Centos 7 192.168.100.10 7-10 mysql-5.7.12.tar.gz boost_1_59_0.tar.gz 内存:4GCPU核心:2

下载安装Mysql软件程序;

[root@7-10 ~]# yum -y remove mysql-* boost-*
[root@7-10 ~]# rpm -qa mysql
[root@7-10 ~]# rpm -qa boost
[root@7-10 ~]# yum -y install gcc gcc-c++ ncurses bison libgcrypt perl cmake ncurses-devel
[root@7-10 ~]# tar -zxvf boost_1_59_0.tar.gz
[root@7-10 ~]# mv boost_1_59_0 /usr/local/boost/
[root@7-10 ~]# groupadd mysql
[root@7-10 ~]# useradd -r -g mysql mysql
[root@7-10 ~]# tar zxvf mysql-5.7.12.tar.gz -C /usr/src/
[root@7-10 ~]# cd /usr/src/mysql-5.7.12/				##编译多次时,需要删除CMAKE的缓存,rm -rf /usr/src/mysql-5.7.12/CMakeCache.txt
[root@7-10 mysql-5.7.12]# cmake  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -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@7-10 ~]# make -j `cat /proc/cpuinfo | grep processor| wc -l`
[root@7-10 ~]# make install
[root@7-10 ~]# ls /usr/local/mysql
bin  COPYING  data  docs  include  lib  logs  man  mysql-test  README  share  support-files

注释:
-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程序

[root@7-10 ~]# chown -R mysql:mysql /usr/local/mysql
[root@7-10 ~]#  cp /usr/src/mysql-5.7.12/support-files/my-default.cnf /etc/my.cnf
cp:是否覆盖"/etc/my.cnf"? y
[root@7-10 ~]# cp /usr/src/mysql-5.7.12/support-files/mysql.server /etc/init.d/
[root@7-10 ~]# chmod +x /etc/init.d/mysql.server
[root@7-10 ~]# cat <<END >>/usr/lib/systemd/system/mysqld.service
> [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
> END
[root@7-10 ~]#  echo "export PATH=$PATH:/usr/local/mysql/bin/" >>/etc/profile
[root@7-10 ~]# source /etc/profile

初始化Mysql数据库服务

注解:
--initialize-insecure ##禁用mysql的密码策略(密码复杂性等)
--initializeaize是开启密码策略,自动生成密码在mysqld.log文件中
--user=mysql ##运行的账户
--basedir=/usr/local/mysql ##mysql的安装位置
--datadir=/usr/local/mysql/data ##mysql数据库服务数据的物理存放路径

[root@7-10 ~]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
[root@7-10 ~]# cat <<END >/etc/my.cnf
> [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
> END

注解:
[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的域名反向解析

[root@7-10 ~]# mkdir /usr/local/mysql/logs
[root@7-10 ~]#  chown mysql:mysql /usr/local/mysql/logs/
[root@7-10 ~]#  systemctl start mysqld
[root@7-10 ~]#  systemctl enable mysqld
Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.
[root@7-10 ~]# netstat -utpln |grep mysqld
tcp6       0      0 :::3306                 :::*                    LISTEN      65735/mysqld

测试连接访问数据库

[root@7-10 ~]# mysql -uroot -p
mysql> exit

六、SQL语句概述

(1)什么是SQL

SQL全称:Structured Query Language,即结构化查询语言

所有的关系型数据库都可以使用SQL语句,SQL是执行在客户端 (windows在命令行下执行,Linux在终端执行) 下或者通过Java代码执行在JDBC

(2)SQL语句分类

  • DDL: 数据定义语言,用来建立数据库、数据对象和定义其列的项,命令有:create、alter、drop等
  • DML: 数据操纵语言,用来查询、插入、删除、修改数据库中的数据,命令有:select、insert、update、delete等
  • DCL: 数据控制语言,用来控制数据库组件的存取许可、存取权限等,赋权用户,命令有:commit、rollback、grant、revoke等

(3)数据类型

  • 日期:
类型 大小(字节) 范围 格式 用途
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字节 极大文本数据

(4)使用SQL语句

  • 使用SQL语句的规格
  1. 每个命令要以;结尾
  2. 关键字之间要有空格,通常是一个空格,但是多个空格也不会报错
  3. SQL语句中可以换行,只要不输入;号,按回车就可以换行,直到有;后就会执行
  4. SQL语句不区分大小写
  5. 在编写表的值的时
  6. ,除了整数,基本上都要加"",所以在写值时,直接加""就行了

查看所有数据库

[root@7-10 ~]# mysql -u root -p #进入数据库,没有密码
mysql> show databases;    #查看所有数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.13 sec)

创建库,查看库信息

mysql> create database dsk;   #创建数据库dsk
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 dsk2 character set utf8;  #创建数据库bbb并且指定字符值为utf8
Query OK, 1 row affected (0.00 sec)

mysql> show create database aaa;  #查看数据库的详细信息,其实就是查看创建库时SQL语句的详细信息
+----------+--------------------------------------------------------------+
| Database | Create Database                                              |
+----------+--------------------------------------------------------------+
| dsk      | CREATE DATABASE `aaa` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+--------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> use dsk;       #选中(进入)dsk库
Database changed  #表示选中(进入)成功

查看表,创建表

mysql> show tables;   #查看当前aaa库下的所有表,因为是新创建的库,所以是没有表的
Empty set (0.00 sec)

mysql> create table dsk(id int,name char(10),sex char(10)); #在当前库下创建一个新的表
Query OK, 0 rows affected (0.07 sec)

mysql> show tables;  #查看所有表,发现了刚刚新创建的表
+---------------+
| Tables_in_dsk |
+---------------+
| dsk           |
+---------------+
1 row in set (0.00 sec)

mysql> show create table dsk;  #查看表的详细信息,其实就是创建表时所使用的SQL语句的详细信息
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                         |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------+
| dsk   | CREATE TABLE `dsk` (
  `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 dsk;  #查看表的项,可以看到创建表时的三个项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 dsk2(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_dsk |
+---------------+
| dsk           |
| dsk2           |
+---------------+
2 rows in set (0.00 sec)

表的重命名

mysql> rename table dsk to dsk3;  #把dsk表重命名为dsk3
Query OK, 0 rows affected (0.00 sec)

mysql> show tables;  #查看所有表,发现dsk没有了,多了一个dsk3
+---------------+
| Tables_in_dsk |
+---------------+
| dsk2           |
| dsk3           |
+---------------+
2 rows in set (0.00 sec)

修改表的属性、格式

mysql> alter table dsk2 engine=innoDB charset=gbk;  #修改dsk2表的存储引擎为innoDB,字符为gbk
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table dsk2;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                              |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| dsk2   | CREATE TABLE `dsk2` (
  `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 dsk2;     #先查看dsk2表的信息
+-------+----------+------+-----+---------+-------+
| 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 dsk2 add age int;   #在dsk2表的最后添加项,age类型是int形式
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc dsk2;  #查看dsk2表的信息,发现添加成功
+-------+----------+------+-----+---------+-------+
| 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 dsk2 add dsk char(10) after id;    #在dsk2表中的id项后面添加dsk项,类型是char
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc dsk2;     #查看dsk2表的信息,发现成功在id后面添加dsk项
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id    | int(11)  | YES  |     | NULL    |       |
| dsk   | char(10) | 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 dsk2 add aaa char(10) after dsk;    #在dsk2表中的id项后面添加dsk项,类型是char
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc dsk2;     #查看dsk2表的信息,发现成功在id后面添加aaa项
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id    | int(11)  | YES  |     | NULL    |       |
| dsk   | char(10) | 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 dsk2 add bbb char(10) first;  #添加dsk2项类型为char,添加在bbb表中的第一个
Query OK, 0 rows affected (14.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc dsk2;  #查看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 dsk2 drop aaa;    #删除dsk2表中的aaa项
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> desc dsk2;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id    | int(11)  | YES  |     | NULL    |       |
| dsk   | 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 dsk2 change dsk abc varchar(10);   #修改dsk2表中的dsk类型为varchar
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc dsk2; #成功修改
+-------+-------------+------+-----+---------+-------+
| 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 dsk2;  #查看表
+-------+-------------+------+-----+---------+-------+
| 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 dsk2 modify abc char(10) after sex;   #修改dsk2表中的abc项的数据类型为char并且移动项到sex项的后面,也可以是用first移动到第一个
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> desc dsk2;  #查看dsk2 表,发现成功修改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_dsk |
+---------------+
| dsk2          |
| dsk3          |
+---------------+
2 rows in set (0.00 sec)

mysql> drop table dsk3;   #  删除dsk3表
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;	#删除成功
+---------------+
| Tables_in_dsk |
+---------------+
| dsk2          |
+---------------+
1 row in set (0.00 sec)
mysql> show databases;	#查看库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| dsk                |
| dsk2               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

mysql> drop database dsk2;	#删除dsk2库
Query OK, 0 rows affected (0.11 sec)

mysql> show databases;	#查看库,成功删除
+--------------------+
| Database           |
+--------------------+
| information_schema |
| dsk                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

给表中插入数据

mysql> show tables;
+---------------+
| Tables_in_dsk |
+---------------+
| dsk2          |
+---------------+
1 row in set (0.00 sec)

mysql> desc dsk2;
+-------+----------+------+-----+---------+-------+
| 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 dsk2 values(1,"dsk","man","aaa","20");	    #插入数据,直接使用values的话,输入的值的顺序必须和项的顺序相同
Query OK, 1 row affected (0.01 sec)     

mysql> insert into dsk2 (id,name) values(2,"zhangsan");#这样插入可以指定想插入的值,values输入值要和前面指定项的顺序相同
Query OK, 1 row affected (0.00 sec)             	 		

mysql> insert into dsk2 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 dsk2 (id,name) values(5,"renliu");(6,"zhangqi");
Query OK, 1 row affected (0.00 sec)
mysql> select * from dsk2;   #查看表是否成功添加,NULL表示为空
+------+----------+------+------+------+
| id   | name     | sex  | abc  | age  |
+------+----------+------+------+------+
|    1 | dsk      | man  | aaa  |   20 |
|    2 | zhangsan | NULL | NULL | NULL |
|    3 | lisi     | girl | bbb  |   18 |
|    4 | wangwu   | man  | ccc  |   22 |
|    5 | renliu   | NULL | NULL | NULL |
|    5 | renliu   | NULL | NULL | NULL |
|    6 | zhangqi  | NULL | NULL | NULL |
+------+----------+------+------+------+
7 rows in set (0.00 sec)

查看表中数据

mysql> select * from dsk2;	#查看表中所以数据
+------+----------+------+------+------+
| id   | name     | sex  | abc  | age  |
+------+----------+------+------+------+
|    1 | dsk      | man  | aaa  |   20 |
|    2 | zhangsan | NULL | NULL | NULL |
|    3 | lisi     | girl | bbb  |   18 |
|    4 | wangwu   | man  | ccc  |   22 |
|    5 | renliu   | NULL | NULL | NULL |
|    5 | renliu   | NULL | NULL | NULL |
|    6 | zhangqi  | NULL | NULL | NULL |
+------+----------+------+------+------+
7 rows in set (0.00 sec)

mysql> select abc from dsk2 #只查看表中的abc数据
    -> ;
+------+
| abc  |
+------+
| aaa  |
| NULL |
| bbb  |
| ccc  |
| NULL |
| NULL |
| NULL |
+------+
7 rows in set (0.00 sec)

mysql> select *from dsk2 where name="dsk"  #只查看中name为dsk的数据
    -> ;
+------+------+------+------+------+
| id   | name | sex  | abc  | age  |
+------+------+------+------+------+
|    1 | dsk  | man  | aaa  |   20 |
+------+------+------+------+------+
1 row in set (0.68 sec)

mysql> select sex from dsk2 where name="zhangsan";  #只查看表中的sex项,并且只查看name为zhangsan的数据
+------+
| sex  |
+------+
| NULL |
+------+
1 row in set (0.00 sec)

更新(修改)表中的数据

mysql> select *from dsk2;   #查看dsk表中数据
+------+----------+------+------+------+
| id   | name     | sex  | abc  | age  |
+------+----------+------+------+------+
|    1 | dsk      | man  | aaa  |   20 |
|    2 | zhangsan | NULL | NULL | NULL |
|    3 | lisi     | girl | bbb  |   18 |
|    4 | wangwu   | man  | ccc  |   22 |
|    5 | renliu   | NULL | NULL | NULL |
|    5 | renliu   | NULL | NULL | NULL |
|    6 | zhangqi  | NULL | NULL | NULL |
+------+----------+------+------+------+
7 rows in set (0.00 sec)

mysql> update dsk2 set age=100;     #修改dsk表中的age项全部为100
Query OK, 7 rows affected (0.40 sec)
Rows matched: 7  Changed: 7  Warnings: 0

mysql> select *from dsk2;   #再次查看修改成功
+------+----------+------+------+------+
| id   | name     | sex  | abc  | age  |
+------+----------+------+------+------+
|    1 | dsk      | man  | aaa  |  100 |
|    2 | zhangsan | NULL | NULL |  100 |
|    3 | lisi     | girl | bbb  |  100 |
|    4 | wangwu   | man  | ccc  |  100 |
|    5 | renliu   | NULL | NULL |  100 |
|    5 | renliu   | NULL | NULL |  100 |
|    6 | zhangqi  | NULL | NULL |  100 |
+------+----------+------+------+------+
7 rows in set (0.00 sec)

删除表中的数据

mysql> select *from dsk2;
+------+----------+------+------+------+
| id   | name     | sex  | abc  | age  |
+------+----------+------+------+------+
|    1 | dsk      | man  | aaa  |   10 |
|    2 | zhangsan | NULL | NULL |  100 |
|    3 | lisi     | girl | bbb  |  100 |
|    4 | wangwu   | man  | ccc  |  100 |
|    5 | renliu   | NULL | NULL |  100 |
|    5 | renliu   | NULL | NULL |  100 |
|    6 | zhangqi  | NULL | NULL |  100 |
+------+----------+------+------+------+
7 rows in set (0.00 sec)

mysql> delete from dsk2 where id="1";   #删除dsk表中id项为1的行
Query OK, 1 row affected (0.12 sec)

mysql> select *from dsk2;
+------+----------+------+------+------+
| 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 |
|    5 | renliu   | NULL | NULL |  100 |
|    6 | zhangqi  | NULL | NULL |  100 |
+------+----------+------+------+------+
6 rows in set (0.00 sec)

mysql> delete from bbb where abc is NULL;      #删除dsk2表中abc项为null空的行
ERROR 1146 (42S02): Table 'dsk.bbb' doesn't exist
mysql> delete from dsk2 where abc is NULL;
Query OK, 4 rows affected (0.09 sec)

mysql> select *from dsk2;
+------+--------+------+------+------+
| 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 dsk2;  #删除dsk2表中所以数据
Query OK, 2 rows affected (0.00 sec)

mysql> select *from dsk2;   #查看dsk2表中删除成功
Empty set (0.00 sec)

mysql> desc dsk2;
+-------+----------+------+-----+---------+-------+
| 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数据库
喜欢 (0)