【1】 操作系统介绍:
Linux操作系统有 RedHat CentOS Debian Ubuntu OpenSUSE
信创标准 国产系统 :
华为(欧拉) 阿里(龙蜥) 腾讯 (tencentOS)
麒麟:(银河麒麟、中标麒麟 – >centos 优麒麟 – > Ubuntu )
深度: deepin
数据库 分两大类:
- 关系型数据库SQL
- 非关系型数据库NoSQL
关系型数据库:典型代表 MySQL MariaDB PostgreSQL SQL Server Oracle Db2
信创标准 国产数据库代表: 华为 高斯 阿里 Oceanbase 阿里云数据库 RDB 腾讯 TDBA 人大金仓 达梦 greatSQL
【2】 数据库基本概念:
(1)数据Data
数据就是描述事物的符号记录。主要包括数字,文字、图形、图像、声音、档案记录等。一般以“记录”形式按统一的格式进行存储。(2)表
表就是将不同的记录组织在一起。主要是用来存储具体数据。(3)数据库
数据库(database)是表的集合,存储数据的仓库。数据库是用来组织、存储和管理数据的仓库。以一定的组织方式存储相互有关的数据集合,是按照数据结构来组织、存储和管理数据的仓库。(4)数据库管理系统(DBMS)
数据库管理系统(DBMS)是实现对数据库资源有效组织、管理和存取的系统软件。数据库的建立和维护功能、数据定义功能、数据操纵功能、数据库的运行管理和通信功能。(5)数据库系统(DBS)
数据库系统是一个人机系统,由硬件、OS、数据库、DBMS、应用软件和数据库用户组成。用户可以通过DBMS或应用程序操作数据库。
【3】 数据库的发展:
【4】主流的数据库介绍:
(1)SQL Server(微软公司产品)
面向Windows操作系统
简单、易用
(2)Oracle (甲骨文公司产品)
面向所有主流平台
安全、完善,操作复杂
(3)DB2(IBM公司产品)
面向所有主流平台
大型、安全、完善
(4)MySQL (甲骨文公司收购)
免费、开源、体积小
(5)国产系统介绍
- 华为:欧拉
- 阿里:龙蜥
- 腾讯:tencentOS
- 麒麟:(银河麒麟、中标麒麟 – >centos 优麒麟 – > Ubuntu )
- 统信:uos
- 红旗
深度:deepin
【5】关系型数据库(SQL):
- 存储结构:二维表格
- 存储的数据:结构化数据
- 使用场景:存储业务数据、账户信息等
- 对象: 库 -> 表 -> 二维表格形式的结构化数据
行(记录):用来描述一个对象的信息
列(字段):用来描述对象的一个属性
【6】非关系型数据库(NoSQL):
- 存储结构:非二维表格结构,不同类型的NoSQL采用不同的存储结构,比如 键值对、文档、索引、时间序列 等
- 缓存型 Redis Memcached
- 文档型 MongoDB
- 索引型 Elasticsearch
- 时序型 Prometheus InfluxDB
- 列式型 HBase
优点:可高并发读写,对海量数据依旧保持着高效率的存储和访问,具有高扩展性和高可用性
SQL语句:
SQL语句用于维护管理数据库,包括数据查询、数据更新、访问控制、对象管理等功能。
SQL语言分类:
DDL:数据定义语言,用于创建数据库对象,如库、表、索引等
DML:数据操纵语言,用于对表中的数据进行管理
DQL:数据查询语言,用于从数据表中查找符合条件的数据记录
DCL:数据控制语言,用于设置或者更改数据库用户或角色权限
MySQL中6种常见的约束:
主键约束(primary key)
外键约束(foreign key)
非空约束(not null)
唯一性约束(unique [key|index])
默认值约束(default)
自增约束(auto_increment)
【7】(1)Mysql安装(CentOS7):
源码编译安装( 源码编译安装和yum安装选择一个就可以)
一、准备工作
将安装mysql 所需软件包传到/opt目录下并解压,卸载mariadb
[root@l1 ~]# mount /dev/sr0 /mnt
mount: /dev/sr0 写保护,将以只读方式挂载
[root@l1 ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
devtmpfs 1913544 0 1913544 0% /dev
tmpfs 1930624 0 1930624 0% /dev/shm
tmpfs 1930624 12568 1918056 1% /run
tmpfs 1930624 0 1930624 0% /sys/fs/cgroup
/dev/mapper/centos-root 38770180 5434896 33335284 15% /
/dev/sda1 1038336 191104 847232 19% /boot
tmpfs 386128 8 386120 1% /run/user/42
tmpfs 386128 0 386128 0% /run/user/0
/dev/sr0 4635056 4635056 0 100% /mnt
[root@l1 ~]# systemctl stop firewalld.service
[root@l1 ~]# vim /etc/selinux/config
[root@l1 ~]# cd /opt/
[root@l1 opt]# mkdir mysql
[root@l1 opt]# cd mysql/
[root@l1 mysql]# rz -E
rz waiting to receive.
[root@l1 mysql]# ls
mysql-boost-5.7.44.tar.gz
[root@l1 mysql]# tar xf mysql-boost-5.7.44.tar.gz
[root@l1 mysql]# yum remove -y mariadb* //#卸载mariadb相关内容
二、安装环境依赖包
yum -y install \
gcc \
gcc-c++ \
ncurses \ #字符终端下图形互动功能的动态库
ncurses-devel \ #ncurses开发包
bison \ #语法分析器
cmake #mysql需要用cmake编译安装
[root@l1 mysql]# yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake openssl-devel
三、配置软件模块
cd mysql-5.7.44/cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #指定mysql的安装路径
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ #指定mysql进程监听套接字文件(数据库连接文件)的存储路径
-DSYSCONFDIR=/etc \ #指定配置文件的存储路径
-DSYSTEMD_PID_DIR=/usr/local/mysql \ #指定进程文件的存储路径
-DDEFAULT_CHARSET=utf8 \ #指定默认使用的字符集编码,如 utf8
-DDEFAULT_COLLATION=utf8_general_ci \ #指定默认使用的字符集校对规则
-DWITH_EXTRA_CHARSETS=all \ #指定支持其他字符集编码
-DWITH_INNOBASE_STORAGE_ENGINE=1 \ #安装INNOBASE存储引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \ #安装ARCHIVE存储引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ #安装BLACKHOLE存储引擎
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ #安装FEDERATED存储引擎
-DMYSQL_DATADIR=/usr/local/mysql/data \ #指定数据库文件的存储路径
-DWITH_BOOST=/usr/local/boost \ #指定boost的路径,若使用mysql-boost集成包安装则-DWITH_BOOST=boost
-DWITH_SYSTEMD=1 #生成便于systemctl管理的文件
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1
四、编译及安装
[root@l1 mysql-5.7.44]# make -j 3 && make install
五、修改mysql 配置文件
useradd -M -s /sbin/nologin mysql #创建mysql用户
vim /etc/my.cnf #删除原配置项,再重新添加下面内容[client] #客户端设置port = 3306socket = /usr/local/mysql/mysql.sock #开启自动补全功能[mysqld] #服务全局设置user = mysql #设置管理用户basedir=/usr/local/mysql #指定数据库的安装目录datadir=/usr/local/mysql/data #指定数据库文件的存储路径port = 3306 #指定端口character-set-server=utf8 #设置服务器字符集编码格式为utf8pid-file = /usr/local/mysql/mysqld.pid #指定pid 进程文件路径socket=/usr/local/mysql/mysql.sock #指定数据库连接文件bind-address = 0.0.0.0 #设置监听地址,0.0.0.0代表允许所有,如允许多个IP需空格隔开skip-name-resolve #禁止域名解析,包括主机名,所以授权的时候要使用 IP 地址max_connections=4096 #设置mysql的最大连接数default-storage-engine=INNODB #指定默认存储引擎max_allowed_packet=32M #设置在网络传输中一次消息传输量的最大值。系统默认值为 1MB,最大值是 1GB,必须设置 1024 的倍数。server-id = 1 #指定服务ID号sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
[root@l1 mysql-5.7.44]# useradd -M -s /sbin/nologin mysql
[root@l1 mysql-5.7.44]#
[client]
port = 3306
socket=/usr/local/mysql/mysql.sock[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
[root@l1 mysql-5.7.44]# sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
[root@l1 mysql-5.7.44]#
六、优化mysql
更改mysql安装目录和配置文件的属主属组
[root@l1 mysql-5.7.44]# chown -R mysql:mysql /usr/local/mysql/
[root@l1 mysql-5.7.44]# chown mysql:mysql /etc/my.cnf
[root@l1 mysql-5.7.44]#
设置路径环境变量
[root@l1 mysql-5.7.44]# echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
[root@l1 mysql-5.7.44]# source /etc/profile
[root@l1 mysql-5.7.44]#
七、初始化数据库
cd /usr/local/mysql/bin/./mysqld \
--initialize-insecure \ #生成初始化密码为空
--user=mysql \ #指定管理用户
--basedir=/usr/local/mysql \ #指定数据库的安装目录
--datadir=/usr/local/mysql/data #指定数据库文件的存储路径
cd /usr/local/mysql/bin/
____________________________________________________________________________./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data____________________________________________________________________________
八、启动mysql
添加mysqld系统服务
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ #用于systemctl服务管理
systemctl daemon-reload #刷新识别
systemctl start mysqld.service #开启服务
systemctl enable mysqld #开机自启动
netstat -anpt | grep 3306 #查看端口
[root@l1 bin]# cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
[root@l1 bin]# systemctl daemon-reload
[root@l1 bin]# systemctl start mysqld.service
[root@l1 bin]# systemctl enable mysqld
Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.
[root@l1 bin]# netstat -anpt | grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 30663/mysqld
[root@l1 bin]#
修改mysql的密码
mysqladmin -u root password "abc123" #给root账号设置密码为abc123,原始密码为空
[root@l1 ~]# mysqladmin -u root password "abc123"
登录
mysql -u root -p
(2)yum安装mysql(源码编译安装和yum安装选择一个就可以,推荐源码)
一、初始化:
[root@l2 ~]# systemctl stop firewalld.service
[root@l2 ~]# setenforce 0
[root@l2 ~]# vim /etc/selinux/config
[root@l2 ~]#
二、下载MySQL官方的Yum 源安装包 :
[root@l2 ~]# wget http://dev.mysql.com/get/mysql84-community-release-el7-1.noarch.rpm
[root@l2 ~]# yum install -y mysql84-community-release-el7-1.noarch.rpm
三、部署MySQL服务器 :
[root@l2 ~]# yum install -y mysql-community-server
[root@l2 ~]# systemctl enable mysqld --now
四、初始化数据库 :
grep "password" /var/log/mysqld.log ##查看一下初始密码mysql -uroot -pALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; //修改密码
[root@l2 ~]# grep "password" /var/log/mysqld.log //查询mysql初始密码
2024-06-18T02:53:35.551045Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: sphx.w?hK4To
[root@l2 ~]# mysql -uroot -p
Enter password: //输入刚刚查询的初始密码
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.4.0Copyright (c) 2000, 2024, Oracle and/or its affiliates.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> ALTER USER 'root'@'localhost' IDENTIFIED BY '123ABCabc@'; //设置mysql密码
Query OK, 0 rows affected (0.00 sec)mysql>
注:yum安装的MySQL有密码要求
五、Mysql8.*远程连接 :
update user set host='%' where user='root';flush privileges;
[root@l2 ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.4.0 MySQL Community Server - GPLCopyright (c) 2000, 2024, Oracle and/or its affiliates.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>
【8】 Mysql字段类型:
(1)常用的数据库类型 :
类型 | 含义 |
tinyint(n) | 1个字节,范围(-128~127) |
smallint(n) | 2个字节,范围(-32768~32767) |
mediumint(n) | 3个字节,范围(-8388608~8388607) |
int(n) | 4个字节(32个比特位),整数型,范围(-2147483648~2147483647) |
bigint(n) | 8个字节,整数型,范围(±9.22*10的18次方) |
float(m,d) | 单精度浮点,8位精度,4字节32位。m数字总个数,d小数位 |
double(m,d) | 双精度浮点,16位精度,8字节64位 。m总个数,d小数位 |
char | 固定长度的字符类型 |
varchar | 可变长度的字符类型 |
text | 文本 |
image | 图片 |
decimal(5,2) | 5个有效长度数字,小数点后面有2位(例如123.56) |
(2)char与varchar的区别:
值 | CHAR(4) | 存储需求 | VARCHAR(4) | 存储需求 |
---|---|---|---|---|
‘’ | ’ ’ | 4个字节 | ‘’ | 1个字节 |
‘ab’ | 'ab ’ | 4个字节 | 'ab ’ | 3个字节 |
‘abcd’ | ‘abcd’ | 4个字节 | ‘abcd’ | 5个字节 |
‘abcdefgh’ | ‘abcd’ | 4个字节 | ‘abcd’ | 5个字节 |
CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
(3)字节大小:
- char无论是否有值,都会占用固定长度的字节大小,保存在磁盘上都是4字节。
- varchar在保存字符时,默认会加一个隐藏的结束符,因此结束符会多算一个字节。
(4)优劣比较:
- varchar比char节省磁盘空间。
- varchar类型的数据读写速度比char慢,因为char是连续的磁盘空间,e而varchar在多次增删改查中会产生一些磁盘空间碎片
【9】管理Mysql :
登录数据库:
[root@l1 ~]# mysql -uroot -pabc123
(1) 查看数据库结构:
SELECT VERSION(); //查看当前的 MySQL 版本信息SELECT USER(); //查看当前的 MySQL连接用户名
[root@l1 ~]# mysql -u root -p //源码安装mysql的时候设置的密码为abc123(也可以-pabc123)
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.44 Source distributionCopyright (c) 2000, 2023, Oracle and/or its affiliates.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> SELECT VERSION(); //查看当前的 MySQL 版本信息
+-----------+
| VERSION() |
+-----------+
| 5.7.44 |
+-----------+
1 row in set (0.00 sec)mysql> SELECT USER(); //查看当前的 MySQL连接用户名
+----------------+
| USER() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)mysql>
(2)查看当前服务器中的数据库:
show databases; //当前服务器中的数据库
show tables [from 库名]; //当前服务器中的表信息
MySQL会附带4个系统数据库:
information_schema: 主要存储系统中的一些数据库对象信息,如数据库名,数据库的表,表栏的数据类型与访问权限等
performance_schema: 主要存储数据库服务器性能参数信息
mysql:主要存储系统的用户权限信息
sys:MySQL5.7之后引入的一个新的 sys 数据库,sys 库里面的表、视图、函数以及存储过程可以让用户快速了解MySQL的一些信息,它的数据来源于performance_schema
(3)查看数据库中包含的表:
show tables from 库名; //查看数据库中的表信息或者use 库名;show tables;
方式一:先切换库,再查看
#格式:use 库名
mysql> use mysql;mysql> show tables;方式二:直接查看
#格式: show tables from 库名mysql> show tables from mysql;
mysql> use mysql //库名
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> show tables; //查看该库中的所有表
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| engine_cost |
| event |
| func |
| general_log |
| gtid_executed |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| proxies_priv |
| server_cost |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
31 rows in set (0.00 sec)mysql>
mysql> show tables from mysql;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| engine_cost |
| event |
| func |
| general_log |
| gtid_executed |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| proxies_priv |
| server_cost |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
31 rows in set (0.00 sec)mysql>
(4)查看表的结构(字段):
use 库名;
describe 表名; 可简写为desc 表名;或者desc 库名.表名;
——————————————————————————————————————————————————————————————————方式一:先切换库,在查看指定表的字段USE 数据库名; #切换库SHOW TABLES; #查看库中的表DESCRIBE 表名; #查看指定表的结构( DESCRIBE 可以缩写为DESC)ps:由于屏幕占比问题与字段数量问题,会导致有些表结构的效果呈现并不好。
(由于默认查看为横向的查看 ) 纵向查看方式:
desc 表名\G;
——————————————————————————————————————————————————————————————————————方式二:直接查看表结构 DESCRIBE [数据库名.]表名;可缩写成:DESC 数据库名.表名;
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changedmysql> desc user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(32) | NO | PRI | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Reload_priv | enum('N','Y') | NO | | N | |
| Shutdown_priv | enum('N','Y') | NO | | N | |
| Process_priv | enum('N','Y') | NO | | N | |
| File_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Show_db_priv | enum('N','Y') | NO | | N | |
| Super_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv | enum('N','Y') | NO | | N | |
| Execute_priv | enum('N','Y') | NO | | N | |
| Repl_slave_priv | enum('N','Y') | NO | | N | |
| Repl_client_priv | enum('N','Y') | NO | | N | |
| Create_view_priv | enum('N','Y') | NO | | N | |
| Show_view_priv | enum('N','Y') | NO | | N | |
| Create_routine_priv | enum('N','Y') | NO | | N | |
| Alter_routine_priv | enum('N','Y') | NO | | N | |
| Create_user_priv | enum('N','Y') | NO | | N | |
| Event_priv | enum('N','Y') | NO | | N | |
| Trigger_priv | enum('N','Y') | NO | | N | |
| Create_tablespace_priv | enum('N','Y') | NO | | N | |
| ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | |
| ssl_cipher | blob | NO | | NULL | |
| x509_issuer | blob | NO | | NULL | |
| x509_subject | blob | NO | | NULL | |
| max_questions | int(11) unsigned | NO | | 0 | |
| max_updates | int(11) unsigned | NO | | 0 | |
| max_connections | int(11) unsigned | NO | | 0 | |
| max_user_connections | int(11) unsigned | NO | | 0 | |
| plugin | char(64) | NO | | mysql_native_password | |
| authentication_string | text | YES | | NULL | |
| password_expired | enum('N','Y') | NO | | N | |
| password_last_changed | timestamp | YES | | NULL | |
| password_lifetime | smallint(5) unsigned | YES | | NULL | |
| account_locked | enum('N','Y') | NO | | N | |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
45 rows in set (0.00 sec)mysql>
mysql> desc mysql.db;
+-----------------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+-------+
| Host | char(60) | NO | PRI | | |
| Db | char(64) | NO | PRI | | |
| User | char(32) | NO | PRI | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv | enum('N','Y') | NO | | N | |
| Create_view_priv | enum('N','Y') | NO | | N | |
| Show_view_priv | enum('N','Y') | NO | | N | |
| Create_routine_priv | enum('N','Y') | NO | | N | |
| Alter_routine_priv | enum('N','Y') | NO | | N | |
| Execute_priv | enum('N','Y') | NO | | N | |
| Event_priv | enum('N','Y') | NO | | N | |
| Trigger_priv | enum('N','Y') | NO | | N | |
+-----------------------+---------------+------+-----+---------+-------+
22 rows in set (0.00 sec)mysql>
SQL语言:
SQL语句用于维护管理数据库,包括数据查询、数据更新、访向控制、对象管理等功能
SQL语言分类:
DDL: 数据定义语言,用于创建数据库对象,如库、表、索引等.
DML:数据操纵语言,用于对表中数据进行管理(增、删、改).
DQL:数据查询语言,用于从数据表中查找符合条件的数据记录.
DCL:数据控制语言,用于设置或者更改数据库用户或角色权限.
(5)创建及删除数据库和表:
1. 创建新的数据库:
create database 库名; //创建新的数据库
mysql> create database cywl;
Query OK, 1 row affected (0.00 sec)mysql>
2. 创建新的表:
use 数据库名;
create table 表名 (字段1 数据类型,字段2 数据类型,.....,[primary key(设为主键的字段名)]);
#主键一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键
#解释
id 字段:这是一个整数类型(int)字段,标记为"not null",表示该字段不允许存储NULL值。同时,它被指定为主键(primary key),这意味着每一行的id字段值必须是唯一的,通常用于唯一标识表中的每一条记录。name 字段:这是一个固定长度字符类型(char(15))字段,同样不允许存储NULL值。这意味着每个name字段的值必须是一个最多包含15个字符的字符串,若实际输入的字符数少于15个,剩余部分会被填充为空格以达到15个字符的长度。score 字段:这是一个十进制类型(decimal(4,2))字段,用于存储带小数点的分数。"(4,2)"表示该字段可以存储最大共4位数字,其中包含2位小数,例如0.00到999.99之间的数值。passwd 字段:这是一个固定长度字符类型(char(45))字段,用于存储密码信息,默认值(default)被设置为空字符串('')。这意味着如果没有为passwd字段提供值,它将自动填充一个空字符串。当这条SQL语句被执行后,数据库中将创建一个名为class的表,包含id、name、score和passwd这四个字段。
mysql> use cywl;
Database changed
mysql> create table chuyin(id int,name varchar(20),sex char(2),age int,primary key(id));
Query OK, 0 rows affected (0.01 sec)mysql> show tables;
+----------------+
| Tables_in_cywl |
+----------------+
| chuyin |
+----------------+
1 row in set (0.00 sec)mysql> desc chuyin;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)mysql>
3. 删除指定的数据表:
use 库名;
drop 表名;或者drop table 库名.表名;
mysql> show databases; //查看服务器所有表
+--------------------+
| Database |
+--------------------+
| information_schema |
| cywl |
| mydb |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)mysql> show tables from cywl; //查看cywl下的数据表
+----------------+
| Tables_in_cywl |
+----------------+
| chuyin |
+----------------+
1 row in set (0.00 sec)mysql> drop table cywl.chuyin; //删除chuyin表
Query OK, 0 rows affected (0.00 sec)mysql> show tables from cywl; //查看cywl下的数据表
Empty set (0.00 sec)mysql>
管理表中的数据记录
1)向数据表中插入新的数据记录
INSERT INTO 表名(字段1,字段2[,...]) VALUES(字段1的值,字段2的值,...);
mysql> show tables;
Empty set (0.00 sec)mysql> create table chuyin(id int,name varchar(20),sex char(2),age int,primary key(id));
Query OK, 0 rows affected (0.00 sec)mysql> show tables;
+----------------+
| Tables_in_cywl |
+----------------+
| chuyin |
+----------------+
1 row in set (0.00 sec)mysql> desc chuyin;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)mysql> insert into chuyin(id, name, sex, age) values(1, 'my', '女', 20);
Query OK, 1 row affected (0.01 sec)mysql>
2)查询数据记录
use 库名 #进入数据库
SELECT 字段名1,字段名2[,...] FROM 表名 [WHERE 条件表达式];
select * from 表名;
select name,age from 表名 where sex='男';
select * from 表名 where id>=2 and id<=3;
select * from 表名 where id=1 or id=3;
select * from表名 limit 2; #只显示头2行
select * from 表名 limit 1,2; #显示第1行后的前2行(不包括第1行,也就是第2、3行)
select * from 表名\G #以列表方式竖向显示,结尾没有分号,在Xshell中可以看到效果,在Navicat中无法实现
查看表中的数据
mysql> select * from chuyin;
+----+------+------+------+
| id | name | sex | age |
+----+------+------+------+
| 1 | my | 女 | 20 |
+----+------+------+------+
1 row in set (0.00 sec)mysql>
指定输出内容查询,用,分割
mysql> select name,age from chuyin;
+------+------+
| name | age |
+------+------+
| my | 20 |
| tmt | 21 |
| yf | 21 |
+------+------+
3 rows in set (0.00 sec)mysql>
使用where更进一步根据条件查询
mysql> select name,age from chuyin where sex='女';
+------+------+
| name | age |
+------+------+
| my | 20 |
| tmt | 21 |
| yf | 21 |
+------+------+
3 rows in set (0.00 sec)mysql>
查看2到3行内容
mysql> select * from chuyin where id>=2 and id<=3;
+----+------+------+------+
| id | name | sex | age |
+----+------+------+------+
| 2 | tmt | 女 | 21 |
| 3 | yf | 女 | 21 |
+----+------+------+------+
2 rows in set (0.00 sec)mysql>
使用or表示或的意思
mysql> select * from chuyin where id=2 or id=3; //2或者3行
+----+------+------+------+
| id | name | sex | age |
+----+------+------+------+
| 2 | tmt | 女 | 21 |
| 3 | yf | 女 | 21 |
+----+------+------+------+
2 rows in set (0.00 sec)mysql> select * from chuyin where id=2 or id=4; //2或者4行
+----+------+------+------+
| id | name | sex | age |
+----+------+------+------+
| 2 | tmt | 女 | 21 |
+----+------+------+------+
1 row in set (0.00 sec)mysql>
limit N; 查看前N行内容
mysql> select * from chuyin limit 2; //前两行
+----+------+------+------+
| id | name | sex | age |
+----+------+------+------+
| 1 | my | 女 | 20 |
| 2 | tmt | 女 | 21 |
+----+------+------+------+
2 rows in set (0.00 sec)mysql>
limit n,m; 查看从第n行开始的m行内容(不包括第n行)
mysql> select * from chuyin limit 1,2; //第一行开始的两行内容(不包括第一行)
+----+------+------+------+
| id | name | sex | age |
+----+------+------+------+
| 2 | tmt | 女 | 21 |
| 3 | yf | 女 | 21 |
+----+------+------+------+
2 rows in set (0.01 sec)mysql>
纵向显示查询内容
mysql> select * from chuyin\G
*************************** 1. row ***************************id: 1
name: mysex: 女age: 20
*************************** 2. row ***************************id: 2
name: tmtsex: 女age: 21
*************************** 3. row ***************************id: 3
name: yfsex: 女age: 21
3 rows in set (0.00 sec)mysql>
3)修改、更新数据表中的数据记录
update 表名 set 字段名1=字段值1, [字段名2=字段值2] [WHERE条件表达式1];
修改id=3的age为23
mysql> select * from chuyin;
+----+------+------+------+
| id | name | sex | age |
+----+------+------+------+
| 1 | my | 女 | 20 |
| 2 | tmt | 女 | 21 |
| 3 | yf | 女 | 21 |
+----+------+------+------+
3 rows in set (0.00 sec)mysql> update chuyin set age=23 where id=3; //修改id=3的age为23
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0mysql> select * from chuyin;
+----+------+------+------+
| id | name | sex | age |
+----+------+------+------+
| 1 | my | 女 | 20 |
| 2 | tmt | 女 | 21 |
| 3 | yf | 女 | 23 |
+----+------+------+------+
3 rows in set (0.00 sec)mysql>
4)在数据表中删除指定的数据记录
delete from 表名 [where条件表达式];
删除id=1的数据内容
mysql> select * from chuyin; //查看表内容
+----+------+------+------+
| id | name | sex | age |
+----+------+------+------+
| 1 | my | 女 | 20 |
| 2 | tmt | 女 | 21 |
| 3 | yf | 女 | 23 |
+----+------+------+------+
3 rows in set (0.00 sec)mysql> delete from chuyin where id=1; //删除id=1的数据内容
Query OK, 1 row affected (0.00 sec)mysql> select * from chuyin; //查看表内容
+----+------+------+------+
| id | name | sex | age |
+----+------+------+------+
| 2 | tmt | 女 | 21 |
| 3 | yf | 女 | 23 |
+----+------+------+------+
2 rows in set (0.00 sec)mysql>
(5)修改表名和表结构
1)修改表名
alter table 旧的表名 rename 新的表名;
mysql> alter table chuyin rename cywl1; //修改表名chuyin为chuyin1
Query OK, 0 rows affected (0.00 sec)mysql> show tables; //查看表名
+----------------+
| Tables_in_cywl |
+----------------+
| cywl1 |
+----------------+
1 row in set (0.00 sec)mysql>
2)扩展表结构(增加字段)
alter table 表名 add 字段 数据类型 default ' 默认值' ;
#default '和平':表示此字段设置默认值,爱好不明,可与NOT NULL配合使用
mysql> desc cywl1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)mysql> alter table cywl1 add hobby varchar(40) default '和平'; //#default '和平':表示此字段设置默认值,爱好不明,可与NOT NULL配合使用
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql> desc cywl1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| hobby | varchar(40) | YES | | 和平 | |
+-------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)mysql>
添加数据时,不指定hobby,则默认为和平
mysql> insert into cywl1 values(1, 'my', '女', 21, '跳伞');
Query OK, 1 row affected (0.00 sec)mysql> select * from cywl1;
+----+------+------+------+--------+
| id | name | sex | age | hobby |
+----+------+------+------+--------+
| 1 | my | 女 | 21 | 跳伞 |
| 2 | tmt | 女 | 21 | 和平 |
| 3 | yf | 女 | 23 | 和平 |
+----+------+------+------+--------+
3 rows in set (0.00 sec)mysql>
3)修改字段(列)名,唯一键(主键)
alter table 表名 change 旧列名 新列名 数据类型 [unique key];
#unique key代表唯一键,不可以添加相同值,一张表可以有多个唯一值。
将name换成name1,并设置唯一键
mysql> desc cywl1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| hobby | varchar(40) | YES | | 和平 | |
+-------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)mysql> alter table cywl1 change name name1 varchar(20) unique key; //将name换成name1,并设置唯一键
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql> desc cywl1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name1 | varchar(20) | YES | UNI | NULL | |
| sex | char(2) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| hobby | varchar(40) | YES | | 和平 | |
+-------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)mysql>
4)删除字段
alter table 表名 drop 字段名;
删除hobby字段
mysql> desc cywl1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name1 | varchar(20) | YES | UNI | NULL | |
| sex | char(2) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| hobby | varchar(40) | YES | | 和平 | |
+-------+-------------+------+-----+---------+-------+
5 rows in set (0.01 sec)mysql> alter table cywl1 drop hobby; //删除hobby字段
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql> desc cywl1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name1 | varchar(20) | YES | UNI | NULL | |
| sex | char(2) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)mysql>
5)添加、删除约束属性
alter table 表名 drop primary key;
alter table 表名 add primary key(字段名);
mysql> desc cywl1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name1 | varchar(20) | YES | UNI | NULL | |
| sex | char(2) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)mysql> alter table cywl1 drop primary key; //删除约束属性
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0mysql> desc cywl1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | NO | | NULL | |
| name1 | varchar(20) | YES | UNI | NULL | |
| sex | char(2) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)mysql> alter table cywl1 add primary key(id); //添加约束属性
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql> desc cywl1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name1 | varchar(20) | YES | UNI | NULL | |
| sex | char(2) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)mysql>
8、MySQL的6大约束属性:
主键约束 | primary key | 字段的值不能重复,且不能为NULL,一个表只能有一个主键 |
唯一键约束 | unique key | 字段的值不能重复,但可以为NULL,一个表可以有多个唯一键 |
非空约束 | not null | 字段的值不能为NULL |
默认值约束 | default 'XXX' | 字段的值如果没有设置值则使用默认值自动填充 |
自增约束 | auto_increment | 字段的值如果没有设置值会默认从开始每行自动递增 1 ,要求设置自增的字段必须为主键字段 |
外键约束 | foreign key | 用来保证外键表和主键表相关联数据的完整性和一致性 |
零填充 int(N) zerofill 使用0进行填充使字段的数组满足 N 位数