MYSQL学习笔记-(白夜黑羽)

SQL配置的前期工作

1、mysql在Linux上的安装

  1. 前提条件在centos的root用户下安装

  2. 由于centos的yum仓库源默认为mariaDB,所以需重新配置yum仓库源

    1. 检查centos的linux的版本:
    cat /etc/centos-release
    #CentOS Linux release 7.5.1804 (Core)显示为7.5版本
    
    1. 现在对应版本的yum仓库源安装包
    wget http://repo.mysql.com/mysql57-community-release-el7.rpm
    
    1. 利用rpm来安装yum仓库源
    rpm -ivh mysql57-community-release-el7.rpm
    
  3. 通过yum命令安装

yum install mysql-server

2、启动mysql服务

  1. 启动服务为
systemctl start mysqld

对应的查看服务为

systemctl status mysqld #显示为active,意为启动成功
  1. 设置开机自动运行MySQL服务
systemctl enable mysqld

3、获取root用户的初试密码

grep 'temporary password' /var/log/mysqld.log

4、初始化设置

mysql_secure_installation
  1. 更改新的root密码
  2. 匿名用户的配置
  3. test数据库的配置
  4. 是否远程连接访问

5、创建新的mysql用户并配置权限

  1. 进入mysql
mysql -uroot -p #(-u是用户,-p是用密码登录)
  1. 创建:
    创建新的用户为本地访问权限:
CREATE USER 'user1'@'localhost' IDENTIFIED BY 'Mima123\$';

创建新的用户为远程访问权限:

CREATE USER 'user1'@'%' IDENTIFIED BY 'Mima123$';
  1. 配置权限:
    全部权限:
GRANT ALL ON *.* TO 'user1'@'localhost';
GRANT ALL ON *.* TO 'user1'@'%';

部分权限:

GRANT SELECT  ON mydb.table1 TO 'user1'@'localhost';
GRANT SELECT  ON mydb.table1 TO 'user1'@'%';

关于权限的官方文档:官方文档权限

6、打开防火墙

firewall-cmd --zone=public --add-service=mysql --permanent
firewall-cmd  --reload

7、数据库管理工具HeidiSQL:

只能使用非root用户登录

mysql的使用(sql命令对大小写不区分,数据库内部命名对大小写区分)

1、数据库的相关命令

  1. 查看数据库列表:
show databases;
  1. 新建数据库:
CREATE DATABASE byhy CHARACTER SET utf8mb4  COLLATE utf8mb4_unicode_520_ci;
#(后面是指定数据库的编码格式为utf-8)
  1. 删除数据库:
DROP DATABASE byhy;
  1. 数据库改名:mysql不支持数据库直接改名(用rename会丢失数据)
  2. 使用数据库:use byhy;

2、数据表的相关命令:

  1. 查看数据表列表:
show tables;
  1. 新建数据表:

    CREATE TABLE user (
    id int NOT NULL AUTO_INCREMENT,
    username varchar(150)  NOT NULL,
    `password` varchar(128)  NOT NULL,
    realname varchar(30)  NOT NULL,
    PRIMARY KEY (id)
    ) ENGINE=InnoDB;
    

    数据类型:int bigint varchar char date datetime

  2. 查看创建表:

SHOW CREATE TABLE user\G;
  1. 删除表:
DROP TABLE user;
  1. 更改表的名字:
RENAME TABLE user TO by_user, medicine TO by_medicine;
rename table byhy.user2 to byhy1.user2;#(还可以兼移动)
  1. 修改表的结构:

    1. 添加列:
    ALTER TABLE user ADD `description` varchar(850) NOT NULL, ADD `qq` varchar(20) NOT NULL;
    
    1. 删除列:
    ALTER TABLE user DROP `description` , DROP `qq`;
    
    1. 修改列:
    ALTER TABLE user CHANGE  `realname` `realname1`  varchar(30) NOT NULL;
    

3、表内数据的相关命令:

  1. 插入表记录:

    INSERT INTO user (username,`password`,realname) VALUES ('byhy1','password1','baiyueheiyu1'),
    ('byhy2','password2','白月黑羽2'),
    ('byhy3','password3','白月黑羽');
    #前面列名为关键字的加``,后面实际字符串的加‘’,切记不要弄错
    

    前面列名为关键字的加``,后面实际字符串的加‘’,切记不要弄错

  2. 查询表记录:

    1. 基础查询功能:
    select * from user;
    select id,username  from user;
    select *  from user where username='byhy3';
    select *  from user where username like "byhy%33";#(以byhy开头,以33结尾)
    select * from user where username  in ("byhy1","byhy2");
    select *  from customer1 where id > 10 and level<15;
    select *  from customer1 where (id > 8 or level<15)
    
    1. 多重查询:
    SELECT 电话号码 FROM 学生表 WHERE 姓名 IN (SELECT 姓名 FROM 成绩表 WHERE 分数=100);
    
    1. 多表连接查询:
    SELECT 电话号码 FROM 学生表 INNER JOIN 成绩表 ON  学生表.姓名 = 成绩表.姓名 WHERE 成绩表.分数=100;
    #INNER JOIN 语句必须紧跟在 FROM 语句 后面,表示连接哪张表,连接条件是什么。)
    
    1. 结果去重:
    select distinct 课程  from 成绩表 where 分数=100;#(distinct去重)
    
    1. 查询结果排序:
    select *  from customer1 where id > 10 order by coin asc;
    #asc升序(缺省),desc降序
    select *  from customer1 where id > 10 order by coin, level;
    #多重排序
    
    1. 查询结果分页:
    select * from 学生表 limit 5 offset 1;
    #limit 后面的数值 指定最多显示多少条记录, offset 后面的数值 指定了当前显示第几页,第1页是0,第2页是1…
    
    1. 记录数量、平均值、最大值、最小值:
    select sum(分数) from 成绩表;#sum
    select avg(分数) from 成绩表;#avg
    select max(分数) from 成绩表;#max
    select min(分数) from 成绩表;#min
    
  3. 修改表记录:

update customer1 set coin=100 where username='cus16';
update customer1 set coin=100,level=30 where username='cus16';
  1. 删除表记录:
delete from customer1  where username='cus16';

程序访问数据库服务

1、使用第三方库来操作数据库

mysqlclient 和 PyMySQL

pip install mysqlclient==1.3.12

2、读取数据库内容:

import MySQLdb# 创建一个 Connection 对象,代表了一个数据库连接
connection = MySQLdb.connect(host="192.168.0.100",# 数据库IP地址  user="username",     #  mysql用户名passwd="xxxxx",      # mysql用户登录密码db="dbname" ,        # 数据库名# 如果数据库里面的文本是utf8编码的,#charset指定是utf8charset = "utf8")   # 返回一个 Cursor对象
c = connection.cursor()# 执行一个获取 users 表中所有记录的 sql 语句
c.execute("""SELECT * FROM users """)# rowcount属性记录了最近一次 execute 方法获取的数据行数
numrows = c.rowcountfor x in range(numrows):# fetchone 方法返回的是一个元组,# 代表获取的一行记录,元组里面每个元素代表一个字段row = c.fetchone()print(row)
#rows = c.fetchmany(2)
#rows = c.fetchall()

3、插入数据到数据库表:

#  插入一行数据到 user 表中
c.execute(f"""INSERT INTO users ( name, nickname, phone) VALUES ('baiyueheiyu', '白月黑羽', '13312345678')""")# 注意 一定要commit,否则添加数据不生效
connection.commit()
connection.close()

索引和外键

1、创建索引:

CREATE INDEX index_username ON customer2 (username);
CREATE UNIQUE INDEX username ON customer4(username);#(唯一索引不允许重复)

2、主键索引:

聚类索引 clustered index
主键PRIMARY KEY 和 唯一索引 UNIQUE KEY的区别如下:

  1. 一个表最多只能有一个PRIMARY KEY约束,但它可以包含任意数量的UNIQUE KEY约束。
  2. 属于PRIMARY KEY的列必须定义为NOT NULL。 对于属于UNIQUE KEY约束的列,这不是必需的。
  3. 另一个细微差别是 唯一索引 和 普通索引 可以自定义名字, 而主键只能用PRIMARY KEY作为名字。

3、多重索引:

PRIMARY KEY  (id,username);

4、外键:

FOREIGN KEY (user_id)
REFERENCES user(id)
ON UPDATE CASCADE
ON DELETE RESTRICT
#update为关联更新,restrict为严令禁止

5、删除索引:

drop index index_name on table_name ;
alter table table_name drop index index_name ;
alter table table_name drop primary key ;

事务

  1. 创建一个事务
START TRANSACTION;
  1. 更新book 表
update book set status=1 where id=888;
  1. 更新 borrow表
insert into borrow  (user_id,book_id) VALUES (666,888);
  1. 提交事务
COMMIT;
  1. 或者回滚事务
ROLLBACK;

MYSQL学习笔记-(白夜黑羽)相关推荐

  1. Mysql 学习笔记(快速复习)

    Mysql 学习笔记(快速复习) 一.MySQL 基础 1.数据库连接工具 1.1.Navicat 使用教程 2.DDL 操作数据库 2.1.创建新数据库 2.2.删除数据库 2.3.使用数据库 3. ...

  2. 【mysql学习笔记整理】

    /*mysql学习笔记整理*/ /*常用的数据库操作对象*/ #库的操作 #创建 #数据库的创建 USE mysql; CREATE DATABASE db_x; #删除 #删除数据库 DROP DA ...

  3. 初识mysql学习笔记

    使用VMVirtualBox导入Ubuntu后,可以通过sudo apt-get install mysql-server命令下载mysql. 在学习过程中,我遇到了连接不上Xshell的问题.最终在 ...

  4. MySQL学习笔记07【事务、用户管理和权限管理】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  5. MySQL学习笔记06【多表查询、子查询、多表查询练习】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  6. MySQL学习笔记05【多表操作、三大范式、数据库的备份和还原】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  7. MySQL学习笔记04【数据库的查询操作、今日内容、表的约束】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  8. MySQL学习笔记03【数据库表的CRUD操作、数据库表中记录的基本操作、客户端图形化界面工具SQLyog】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  9. MySQL学习笔记02【SQL基本概念与通用语法、数据库的CRUD操作】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

最新文章

  1. ZOJ 1025 Wooden Sticks(快排+贪心)
  2. 在同一台电脑上同时安装Python2和Python3
  3. 计算机在线声音,电脑怎么在线录音
  4. 2016-05-29 for循环几种应用
  5. linux双机热备 oracle,oracle for linux双机热备实战
  6. 智能音箱 之 音频通路质量--测试与参数
  7. hdfoo站点开发笔记
  8. 跨性别,你所不知道的事
  9. 命令行下Apache日志统计举例
  10. 二次元HTML导航页网站源码
  11. MySQL在windows的my-default.ini配置
  12. Linux 2.6.39.1 Hello world 驱动总结
  13. python 路径拼接字符串_anaconda环境变量添加 python笔记
  14. 2021年Web前端开发的趋势有哪些
  15. 知了课堂Day2——微信小程序基础02——wxss
  16. c语言中math的作用,C语言常用的math函数
  17. 前端面试题之 对Promise的理解
  18. Google Dremel 理解
  19. 解决:pandas.errors.ParserError: Error tokenizing data. C error: Expected 2 fields in line 18, saw 4
  20. 【C++】单例模式(懒汉、饿汉)

热门文章

  1. 电影《想见你》观后感
  2. Java运算符-逻辑运算符
  3. 编曲混音必备法宝——FL三大效果器简介
  4. 光通信综合测试仪国产品牌里推荐哪个?
  5. SimpleMind安装步骤
  6. 激情个P—leo看赢在中国第三季(2)
  7. 时间管理软件 压力测试软件JMeter 微信小程序可视化代码生成 黑客网站
  8. Xilinx与Altera的FPGA区别
  9. (五十三) Android O wifi 状态机消息处理及状态切换流程分析-以WifiController为例
  10. 王国栋青岛大学计算机学院,王国栋