一、概述
数据库概念
数据库(Database)
简称DB,按照一定格式存储数据的一些文件的组合,顾名思义就是存储数据的仓库,实际上就是一堆文件。这些文件中存储了具有特定格式的数据 。数据库管理数据有诸多优点,如降低存储数据的冗余度,存储的数据可以共享,便于维护数据完整性,能够实现数据的安全性等。数据库的发展经历了萌芽、初级、中级、和高级阶段。
数据库管理系统(DateBase Management System)
简称DBMS,数据库管理系统是专门用来管理数据库中的数据的,可以对数据库当中的数据进行增、删、改、查 等操作,常见的数据库管理系统:MySql、Oracle、MS SQLServer、DB2、sysbase等… postgreSQL
SQL(Structured Query Language)
结构化查询语言,针对关系型数据库的一种语言;SQL 是一种操作数据库的语言,包括创建数据库、删除数据库、查询记录、修改记录、添加字段等。SQL在MySql中可以使用,同时在Oracle中也可以使用,在DB2中也可以使用 。
数据库的类型
关系型数据库
- MariaDB/MySQL
- Oracle
- DB2
- MS SQLServer,只能用于windows系统
国产数据库
- 达梦
- 人大金仓
- TiDB,分布式关系型数据库
NOSQL数据库
- Redis,缓存数据库
- MongoDB,文档型数据库
关系型数据库模型
- 层次模型
- 网状模型
- 关系模型
关系模型的相关概念:
1. 实体(Entity) :实体是指现实世界中可以区分的对象,它可以是具体的人、事物或概念,也可以是抽象的物体。在数据库中,实体通常对应于表中的行,而表则实体的一种集合。例如,在一个学生信息管理系统中,学生、课程和教师都可以被视为实体。
2. 属性(Attribute): 属性是实体的特征或性质,它提供了关于实体的具体信息。属性可以是简单的数据类型,如姓名、年龄或地址,也可以是更复杂的结构,如电话号码或电子邮件地址。在数据库中,属性通常对应于表中的列,每列代表实体的一种属性。例如,学生的姓名、学号和年龄都是学生的属性。
3. 联系(Relationship): 联系描述了不同实体之间的关系。在现实世界中,实体之间往往存在各种形式的关联。在数据库中,联系通过关系表来实现,这个表通常包含两个或更多的实体作为表的列。例如,学生选修课程的关系表就包含了学生实体和课程实体的相关信息,描述了哪位学生选修了哪门课程。
在关系模型中,实体和联系通常通过以下三种类型来进一步分类:
- 一对一(1:1):这种联系表示两个实体之间存在一对一的关系,即每个实体只有一个相关的实体,反之亦然。例如,一个部门与一个负责人之间可能存在一对一的联系。
- 一对多(1:N):这种联系表示一个实体与多个实体相关,但每个相关实体只与一个实体相关。例如,一个教师可以教授多门课程,但每门课程只能由一个教师教授。
- 多对多(M:N):这种联系表示两个实体之间存在多对多的关系,即每个实体可以与多个实体相关,同时每个相关实体也可以与多个实体相关。例如,学生可以选修多门课程,同时每门课程也可以被多个选修。
在设计数据库时,正确地识别实体、属性和联系,以及它们之间的类型,对于创建一个结构良好、能够有效存储和检索数据的数据库至关重要。
关系数据库相关概念
1. 库(Database): 库是一个存储数据的容器,它可以包含多个数据库。在某些管理系统中,库等同于数据库。
2. 表(Table): 表是数据库中的一个表格,由行和列组成。表是存储数据的主要结构,每个表通常对应一个实体类型。表的列名称为属性,而表的行名称为记录。
3. 行(Record): 行也称为记录,它是表中的一个单元,代表表中的一个具体实例。每一行包含了一组属性值,这些值共同描述了一个实体的状态。存储在其中的
4. 列(Column): 列是表中的一列,它代表了表的一个属性。每列都有一个数据类型,用于定义数据的种类和格式。
5. 字段(Field): 字段通常指的是表中的行与列的交叉点,它存储了单个数据项。在数据库中,每个字段都有其特定的数据类型和用途。
6. 数据(Data): 数据是存储在数据库中的信息。它可以是文本、数字、日期、图像、声音等各种形式。数据是数据库管理和操作的核心。
二、安装
默认监听端口号:3306/tcp
1、mysql安装
服务端程序:mysql-server;客户端程序:mysql;
[root@mysql ~]# yum install -y mysqld-server mysql
##编译安装,需要cmake环境
3、启动mysql
[root@mysql ~]# systemctl start mysqld.service
##编译安装,需要cmake环境
三、mysqld数据库配置与命令
yum安装后生成的目录
[root@mysql mysql]# rpm -ql mysqld-server
/etc/logrotate.d/mysqld
/etc/my.cnf.d/server.cnf
/usr/bin/innochecksum
/usr/bin/myisam_ftdump
/usr/bin/myisamchk
/usr/bin/myisamlog
/usr/bin/myisampack
/usr/bin/mysql_convert_table_format
/usr/bin/mysql_fix_extensions
/usr/bin/mysql_install_db
/usr/bin/mysql_plugin
/usr/bin/mysql_secure_installation
/usr/bin/mysql_setpermission
/usr/bin/mysql_tzinfo_to_sql
/usr/bin/mysql_upgrade
/usr/bin/mysql_zap
/usr/bin/mysqlbug
/usr/bin/mysqld_multi
/usr/bin/mysqld_safe
/usr/bin/mysqld_safe_helper
/usr/bin/mysqldumpslow
/usr/bin/mysqlhotcopy
/usr/bin/mysqltest
/usr/bin/perror
/usr/bin/replace
/usr/bin/resolve_stack_dump
/usr/bin/resolveip
/usr/lib/systemd/system/mysqld.service
/usr/lib/tmpfiles.d/mysqld.conf
/usr/lib64/mysql/INFO_BIN
/usr/lib64/mysql/INFO_SRC
/usr/lib64/mysql/mysqlbug
/usr/lib64/mysql/plugin
/usr/lib64/mysql/plugin/adt_null.so
/usr/lib64/mysql/plugin/auth_0x0100.so
/usr/lib64/mysql/plugin/auth_pam.so
/usr/lib64/mysql/plugin/auth_socket.so
/usr/lib64/mysql/plugin/auth_test_plugin.so
/usr/lib64/mysql/plugin/daemon_example.ini
/usr/lib64/mysql/plugin/dialog_examples.so
/usr/lib64/mysql/plugin/ha_innodb.so
/usr/lib64/mysql/plugin/ha_sphinx.so
/usr/lib64/mysql/plugin/handlersocket.so
/usr/lib64/mysql/plugin/libdaemon_example.so
/usr/lib64/mysql/plugin/mypluglib.so
/usr/lib64/mysql/plugin/qa_auth_client.so
/usr/lib64/mysql/plugin/qa_auth_interface.so
/usr/lib64/mysql/plugin/qa_auth_server.so
/usr/lib64/mysql/plugin/query_cache_info.so
/usr/lib64/mysql/plugin/semisync_master.so
/usr/lib64/mysql/plugin/semisync_slave.so
/usr/lib64/mysql/plugin/server_audit.so
/usr/lib64/mysql/plugin/sphinx.so
/usr/lib64/mysql/plugin/sql_errlog.so
/usr/libexec/mysqld-prepare-db-dir
/usr/libexec/mysqld-wait-ready
/usr/libexec/mysqld
/usr/share/man/man1/innochecksum.1.gz
/usr/share/man/man1/msql2mysql.1.gz
/usr/share/man/man1/myisam_ftdump.1.gz
/usr/share/man/man1/myisamchk.1.gz
/usr/share/man/man1/myisamlog.1.gz
/usr/share/man/man1/myisampack.1.gz
/usr/share/man/man1/mysql.server.1.gz
/usr/share/man/man1/mysql_convert_table_format.1.gz
/usr/share/man/man1/mysql_fix_extensions.1.gz
/usr/share/man/man1/mysql_install_db.1.gz
/usr/share/man/man1/mysql_plugin.1.gz
/usr/share/man/man1/mysql_secure_installation.1.gz
/usr/share/man/man1/mysql_setpermission.1.gz
/usr/share/man/man1/mysql_tzinfo_to_sql.1.gz
/usr/share/man/man1/mysql_upgrade.1.gz
/usr/share/man/man1/mysql_zap.1.gz
/usr/share/man/man1/mysqlbinlog.1.gz
/usr/share/man/man1/mysqlbug.1.gz
/usr/share/man/man1/mysqlcheck.1.gz
/usr/share/man/man1/mysqld_multi.1.gz
/usr/share/man/man1/mysqld_safe.1.gz
/usr/share/man/man1/mysqldumpslow.1.gz
/usr/share/man/man1/mysqlhotcopy.1.gz
/usr/share/man/man1/mysqlimport.1.gz
/usr/share/man/man1/mysqltest.1.gz
/usr/share/man/man1/perror.1.gz
/usr/share/man/man1/replace.1.gz
/usr/share/man/man1/resolve_stack_dump.1.gz
/usr/share/man/man1/resolveip.1.gz
/usr/share/man/man8/mysqld.8.gz
/usr/share/mysql/README.mysql-cnf
/usr/share/mysql/errmsg-utf8.txt
/usr/share/mysql/fill_help_tables.sql
/usr/share/mysql/my-huge.cnf
/usr/share/mysql/my-innodb-heavy-4G.cnf
/usr/share/mysql/my-large.cnf
/usr/share/mysql/my-medium.cnf
/usr/share/mysql/my-small.cnf
/usr/share/mysql/mysql_performance_tables.sql
/usr/share/mysql/mysql_system_tables.sql
/usr/share/mysql/mysql_system_tables_data.sql
/usr/share/mysql/mysql_test_data_timezone.sql
/var/lib/mysql ##mysqld数据库的数据存储目录
/var/log/mysqld
/var/log/mysqld/mysqld.log
/var/run/mysqld
mysqld服务器的启动脚本
[root@mysql ~]# cat /usr/lib/systemd/system/mysqld.service
[Unit]
Description=mysqld database server
After=syslog.target
After=network.target
[Service]
Type=simple
User=mysql ##程序运行用户
Group=mysql
ExecStartPre=/usr/libexec/mysqld-prepare-db-dir %n
# Note: we set --basedir to prevent probes that might trigger SELinux alarms,
# per bug #547485
ExecStart=/usr/bin/mysqld_safe --basedir=/usr
ExecStartPost=/usr/libexec/mysqld-wait-ready $MAINPID
"/usr/lib/systemd/system/mysqld.service" 48L, 1697C 39,1 55%
# http://fedoraproject.org/wiki/Systemd#How_do_I_customize_a_unit_file.2F_add_a_custom_unit_file.3F
# For example, if you want to increase mysqld's open-files-limit to 10000,
# you need to increase systemd's LimitNOFILE setting, so create a file named
# "/etc/systemd/system/mysqld.service.d/limits.conf" containing:
# [Service]
# LimitNOFILE=10000
# Note: /usr/lib/... is recommended in the .include line though /lib/...
# still works.
# Don't forget to reload systemd daemon after you change unit configuration:
# root> systemctl --system daemon-reload
[Unit]
Description=mysqld database server
After=syslog.target
After=network.target
[Service]
Type=simple
User=mysql
Group=mysql
ExecStartPre=/usr/libexec/mysqld-prepare-db-dir %n
# Note: we set --basedir to prevent probes that might trigger SELinux alarms,
# per bug #547485
ExecStart=/usr/bin/mysqld_safe --basedir=/usr
ExecStartPost=/usr/libexec/mysqld-wait-ready $MAINPID
# Give a reasonable amount of time for the server to start up/shut down
TimeoutSec=300
# Place temp files in a secure directory, not /tmp
PrivateTmp=true
[Install]
WantedBy=multi-user.target
服务启动时读取的默认配置文件
[root@mysql mysql]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql ##定义数据存储目录
socket=/var/lib/mysql/mysql.sock ##定义连接的网络接口文件
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe]
log-error=/var/log/mysqld/mysqld.log ##程序运行的错误日志
pid-file=/var/run/mysqld/mysqld.pid ##程序运行的PID文件
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
mysqld操作命令
[root@mysql ~]# ls -l /usr/bin/mysql*
-rwxr-xr-x 1 root root 3543584 10月 2 2020 /usr/bin/mysql
-rwxr-xr-x 1 root root 111971 10月 2 2020 /usr/bin/mysqlaccess
-rwxr-xr-x 1 root root 3096720 10月 2 2020 /usr/bin/mysqladmin
-rwxr-xr-x 1 root root 3259880 10月 2 2020 /usr/bin/mysqlbinlog
lrwxrwxrwx 1 root root 26 1月 31 10:15 /usr/bin/mysqlbug -> /etc/alternatives/mysqlbug
-rwxr-xr-x 1 root root 3094016 10月 2 2020 /usr/bin/mysqlcheck
-rwxr-xr-x 1 root root 4215 10月 2 2020 /usr/bin/mysql_convert_table_format
-rwxr-xr-x 1 root root 24116 10月 2 2020 /usr/bin/mysqld_multi
-rwxr-xr-x 1 root root 27105 10月 2 2020 /usr/bin/mysqld_safe
-rwxr-xr-x 1 root root 2887144 10月 2 2020 /usr/bin/mysqld_safe_helper
-rwxr-xr-x 1 root root 3176704 10月 2 2020 /usr/bin/mysqldump
-rwxr-xr-x 1 root root 7876 10月 2 2020 /usr/bin/mysqldumpslow
-rwxr-xr-x 1 root root 3288 10月 2 2020 /usr/bin/mysql_find_rows
-rwxr-xr-x 1 root root 1246 10月 2 2020 /usr/bin/mysql_fix_extensions
-rwxr-xr-x 1 root root 34942 10月 2 2020 /usr/bin/mysqlhotcopy
-rwxr-xr-x 1 root root 3088968 10月 2 2020 /usr/bin/mysqlimport
-rwxr-xr-x 1 root root 16701 10月 2 2020 /usr/bin/mysql_install_db
-rwxr-xr-x 1 root root 2926112 10月 2 2020 /usr/bin/mysql_plugin
-rwxr-xr-x 1 root root 12126 10月 2 2020 /usr/bin/mysql_secure_installation
-rwxr-xr-x 1 root root 17464 10月 2 2020 /usr/bin/mysql_setpermission
-rwxr-xr-x 1 root root 3087504 10月 2 2020 /usr/bin/mysqlshow
-rwxr-xr-x 1 root root 3106896 10月 2 2020 /usr/bin/mysqlslap
-rwxr-xr-x 1 root root 3449016 10月 2 2020 /usr/bin/mysqltest
-rwxr-xr-x 1 root root 2921448 10月 2 2020 /usr/bin/mysql_tzinfo_to_sql
-rwxr-xr-x 1 root root 2998448 10月 2 2020 /usr/bin/mysql_upgrade
-rwxr-xr-x 1 root root 2912968 10月 2 2020 /usr/bin/mysql_waitpid
-rwxr-xr-x 1 root root 3856 10月 2 2020 /usr/bin/mysql_zap
mysql命令
mysql数据库登录的命令行工具,本地登录时且root用户没有密码,输入mysql,等效于”mysql -uroot -hlocalhost -P3306“
常用选项
-u:指定登录用户
-p:指定用户密码
-h:指定登录数据库的IP或者域名
-P:指定登录数据库的端口号
-e:能够在终端执行数据库指令
使用案例
[root@mysql ~]# mysql -uroot -hlocalhost -P3306
[root@mysql ~]# mysql -p123.com -e "show databases" ##直接在外部执行查看数据库的命令
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
##指定登录的数据库,只能是一个
[root@mysql mysql]# mysql -p123.com mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the mysqld monitor. Commands end with ; or \g.
Your mysqld connection id is 14
Server version: 5.5.68-mysqld mysqld Server
Copyright (c) 2000, 2018, Oracle, mysqld Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysqld [mysql]>
mysqladmin命令
设置root用户密码
[root@mysql ~]# mysqladmin -uroot password '123.com'
使用密码登录
[root@mysql ~]# mysql -uroot -p123.com -h127.0.0.1 -P3306
四、 SQL语言
- DDL:数据定义语言,对数据库结构操作
create:创建(用户,库,表)
alter:改变
drop:删除
- DML:数据操作语言,对数据表的操作
insert:插入
update:更新
delete:删除数据
- DCL:数据控制语言,针对用户权限设置
grant:用户赋权
revoke:移除用户权限
- DQL:数据查询语言,对数据表的操作
select:查询
六、数据库操作命令
库操作命令
查看数据库
show databases;
查看所在数据库
select database();
查看当前登录用户
select user();
查看用户权限列表
show privileges[\G];
切换数据库
use databaseName[;]
创建数据库
create database databaseName [character set utf8];
删除数据库
drop database databaseName;
查看支持的字符集
SHOW CHARACTER SET;
表结构操作命令
查看数据表
show tables;
创建数据表
create table tableName(columnName(列名称) dataType(数据类型), ............);
删除数据表
drop table tableName;
alter命令用法
语法:
ALTER TABLE <表名> [修改选项]
常见用法
| ADD COLUMN <列名> <类型>
| CHANGE COLUMN <旧列名> <新列名> <新列类型>
| ALTER COLUMN <列名> { SET DEFAULT <默认值> | DROP DEFAULT }
| MODIFY COLUMN <列名> <类型>
| DROP COLUMN <列名>
| RENAME TO <新表名>
| CHARACTER SET <字符集名>
| COLLATE <校对规则名>
创建测试表
mysql> create table A(name varchar(255), schoool varchar(255));
Query OK, 0 rows affected (0.01 sec)
mysql> create table B(name varchar(255), schoool varchar(255)
);
Query OK, 0 rows affected (0.02 sec)
修改表名
#alter table tab_name rename to tab_new;
#修改表名
alter table stu_score rename to stuS;
修改字段默认值/是否为空/自动增长
#alter table tab_name modify field type not null/default ="未知"/auto_increment;
#自动增长
alter table stuS modify id int primary key;
alter table stuS modify id int auto_increment;
修改字段名/字段类型
#alter table tab_name change field newfield newtype;
#修改字段类型
alter table stuS modify id int;
#修改字段名及类型
alter table stuS change column object subject varchar(50);
#通过alter modify 修改字段是否为null或者默认值!
alter table stuS modify column name varchar(50) not null default "未知";

被折叠的 条评论
为什么被折叠?



