• MySQL基础


    数据的存储

    单程序的数据存储在文件中(独有)
    但程序程序(共有)

    数据库MySql

    MySQL:是用于管理文件的软件

    服务端软件

    • socket服务端
    • 本地文件操作
    • SQL语句解析

    客户端软件

    • socket客户端
    • 发送命令
    • SQL语句解析

    技能

    • 安装客户端 服务端

    • 连接

    • 学习SQL语句

    • 其他类似软件:
      关系型数据库:sqllite,db2,oracle,access,sql server MySQL
      非关系型数据库:MongoDB,redis

    MySql安装

    Windows版本

    下载地址

    • 安装版本就是一路next

    • 解压版的安装方式

      • 初始化 找到bin文件下的mysqld

        • 服务端 E:mysql-5.7.16-winx64mysql-5.7.16-winx64inmysqld --initialize-insecure
        • 用户名默认是 root 面默认为空
      • 启动服务端

        • E:mysql-5.7.16-winx64mysql-5.7.16-winx64inmysqld
      • 客户端连接

        • E:mysql-5.7.16-winx64mysql-5.7.16-winx64inmysqld -u root -p
      • 通过设置环境变量的方式

        • 添加环境变量 E:mysql-5.7.16-winx64mysql-5.7.16-winx64inmysqld
      • windows服务

        • 制作Windows服务 E:mysql-5.7.16-winx64mysql-5.7.16-winx64inmysqld --install
        • 可以用 net start mysql启动服务 net stop mysql停止服务
    linux -cenos7

    CentOS 7的yum源中没有正常安装mysql时的mysql-sever文件,需要去官网上下载

    # wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
    # rpm -ivh mysql-community-release-el7-5.noarch.rpm
    # yum install mysql-community-server
    

    成功安装之后重启mysql服务
    service mysqld restart
    初次安装mysql是root账户是没有密码的
    设置密码的方法
    mysql -u root
    mysql> set password for ‘root’@‘localhost’ = password('mypasswd');
    mysql> exit

    MySQL连接

    数据库的格式是:
    • (文件夹)数据库
      • (文件)表
        • (行)数据行
        • 数据行
    数据库的连接

    默认的是 mysql -u root -p

    查看数据库:show databases;  # 最后是s 代表多个  分号结尾
    创建数据库: create database db1; #没有s db1是数据库的名字
    进入数据库:use db1;
    查看数据库中的表: show tables;
    查看所有的表:select * from 表名字; # 查看表中的内容
    查看所有的用户:用户存在在mysql的user表中,select user,host from user;查看
    +------+-----------+
    | user | host      |
    +------+-----------+
    | abc  | %         |
    | root | 127.0.0.1 |
    | root | ::1       |
    |      | haha      |
    | root | haha      |
    |      | localhost |
    | root | localhost |
    +------+-----------+
    
    创建用户
    创建一个用户,用户名是aaa,密码是123  ,只能是192.168.1.0登录
         create user 'aaa'@'192.168.1.0' identified by '123';
    创建一个用户,用户名是bbb,密码是123  ,只能是192.168.1.% 在这个范围内登录
    	create user 'bbb'@'192.168.1.%' identified by '123';
    任意IP都能登录
    create user 'ccc'@'%' identified by '123';
    最后查看所有的用户:
    mysql> select user,host from user;
    +------+-------------+
    | user | host        |
    +------+-------------+
    | abc  | %           |
    | root | 127.0.0.1   |
    | bbb  | 192.168.1.% |
    | aaa  | 192.168.1.0 |
    | root | ::1         |
    |      | haha        |
    | root | haha        |
    |      | localhost   |
    | root | localhost   |
    +------+-------------+
    

    在操作Linux登录mysql的时候,用户用空的密码也可以登录。通过查找是是因为mysql 系统表(mysql.user)里默认有几条空用户与空密码的数据,所以导致以上的问题,使用如下命令,把空用户的数据行删除掉即可;

    mysql> select * from mysql.user; 
    mysql> delete from mysql.user where user = "";
    mysql> flush privileges;
    

    http://63638790.blog.51cto.com/513514/1556935

    授权
    部分授权
    grant select,insert,update  on db1.t1 to 'abc'@'%';
    全部授权
    grant all privileges on db1.t1 to 'abc'@'%';
    取消授权
    mysql> revoke all privileges on db1.t1 from 'abc'@'%';  
    

    显示用户自己的权限: show grants;

    mysql> show grants;
    +---------------------------------------------------------------------+
    | Grants for root@localhost                                           |
    +---------------------------------------------------------------------+
    | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
    | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
    +---------------------------------------------------------------------+
    

    注意:授权的时候是 TO 取消授权的是From

    配置远程连接的权限:grant all privileges on *.* to 'root'@'%' with grant option;

    取消用户的所有权限:revoke all privileges on *.* from 'root'@'%';

    普通用户在设置数据库的具体权限的时候可以直接用grant all privileges on db1.* to 'hzx'@'%';
    但是在取消权限的时候需要revoke all privileges on db1.* from 'hzx'@'%'; 注意数据库的部分用反引号

    mysql> show grants;
    +------------------------------------------------------------+
    | Grants for hzx@%                                           |
    +------------------------------------------------------------+
    | GRANT ALL PRIVILEGES ON *.* TO 'hzx'@'%' WITH GRANT OPTION |
    | GRANT ALL PRIVILEGES ON `db1`.* TO 'hzx'@'%'               |
    +------------------------------------------------------------+
    2 rows in set (0.00 sec)
    
    mysql> revoke all privileges on 'db1'.* from 'hzx'@'%';
    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 ''db1'
    .* from 'hzx'@'%'' at line 1
    
    mysql> revoke all privileges on `db1`.* from 'hzx'@'%';
    Query OK, 0 rows affected (0.01 sec)
    
    mysql>
    

    http://www.cnblogs.com/zhangqunshi/p/6942051.html
    http://www.cnblogs.com/wupeiqi/articles/5713315.html
    http://blog.csdn.net/andy_yf/article/details/7487519

    SQL语句规则

    操作文件夹(数据库)

    • 查看所有的数据库 show databases;
    • 创建数据库 create database db1;
    • 设置数据库的编码 create database db1 default charset utf8; # 这里没有等号
    • 删除数据库 drop database db1;

    操作文件(表)

    注意在创建表的时候,首先要选择具体的数据库

    • 查看所有的表 showtables;
    • 创建表 create table t1(id int ,name char(10));
    • 创建表的时候设置字符编码 create table t1(id int ,name char(10)) engine=innodb default chatset=utf8; # 注意这里有等号,Innode是事务操作,支持自动的回滚(主要用在转账操作,一方转账失败,自动回滚)
      - innodb 支持事务,原子性操作
      - myisam myisam
    create table t1(
    			id int not null auto_increment primary key,
    			name char(10)
    		)engine=innodb default charset=utf8;
    

    auto_increment 表示自增
    primary key;# 主键 表示约束,不能重复切不能为空

    以后通常的设置

    create table t2( 
    id int not null  auto_increment primary key,
    name char(10))engine=innodb default charset=utf8;
    
    • 清空表
      delete from t1;#这种删除不会删除索引 插入内容从原来的索引位置
      truncate table t1;# 会删除索引
      alter table class auto_increment = 1 # 重新设置表的自增值为1

    • 删除表 drop table t1;

    数据类型
    • 数字

      • tinyint
      • int
      • bigint
      • FLOAT
      • DOUBLE
      • decimal 可以定制精确的小数
        decimal(a,b);a是数据的总长度 b是小数位数
    • 字符串

      • char(10) 定义了10个就会占用10个,空的用空格补齐,速度快

      • varhar(10) 可变长度 节省空间
        ** ps: 数据库优化,创建表的时候吧定长的房前面 不定长的放后面**

      • text 存放大的数据

      • 更大的数据就是文件,存放在文件服务器中,db中存放路径

    • 时间类型 DATATIME

    • 枚举

    • set

    操作文件中的内容(表的内容)

    • 插入数据 insert into t1(id,name) values(1,'aaa');
    • 删除 delete from t1 where id<6
    • 修改
      update t1 set age=18;
      update t1 set age=18 where age=17;
    • 查看 select * from t1;

    外键

    要先创建没有外键的表,然后再创建与外键有关联的表

    先操作用户表,然后操作部门表

    外键的数据类型要一样

    # 班级表class
    create table class(
    	cid int auto_increment primary key,
    	caption varchar(12)
    )engine=innodb default charset=utf8;
    
    
    # 老师表
    create table teacher(
    	tid int auto_increment primary key,
    	caption varchar(12)
    )engine=innodb default charset=utf8;
    
    # 学生表 有外键
    create table student(
    			sid bigint auto_increment primary key,
    			sname varchar(10),
    			-- gneder enum('男','女') not null,
    			gneder varchar(20),
    			class_id int,
    			constraint fk_stuendt_key foreign key (class_id) references class(cid)
    )engine=innodb default charset=utf8;
    		
    # 课程表 有外键
    create table course(
    	cid int auto_increment primary key,
    	cname varchar(20),
    	teacher_id int,
    	constraint  fk_course_key foreign key (teacher_id) references teacher(tid)
    )engine=innodb default charset=utf8;
    
    
    # 成绩表 有外键
    
    create table score(
    	sid int auto_increment primary key,
    	student_id bigint,
    	course_id int,
    	score_number int,
    	constraint fk_stu_key foreign key (student_id) references student(sid),
    	constraint fk_score_key foreign key (course_id) references course(cid)
    )engine=innodb default charset=utf8;
    
    
    

    主键
    一个表只有一个主键,可以关联多个列

    外键
    外键可以有多个

    CREATE TABLE t1(
    	
    	pid int NOT NULL auto_increment ,
    	nid int NOT NULL auto_increment ,
    	PRIMARY KEY(pid,nid)
    )ENGINE=INNODB DELETE CHARSET=utf8;
    
    
    
    create table t2(
    	sid int auto_increment primary key,
    	id1 int,
    	id2 int,
    	constraint fk_key foreign key (id1,id2) references t1(pid,nid),
    )engine=innodb default charset=utf8;
    
    

    对于自增可以修改

    show create table t1 ;#横屏显示
    show create table t1 G; # 旋转90度
    alter table t1 auto_increment=2; # 修改这个值可以改变自增的值

  • 相关阅读:
    Web端导出CSV
    dojo/dom-style样式操作学习笔记
    dojo/dom源码学习
    上层建筑——DOM元素的特性与属性(dojo/dom-prop)
    上层建筑——DOM元素的特性与属性(dojo/dom-attr)
    返本求源——DOM元素的特性与属性
    DOM扩展札记
    以代码爱好者角度来看AMD与CMD
    dojo事件驱动编程之事件绑定
    通过Web.config中的configSections配置自己系统的全局常量
  • 原文地址:https://www.cnblogs.com/Python666/p/6946789.html
Copyright © 2020-2023  润新知