MySql基本操作

一、数据库相关介绍

 数据库(database)是用来组织、存储和管理数据的仓库

数据库管理系统(DBMS):是实现对数据有效组织,管理和存取的系统软件。

数据的建立和维护功能,数据定义功能,数据操纵功能,数据库的运行管理功能,通信功能 

数据库系统是一个人机系统,由硬件,os,数据库,DBMS ,应用软件和数据库用户组成。

用户可以通过DBMS 或则 应用程序来操作数据库 。

数据库主要分两大类:  关系型数据库 SQL      非关系型数据库 NoSQL

关系型数据库:

关系数据库的存储结构是二维表格 ,表是有行和列。行称为记录,是用来描述一个对象的信息。列称为字段,是用来描述对象的一个属性
存储结构:二维表格  

存储的数据:结构化数据    

使用场景:存储业务数据、账户信息等
对象: 库 ->  表 -> 二维表格形式的结构化数据     行(记录):用来描述一个对象的信息
                                                                               列(字段):用来描述对象的一个属性

关系性数据库常见的有:MYSQL ,Oracle,SQL-Server,MariaDB, postgreSQL 

  非关系型数据库:

非关系型数据库(NoSQL)  存储结构:非二维表格结构,不同类型的NoSQL采用不同的存储结构,比如 键值对、文档、索引、时间序列 等
缓存型   Redis   Memcached
文档型   MongoDB
索引型   Elasticsearch
时序型   Prometheus   InfluxDB
列式型   HBase

二、关系数据库的常用操作

1、安装mysql

将安装mysql 所需软件包传到/opt目录下
mysql-5.7.17.tar.gz
boost_1_59_0.tar.gz		

 
确认安装 gcc 、 gcc-c++ 、make、cmake 
ncurses-devel、(字符终端屏幕控制基本库)
bison、(语法分析器)
libaio-devel (支持同步I/O)的软件包
yum -y install gcc gcc-c++ make ncurses ncurses-devel bison cmake libaio-devel
yum install autoconf -y     ####安装5.6版本是需要安装autoconf库
 
---------------添 加mysql用户并加入到mysql组----------------
 
useradd  -s /sbin/nologin mysql
mkdir -p /usr/local/mysql
 
tar zxvf mysql-5.5.24.tar.gz -C /opt/
 
cd   mysql-5.5.24
 
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
 -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_DATADIR=/home/mysql \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306                               
 
指定安装路径
指定家目录  sock 数据库连接文件
指定字符集
指定字符编码
扩展性的字符集 支持其他的字符集
开启各种功能的存储引擎机
存储引擎机
存储引擎机
支持readline程序平台 读取数据按行读取,一行是一个对象
本地写入文件,方便导入导出
数据库的家目录  数据库存放的路径
指定管理用户和端口号
 
make -j 2 && make install  
 
------如果报错,清空缓存文件-如果正常可忽略-------
find -name CMakeCache.txt
rm -f ./CMakeCache.txt                          
---------------------------------
 
chown -R mysql:mysql /usr/local/mysql     
 
 
 
export PATH=$PATH:/usr/local/mysql/bin/   \*开机时刷新*\          
 
或者可选择vi /etc/profile 在最后一行加入后 运行source /etc/profile 
 
cp support-files/my-medium.cnf /etc/my.cnf                  
或
cp support-files/my-default.cnf /etc/my.cnf
 
cp support-files/mysql.server /etc/init.d/mysqld              
 
chmod 755 /etc/init.d/mysqld                             
chkconfig --add /etc/init.d/mysqld                      
chkconfig mysqld --level 35 on                                  
 
--------------初始化数据库------------------------------------------------
/usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--ldata=/var/lib/mysql \
--basedir=/usr/local/mysql \
--datadir=/home/mysql
 
ln -s /var/lib/mysql/mysql.sock /home/mysql/mysql.sock           /*直接建立软连接*/
 
vi /etc/init.d/mysqld      #####46行和47行添加
basedir=/usr/local/mysql
datadir=/home/mysql
 
service mysqld start
netstat -tnl 3306
mysql    #####初始登录mysql
grant all privileges on *.* to 'root'@'%' identified by 'abc123';    ### ##授予root用户可以在所有终端远程登录,使用的密码是abc123,并对所有数据库和所有表有操作权限。
 
 
#数据库密码设置
mysqladmin -u root password "abc123"
---------------------------------------------------------------
mysql -u root  -p  
abc123
mysql>show databases;

2、SQL语句  关系型数据库专用的操作管理语句 

用于管理数据对象(库、表、索引 等)

1、创建及删除数据库和表

查看当前的 MySQL 版本信息及连接用户名

SELECT VERSION();
SELECT USER();

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.44    |
+-----------+
1 row in set (0.00 sec)

mysql> select user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.01 sec)

查看当前服务器中的数据库

SHOW DATABASES;                        #大小写不区分,分号“;”表示结束

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

 MySQL会附带4个系统数据库:
information_schema:主要存储系统中的一些数据库对象信息,如数据库名,数据库的表,表栏的数据类型与访问权限等
performance_schema:主要存储数据库服务器性能参数信息
mysql:主要存储系统的用户权限信息
sys:MySQL5.7之后引入的一个新的 sys 数据库,sys 库里面的表、视图、函数以及存储过程可以让用户快速了解MySQL的一些信息,它的数据来源于performance_schema

查看数据库中表信息

USE 数据库名;            //先切换到数据库
SHOW TABLES;         //再查看表

mysql> use mysql;
Database 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> show tables from mysql;  #效果同上

查看表的结构

USE 数据库名;
DESCRIBE [数据库名.]表名;
可缩写成:DESC 表名;

创建新的数据库

CREATE DATABASE 数据库名;

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> create database student_information;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| mysql               |
| performance_schema  |
| student_information |
| sys                 |
+---------------------+
5 rows in set (0.00 sec)

创建新的表

CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型[,...][,PRIMARY KEY (主键名)]);
#主键一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键。

mysql> create table aaa(id int, name varchar(20), sex varchar(2), age int, primary key(id));
Query OK, 0 rows affected (0.01 sec)

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

mysql> desc aaa;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
| sex   | varchar(2)  | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.02 sec)

2、管理表中的数据记录

删除指定的数据表

DROP TABLE [数据库名.]表名;                #如不用USE进入库中,则需加上数据库名

删除指定的数据库

DROP DATABASE 数据库名;

向数据表中插入新的数据记录

INSERT INTO 表名(字段1,字段2[,...]) VALUES(字段1的值,字段2的值,...);

mysql> select * from aaa;
Empty set (0.00 sec)

mysql> insert into student_information.aaa(id, name, sex, age) values(1, 'zhangsan', '男', 28);
Query OK, 1 row affected (0.00 sec)

mysql> select * from aaa;
+----+----------+------+------+
| id | name     | sex  | age  |
+----+----------+------+------+
|  1 | zhangsan | 男   |   28 |
+----+----------+------+------+
1 row in set (0.00 sec)

mysql> 

查询语句

SELECT 字段名1,字段名2[,...] FROM 表名 [WHERE 条件表达式];

mysql> select * from aaa;
+----+----------+------+------+
| id | name     | sex  | age  |
+----+----------+------+------+
|  1 | zhangsan | 男   |   28 |
|  2 | 王五     | 男   |   29 |
|  3 | 李四     | 男   |   29 |
|  4 | a        | 女   |   19 |
|  5 | b        | 女   |   18 |
+----+----------+------+------+
5 rows in set (0.00 sec)

mysql> select * from aaa where sex='女';
+----+------+------+------+
| id | name | sex  | age  |
+----+------+------+------+
|  4 | a    | 女   |   19 |
|  5 | b    | 女   |   18 |
+----+------+------+------+
2 rows in set (0.00 sec)

mysql> select * from aaa where id=4;
+----+------+------+------+
| id | name | sex  | age  |
+----+------+------+------+
|  4 | a    | 女   |   19 |
+----+------+------+------+
1 row in set (0.00 sec)

mysql> select * from aaa where id>2 and id <=5;
+----+--------+------+------+
| id | name   | sex  | age  |
+----+--------+------+------+
|  3 | 李四   | 男   |   29 |
|  4 | a      | 女   |   19 |
|  5 | b      | 女   |   18 |
+----+--------+------+------+
3 rows in set (0.00 sec)

横向按行显示数据 

mysql> select * from aaa limit 1,3;  //查询从第一行后一行开始的三行内容,即2~4行
+----+--------+------+------+
| id | name   | sex  | age  |
+----+--------+------+------+
|  2 | 王五   | 男   |   29 |
|  3 | 李四   | 男   |   29 |
|  4 | a      | 女   |   19 |
+----+--------+------+------+
3 rows in set (0.00 sec)

纵向按列显示数据

mysql> select * from aaa limit 1,3\G;
*************************** 1. row ***************************
  id: 2
name: 王五
 sex: 男
 age: 29
*************************** 2. row ***************************
  id: 3
name: 李四
 sex: 男
 age: 29
*************************** 3. row ***************************
  id: 4
name: a
 sex: 女
 age: 19
3 rows in set (0.00 sec)


修改、更新数据表中的数据记录

UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] [WHERE 条件表达式];

mysql> select * from aaa;
+----+----------+------+------+
| id | name     | sex  | age  |
+----+----------+------+------+
|  1 | zhangsan | 男   |   28 |
|  2 | 王五     | 男   |   29 |
|  3 | 李四     | 男   |   29 |
|  4 | a        | 女   |   19 |
|  5 | b        | 女   |   18 |
+----+----------+------+------+
5 rows in set (0.00 sec)

mysql> update aaa set sex='女' where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from aaa;
+----+----------+------+------+
| id | name     | sex  | age  |
+----+----------+------+------+
|  1 | zhangsan | 女   |   28 |
|  2 | 王五     | 男   |   29 |
|  3 | 李四     | 男   |   29 |
|  4 | a        | 女   |   19 |
|  5 | b        | 女   |   18 |
+----+----------+------+------+
5 rows in set (0.00 sec)

在数据表中删除指定的数据记录

DELETE FROM 表名 [WHERE 条件表达式];

mysql> select * from aaa;
+----+----------+------+------+
| id | name     | sex  | age  |
+----+----------+------+------+
|  1 | zhangsan | 女   |   28 |
|  2 | 王五     | 男   |   29 |
|  3 | 李四     | 男   |   29 |
|  4 | a        | 女   |   19 |
|  5 | b        | 女   |   18 |
+----+----------+------+------+
5 rows in set (0.00 sec)

mysql> delete from aaa where id=2;
Query OK, 1 row affected (0.00 sec)

mysql> select * from aaa;
+----+----------+------+------+
| id | name     | sex  | age  |
+----+----------+------+------+
|  1 | zhangsan | 女   |   28 |
|  3 | 李四     | 男   |   29 |
|  4 | a        | 女   |   19 |
|  5 | b        | 女   |   18 |
+----+----------+------+------+
4 rows in set (0.00 sec)

3、修改表名和表结构

修改表名
ALTER TABLE 旧表名 RENAME 新表名;

mysql> alter table aaa rename bbb;
Query OK, 0 rows affected (0.01 sec)

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

扩展表结构(增加字段)

ALTER TABLE 表名 ADD address varchar(50) default '地址不详';
#default '地址不详':表示此字段设置默认值 地址不详;可与 NOT NULL 配合使用

mysql> alter table bbb add class varchar(20) default '三班';
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc bbb;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
| sex   | varchar(2)  | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
| class | varchar(20) | YES  |     | 三班    |       |
+-------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

mysql> select * from bbb;
+----+----------+------+------+--------+
| id | name     | sex  | age  | class  |
+----+----------+------+------+--------+
|  1 | zhangsan | 女   |   28 | 三班   |
|  3 | 李四     | 男   |   29 | 三班   |
|  4 | a        | 女   |   19 | 三班   |
|  5 | b        | 女   |   18 | 三班   |
+----+----------+------+------+--------+
4 rows in set (0.00 sec)

修改字段(列)名,添加唯一键

ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型 [unique key];

mysql> alter table bbb change class stu_class varchar(20) unique key;
ERROR 1062 (23000): Duplicate entry '三班' for key 'stu_class'
mysql> alter table bbb change id b_id varchar(20) unique key;
Query OK, 4 rows affected (0.02 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from bbb;
+------+----------+------+------+--------+
| b_id | name     | sex  | age  | class  |
+------+----------+------+------+--------+
| 1    | zhangsan | 女   |   28 | 三班   |
| 3    | 李四     | 男   |   29 | 三班   |
| 4    | a        | 女   |   19 | 三班   |
| 5    | b        | 女   |   18 | 三班   |
+------+----------+------+------+--------+
4 rows in set (0.00 sec)

删除字段

ALTER TABLE 表名 DROP 字段名;

mysql> select * from bbb;
+------+----------+------+------+--------+
| b_id | name     | sex  | age  | class  |
+------+----------+------+------+--------+
| 1    | zhangsan | 女   |   28 | 三班   |
| 3    | 李四     | 男   |   29 | 三班   |
| 4    | a        | 女   |   19 | 三班   |
| 5    | b        | 女   |   18 | 三班   |
+------+----------+------+------+--------+
4 rows in set (0.00 sec)

mysql> alter table bbb drop class;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> select * from bbb;
+------+----------+------+------+
| b_id | name     | sex  | age  |
+------+----------+------+------+
| 1    | zhangsan | 女   |   28 |
| 3    | 李四     | 男   |   29 |
| 4    | a        | 女   |   19 |
| 5    | b        | 女   |   18 |
+------+----------+------+------+
4 rows in set (0.00 sec)

给表中添加主键(一个表中只有一个主键)

mysql> desc ccc;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
| sex   | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> alter table ccc add primary key(id);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc ccc;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
| sex   | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

删除主键

mysql> alter table ccc drop primary key;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

使用MySQL的六大约束属性

主键约束    primary key     字段的值不能重复,且不能为NULL,一个表只能有一个主键
唯一键约束  unique key      字段的值不能重复,但可以为NULL,一个表可以有多个唯一键
非空约束    not null        字段的值不能为NULL
默认值约束  default 'XXX'   字段的值如果没有设置值则使用默认值自动填充
自增约束    auto_increment  字段的值如果没有设置值会默认从开始每行自动递增 1 ,要求设置自增的字段必须为主键字段
外键约束    foreign key     用来保证外键表和主键表相关联数据的完整性和一致性

mysql> create table ddd(id int primary key auto_increment, name varchar(20) not null, sex char(2), age int);
Query OK, 0 rows affected (0.01 sec)

mysql> desc ddd
    -> desc ddd;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'desc ddd' at line 2
mysql> desc ddd;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | NO   |     | NULL    |                |
| sex   | char(2)     | YES  |     | NULL    |                |
| age   | int(11)     | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

  • 37
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值