zoukankan      html  css  js  c++  java
  • MySQL

    MySQL

    mysql是什么:

    mysql 是一个关系型数据库管理系统
    mysql 就是一个基于socket编写的C/S架构的软件
    
    客户端软件:
    	mysql自带:如mysql命令,mysqldump命令等
    	python模块:pymysql
    

    数据库管理软件分类

    分为两大类:
    	关系型:如sqllite,db2,oracle,access,sql server,MySQL,注意:sql语句通用。
    	非关系型:mongodb,redis,memcache
    
    可以简单的理解为:
    	关系型数据库需要有表结构。
    	非关系型数据库是key-value存储的,没有表结构。
    

    下载安装

    mysql为我们提供开源的安装在各个操作系统上的安装包,包括ios,linux,windows。

      mysql的安装、启动和基础配置 —— linux版本https://www.cnblogs.com/Eva-J/articles/9664401.html)

      mysql的安装、启动和基础配置 —— mac版本https://www.cnblogs.com/Eva-J/articles/9664401.html)

      mysql的安装、启动和基础配置 —— windows版本https://www.cnblogs.com/Eva-J/articles/9669675.html)

    初始sql语句

    SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。SQL语言分为3种类型:
    1、DDL语句    数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
    2、DML语句    数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
    3、DCL语句    数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE
    
    1. 操作文件夹
            增:create database db1 charset utf8;
            查:show databases;
            改:alter database db1 charset latin1;
            删除: drop database db1;
    
    2. 操作文件
        先切换到文件夹下:use db1
            增:create table t1(id int,name char);
            查:show tables
            改:alter table t1 modify name char(3);
                  alter table t1 change name name1 char(2);
            删:drop table t1; 
    
    3. 操作文件中的内容/记录
            增:insert into t1 values(1,'egon1'),(2,'egon2'),(3,'egon3');
            查:select * from t1;
            改:update t1 set name='sb' where id=2;
            删:delete from t1 where id=1;
            清空表:
                delete from t1; #如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始。
                truncate table t1;数据量大,删除速度比上一条快,且直接从零开始,
    
                auto_increment 表示:自增
                primary key 表示:约束(不能重复且不能为空);加速查找
    

    创建数据库

    语法:
    CREATE DATABASE 数据库名 charset utf8;
    
    数据库的命名规则:
    1. 可以由字母、数字、下划线、@、#、$ 组成
    2. 区分大小写
    3. 唯一性
    4. 不能使用关键字如:create select
    5. 不能单独使用数字
    6. 最长128位
    

    数据库相关操作

    1. 查看数据库
    show databases;
    show create database db1;
    select database();
    
    2. 选择数据库
    use 数据库名
    
    3. 删除数据库
    DROP DATABASE 数据库名;
    
    4. 修改数据库
    alter database db1 charset utf8
    

    表相关

    表介绍:
    	表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段。
    
    创建表
    
    语法:
    create table 表名(
    字段名1 类型[(宽度) 约束条件],
    字段名2 类型[(宽度) 约束条件],
    字段名3 类型[(宽度) 约束条件]
    );
    
    注意:
    1.在同一张表中,字段名是不能相同的。
    2.宽度和约束条件可选。
    3.字段名和类型是必须的。
    
    mysql> create database db_1 charset utf8;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> use db_1;
    Database changed
    
    mysql> create table i_1(
        -> id int,
        -> name varchar(50),
        -> age int(3)
        -> );
    Query OK, 0 rows affected (0.02 sec)
    
    mysql> desc i_1; # 查看表结构,全写为: describe 表名; 
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id    | int(11)     | YES  |     | NULL    |       |
    | name  | varchar(50) | YES  |     | NULL    |       |
    | age   | int(3)      | YES  |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    3 rows in set (0.00 sec)
    
    往表中插入数据:
    
    mysql> insert into i_1 values
        -> (1,'zkim',24);
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from i_1;
    +------+------+------+
    | id   | name | age  |
    +------+------+------+
    |    1 | zkim |   24 |
    +------+------+------+
    1 row in set (0.00 sec)
    

    修改表 ALTER TABLE

    语法:
    1. 修改表名
          ALTER TABLE 表名 
          		RENAME 新表名;
    2. 增加字段
          ALTER TABLE 表名 
          		ADD 字段名  数据类型 [完整性约束条件…],
            	ADD 字段名  数据类型 [完整性约束条件…];
          ALTER TABLE 表名 
          		ADD 字段名  数据类型 [完整性约束条件…]  FIRST;
          ALTER TABLE 表名 
          		ADD 字段名  数据类型 [完整性约束条件…]  AFTER 字段名;
                                
    3. 删除字段
          ALTER TABLE 表名 
                DROP 字段名;
    
    4. 修改字段
          ALTER TABLE 表名 
                MODIFY  字段名 数据类型 [完整性约束条件…];
          ALTER TABLE 表名 
                CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
          ALTER TABLE 表名 
                CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
    
    示例:
    
    1. 修改存储引擎
    mysql> alter table service 
        -> engine=innodb;
        
    2. 添加字段
    mysql> alter table student10
        -> add name varchar(20) not null,
        -> add age int(3) not null default 22;
        
    mysql> alter table student10
        -> add stu_num varchar(10) not null after name;                //添加name字段之后
        
    mysql> alter table student10                        
        -> add sex enum('male','female') default 'male' first;          //添加到最前面
    
    3. 删除字段
    mysql> alter table student10
        -> drop sex;
    
    mysql> alter table service
        -> drop mac;
    
    4. 修改字段类型modify
    mysql> alter table student10
        -> modify age int(3);
    mysql> alter table student10
        -> modify id int(11) not null primary key auto_increment;    //修改为主键
    
    5. 增加约束(针对已有的主键增加auto_increment)
    mysql> alter table student10 modify id int(11) not null primary key auto_increment;
    ERROR 1068 (42000): Multiple primary key defined
    
    mysql> alter table student10 modify id int(11) not null auto_increment;
    Query OK, 0 rows affected (0.01 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    6. 对已经存在的表增加复合主键
    mysql> alter table service2
        -> add primary key(host_ip,port);        
    
    7. 增加主键
    mysql> alter table student1
        -> modify name varchar(10) not null primary key;
    
    8. 增加主键和自动增长
    mysql> alter table student1
        -> modify id int not null primary key auto_increment;
    
    9. 删除主键
    a. 删除自增约束
    mysql> alter table student10 modify id int(11) not null; 
    
    b. 删除主键
    mysql> alter table student10                                 
        -> drop primary key;
    

    复制表

    复制表结构+记录 (key不会复制: 主键、外键和索引)
    mysql> create table new_service select * from service;
    
    只复制表结构
    mysql> select * from service where 1=2;        //条件为假,查不到任何记录
    Empty set (0.00 sec)
    mysql> create table new1_service select * from service where 1=2;  
    Query OK, 0 rows affected (0.00 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> create table t4 like employees;
    
    

    插入数据INSERT

    1. 插入完整数据(顺序插入)
        语法一:
        INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n);
    
        语法二:
        INSERT INTO 表名 VALUES (值1,值2,值3…值n);
    
    2. 指定字段插入数据
        语法:
        INSERT INTO 表名(字段1,字段2,字段3…) VALUES (值1,值2,值3…);
    
    3. 插入多条记录
        语法:
        INSERT INTO 表名 VALUES
            (值1,值2,值3…值n),
            (值1,值2,值3…值n),
            (值1,值2,值3…值n);
            
    4. 插入查询结果
        语法:
        INSERT INTO 表名(字段1,字段2,字段3…字段n) 
                        SELECT (字段1,字段2,字段3…字段n) FROM 表2
                        WHERE …;
    
    

    更新数据UPDATE

    语法:
        UPDATE 表名 SET
            字段1=值1,
            字段2=值2,
            WHERE CONDITION;
    
    示例:
        UPDATE mysql.user SET password=password(‘123’) 
            where user=’root’ and host=’localhost’;
    
    

    删除数据DELETE

    语法:
        DELETE FROM 表名 
            WHERE CONITION;
    
    示例:
        DELETE FROM mysql.user 
            WHERE password=’’;
    
    练习:
        更新MySQL root用户密码为mysql123
        删除除从本地登录的root用户以外的所有用户
    
    

    查询数据SELECT

    单表查询:http://www.cnblogs.com/linhaifeng/articles/7267592.html

    多表查询:http://www.cnblogs.com/linhaifeng/articles/7267596.html

    千里之行,始于足下。
  • 相关阅读:
    3.14周末作业
    3.13作业
    文件处理
    字符编码
    基本数据类型总结
    基本数据类型--------------------集合set()
    python入门009
    作业009
    python入门008
    作业008
  • 原文地址:https://www.cnblogs.com/jincoco/p/12937133.html
Copyright © 2011-2022 走看看