MySQL数据库基础学习

一、概述

数据库概念

数据库(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 "未知";

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值