zoukankan      html  css  js  c++  java
  • mysql介绍

    数据库中几个重要的概念:

    • 数据: 描述事物特征的符号
    • 记录: 事物一系列典型的特征
    • 表: 就相当于一个文件
    • 库: 相当于一个文件夹
    • 常用的数据库管理软件(DBMS): MySQL, Oracle, SqlServer, DB2

    MySQL介绍

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle旗下。MySQL是当前最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System, 关系型数据库管理系统)应用软件之一。

    MySQL是什么?

    MySQL是一个基于socket编写的C/S架构的软件
    
    # MySQL中自带的数据库
    information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等。
    performance_schema: MySQL5.5开始新增的一个数据库,主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种时间、锁等现象。
    mysql: 授权库,主要存储系统用户的权限信息。
    test: MySQL数据库系统自动创建的测试数据库。
    

    下载安装

    Linux版本

    # 二进制rpm包安装
    yum -y install mysql-server mysql
    源码安装方式: http://www.cnblogs.com/linhaifeng/articles/7126847.html
    
    # Centos中也可以使用下面方式安装
    yum -y install mariadb-server mariadb 
    

    Windows版本

    # 1. 下载: MySQL Community Server
    http://dev.mysql.com/downloads/mysql/
    
    # 2. 解压
    解压到你想要安装的指定目录下。
    
    # 3. 添加环境变量
    将MySQL解压后的bin目录添加到环境变量中。
    
    # 4. 添加到windows系统服务
    mysqld --install  # 解除服务 mysqld --remove
    
    # 修改密码
    mysqladmin -uroot -p '旧密码' '新密码'
    
    # 破解密码
    0. 关闭mysql
    1. mysqld --skip-grant-tables(需要管理员权限)
    2. mysql (这样进去用户是ODBC, 通过**select user();**查看)
    3. mysql -uroot -p (这样进去用户是root)
    4. update mysql.user set password=password("新密码") where user="root" and host="localhost";
    5. flush privileges;
    

    统一字符编码

    # 1. 修改配置文件(my.ini)。linux下默认在/etc/my.cnf
    [mysqld]
    default-character-set=utf8
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    
    ## mysql5.5以上,使用下述方式
    [mysqld] 
    character-set-server=utf8
    collation-server=utf8_general_ci
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    
    # 2. 重启mysql
    # 3. 查看编码信息
    s;
    or 
    show variables like '%char%';
    

    SQL语句

    SQL语言主要用于存储数据、查询数据

    # 1. DDL语言 数据库定义语言; 数据库、表、视图、索引、存储过程等。如CREATE、DROP、ALTER
    # 2. DML语言 数据库操纵语言; INSERT、DELETE、UPDATE、SELECT。
    # 3. DCL语言 数据库控制语言; 如控制用户的访问权限GRANT、REVOTE。
    

    库操作

    # 1. 创建数据库
    create database 数据库名 charset utf8;
    
    # 2. 命名规则
    - 由字母、数字、下划线、@、#、$组成
    - 区分大小写
    - 唯一性
    - 不能使用关键字
    - 不能单独使用数字
    - 最长128位
    
    # 3. 常用操作
    增
    create database 数据库名 charset utf8;
    
    查
    show create database 数据库名;
    show database;
    
    改
    alter database 数据库名 charset gbk;
    
    删
    drop database 数据库名;
    
    切换数据库
    use 数据库名;
    

    表操作

    # 查看当前所在数据库
    select database();
    
    # 增
    create table 表名(
    	id int primary key not null auto_increment,
    	name varchar(20);
    );
    
    # 查
    show create table 表名;
    show tables;
    desc 表名;
    
    # 改
    修改表名
    alter table 表名 rename 新表名;
    
    增加字段
    alter table 表名 add 字段名 数据类型[完整性约束条件...]
    alter table 表名 add 字段名 数据类型[完整性约束条件...] first;
    alter table 表名 add 字段名 数据类型[完整性约束条件...] after 字段名;
    
    
    修改字段
    alter table 表名 modify name char(22);
    alter table 表名 change name username varchar(20);
    
    修改存储引擎
    alter table 表名 engine=innodb; 
    
    删除字段
    alter table 表名 drop 字段名;
    
    # 删
    drop table 表名;
    

    记录操作

    MariaDB [(none)]> create database db1 charset utf8;
    Query OK, 1 row affected (0.031 sec)
    
    MariaDB [(none)]> use db1;
    Database changed
    
    MariaDB [db1]> create table t1(
        -> id int,
        -> name varchar(50),
        -> sex enum("male", "female"),
        -> age int(3)
        -> );
    Query OK, 0 rows affected (0.056 sec)
    
    MariaDB [db1]> desc t1;
    +-------+-----------------------+------+-----+---------+-------+
    | Field | Type                  | Null | Key | Default | Extra |
    +-------+-----------------------+------+-----+---------+-------+
    | id    | int(11)               | YES  |     | NULL    |       |
    | name  | varchar(50)           | YES  |     | NULL    |       |
    | sex   | enum('male','female') | YES  |     | NULL    |       |
    | age   | int(3)                | YES  |     | NULL    |       |
    +-------+-----------------------+------+-----+---------+-------+
    4 rows in set (0.033 sec)
    
    # 增
    insert 表名(id, name) values(1, "Python"), (2, 'JAVA');
    insert into 表名(id, name) values(1, "Python"), (2, 'JAVA');
    
    # 查
    select * from 表名;
    select id, name from 表名;
    
    # 改
    update 表名 set name="Golang";
    update 表名 set name="Golang" where id=1;
    
    # 删
    delete from 表名;(这样会清空整张表,但是不建议这么做,因为不会将自增长的id从头开始。清空表应该使用truncate 表名)
    delete from 表名 where id=1;
    

    存储引擎

    存储引擎就是表的类型。

    查看数据库支持的引擎
    show engines;
    
    
    指定表类型/存储引擎
    create table 表名(id int, name varchar(20)) engine=innodb;
    

    复制表

    只复制表结构
    create table 新表名 select * from 旧表名 where 1=2;
    or 
    create table 新表名 like 旧表名;
    
    复制表结构和数据
    create table 新表名 select * from 旧表名;
    

    权限管理

    1. 创建账号
    # 创建本地账号
    create user "user"@"localhost" identified by "pwd";
    
    # 创建远程账号
    create user 'user'@'ip' identified by "pwd";
    create user 'user'@'xxx.xxx.xx.%' identified by "pwd";
    craete user 'user'@'%' identified by 'pwd';
    
    1. 授权
      grant all on . to 'user'@'localhost';
      grant select on . to 'user'@'localhost';

    2. 回收权限
      revoke select on . from 'user'@'localhost';

    3. 查看账号
      select * from mysql.userG;
      select * from mysql.dbG;
      select * from mysql.tables_privG;
      select * from mysql.columns_privG;

    char和varchar

    char一定比varchar更占空间吗?
    并不是。因为varchar需要有指示当前长度的bytes位,所以当你要存储的数据正好在存储长度的临界值时,会出现varchar比char更占空间的情况。

    外键关系

    # 必须先创建被关联的表
    create table dep(
    	id int primary key auto_increment,
    	name char(10),
    	comment char(50)
    );
    
    create table 表名(
    	id int primary key auto_increment,
    	name char(10),
    	sex enum('male', 'female'),
    	dep_id int,
    	constraint fk_dep foreign key(dep_id) references dep(id)
    	on delete cascade on update cascade	# 有这一行才能保证删除或更新被关联表中的数据时能成功。
    
    );
  • 相关阅读:
    Failure [INSTALL_FAILED_ALREADY_EXISTS]
    在CentOS 7上构建RAID5、LVM和SAMBAserver(5)——架设SAMBAserver
    adb命令具体解释(二)——手机缺失sqlite3时操作数据库的多种解决方式
    【环境配置】Linux的经常使用命令
    windowsclient开发--使你的client执行时记住上次关闭的大小和位置
    【13】以对象管理资源
    C++ 初始化与赋值
    C++ 变量初始化规则
    C++ 构造和析构
    【20】宁以pass-by-reference-to-const替换pass-by-value
  • 原文地址:https://www.cnblogs.com/tmdhhl/p/11094732.html
Copyright © 2011-2022 走看看